@mdn/fred 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.prettierignore +1 -0
  2. package/.release-please-manifest.json +1 -1
  3. package/CHANGELOG.md +19 -0
  4. package/components/color/global.css +2 -0
  5. package/components/homepage-hero/server.js +0 -1
  6. package/components/placement-sidebar/element.css +7 -0
  7. package/components/reference-layout/server.css +2 -0
  8. package/components/search-modal/element.css +131 -4
  9. package/components/search-modal/element.js +60 -25
  10. package/dist/client/1739.1435a6d3f1a2dd88.js +8 -0
  11. package/dist/client/1739.1435a6d3f1a2dd88.js.map +1 -0
  12. package/dist/client/2776.435ecffa5f77c7eb.js +43 -0
  13. package/dist/client/2776.435ecffa5f77c7eb.js.map +1 -0
  14. package/dist/client/{8483.0c0da6fab68fab50.js → 8483.651683d5e2cbae52.js} +2 -2
  15. package/dist/client/{8483.0c0da6fab68fab50.js.map → 8483.651683d5e2cbae52.js.map} +1 -1
  16. package/dist/client/{9565.5e45ab3e0d622510.js → 9565.faafbc9f4c1268c1.js} +2 -2
  17. package/dist/client/9565.faafbc9f4c1268c1.js.map +1 -0
  18. package/dist/client/{index.1e455f7bb8386557.js → index.f81a73f443949b54.js} +2 -2
  19. package/dist/client/{index.1e455f7bb8386557.js.map → index.f81a73f443949b54.js.map} +1 -1
  20. package/dist/client/{runtime.49d8cdacf2e0c2df.js → runtime.a1cce37ae8fd8f1d.js} +2 -2
  21. package/dist/client/{runtime.49d8cdacf2e0c2df.js.map → runtime.a1cce37ae8fd8f1d.js.map} +1 -1
  22. package/dist/client/stats.json +159 -159
  23. package/dist/client/{styles-global.15e503218e977c18.js → styles-global.29cd4720c8834abd.js} +1 -1
  24. package/dist/client/{styles-global.8acd1554a2791e3c.css → styles-global.f515b2bde4d7df93.css} +2 -2
  25. package/dist/client/styles-global.f515b2bde4d7df93.css.map +1 -0
  26. package/dist/client/{styles-reference-layout.4b0aca3ae954f961.css → styles-reference-layout.ac37f9e3a27faaac.css} +2 -2
  27. package/dist/client/styles-reference-layout.ac37f9e3a27faaac.css.map +1 -0
  28. package/dist/legacy/{index.ae67e107a2bc75bb.js → index.b481dadaaa935e27.js} +3 -3
  29. package/dist/legacy/{index.ae67e107a2bc75bb.js.map → index.b481dadaaa935e27.js.map} +1 -1
  30. package/dist/legacy/stats.json +8 -8
  31. package/dist/ssr/index.js +22 -11
  32. package/dist/ssr/index.js.map +1 -1
  33. package/dist/ssr/stats.json +4 -4
  34. package/l10n/en-US.ftl +1 -1
  35. package/package.json +1 -1
  36. package/dist/client/1739.16064f8d04091fb6.js +0 -8
  37. package/dist/client/1739.16064f8d04091fb6.js.map +0 -1
  38. package/dist/client/2776.f1ca2b5f474ba69f.js +0 -32
  39. package/dist/client/2776.f1ca2b5f474ba69f.js.map +0 -1
  40. package/dist/client/9565.5e45ab3e0d622510.js.map +0 -1
  41. package/dist/client/styles-global.8acd1554a2791e3c.css.map +0 -1
  42. package/dist/client/styles-reference-layout.4b0aca3ae954f961.css.map +0 -1
  43. /package/dist/legacy/{index.ae67e107a2bc75bb.js.LICENSE.txt → index.b481dadaaa935e27.js.LICENSE.txt} +0 -0
@@ -9,11 +9,11 @@
9
9
  "assets": [
10
10
  {
11
11
  "name": "index.js",
12
- "size": 1388713
12
+ "size": 1391654
13
13
  }
14
14
  ],
15
15
  "filteredAssets": 0,
16
- "assetsSize": 1388713,
16
+ "assetsSize": 1391654,
17
17
  "auxiliaryAssets": [
18
18
  {
19
19
  "name": "desktop-saving-page.bbb8eedefb3e848f.png",
@@ -301,7 +301,7 @@
301
301
  },
302
302
  {
303
303
  "name": "index.js.map",
304
- "size": 4127588
304
+ "size": 4131590
305
305
  },
306
306
  {
307
307
  "name": "deno.aed70d20abbf1067.svg",
@@ -476,7 +476,7 @@
476
476
  "size": 135602
477
477
  }
478
478
  ],
479
- "auxiliaryAssetsSize": 8587095,
479
+ "auxiliaryAssetsSize": 8591097,
480
480
  "children": {},
481
481
  "childAssets": {}
482
482
  }
package/l10n/en-US.ftl CHANGED
@@ -12,7 +12,7 @@ baseline-supported-in = Supported in { $browsers }
12
12
  baseline-unsupported-in = Not widely supported in { $browsers }
13
13
  baseline-supported-and-unsupported-in = Supported in { $supported }, but not widely supported in { $unsupported }
14
14
 
15
- homepage-hero-title = Resources for <u data-l10n-name="developers">Developers</u>,<br> by Developers
15
+ homepage-hero-title = Resources for Developers,<br> by Developers
16
16
  homepage-hero-description = Documenting <a data-l10n-name="css">CSS</a>, <a data-l10n-name="html">HTML</a>, and <a data-l10n-name="js">JavaScript</a>, since 2005.
17
17
 
18
18
  not-found-title = Page not found
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdn/fred",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "start": "node --env-file=.env scripts/server.js",
@@ -1,8 +0,0 @@
1
- export const __webpack_ids__=["1739"];export const __webpack_modules__={61667:function(e){e.exports=function(e,t){return(t||(t={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes))?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e}},99454:function(e,t,a){e.exports=a.p+"search.5dd31cbeea7d1af9.svg"},73594:function(e,t,a){a.r(t),a.d(t,{MDNHomepageSearch:()=>MDNHomepageSearch});var o=a(14703),r=a(69535),n=a(39187),s=a(8036);let MDNHomepageSearch=class MDNHomepageSearch extends(0,r.q)(o.oi){static styles=s.Z;_showModal(){let e=document.querySelector("#search");e instanceof n.MDNSearchModal?e.showModal():console.error("MDNSearchModal not found!")}render(){return(0,o.dy)`<button
2
- class="mdn-homepage-search"
3
- title=${this.l10n`Search the site`}
4
- @click=${this._showModal}
5
- >
6
- ${this.l10n`Search`}
7
- </button>`}};customElements.define("mdn-homepage-search",MDNHomepageSearch)},8036:function(e,t,a){a.d(t,{Z:()=>p});var o=a(14703),r=a(8081),n=a.n(r),s=a(23645),c=a.n(s),i=a(61667),d=a.n(i),l=new a.U(a(99454)),h=c()(n()),m=d()(l);h.push([e.id,`.mdn-homepage-search{border-color:var(--color-border-primary);border-radius:2em;border-style:solid;display:flex;font-size:var(--font-size-large);gap:.5ch;justify-content:center;margin:0 auto;padding:1em}.mdn-homepage-search:after{background-color:var(--color-text-primary);content:"";display:inline-block;flex-shrink:0;height:1.1em;-webkit-mask-image:url(${m});mask-image:url(${m});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.1em}button{cursor:pointer}`,""]);let p=(0,o.iv)([h.toString()])}};
8
- //# sourceMappingURL=1739.16064f8d04091fb6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1739.16064f8d04091fb6.js","sources":["webpack://@mdn/fred/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@mdn/fred/./components/homepage-search/element.js","webpack://@mdn/fred/./components/homepage-search/element.css"],"sourcesContent":["\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","import { LitElement, html } from \"lit\";\n\nimport { L10nMixin } from \"../../l10n/mixin.js\";\nimport { MDNSearchModal } from \"../search-modal/element.js\";\n\nimport styles from \"./element.css?lit\";\n\nexport class MDNHomepageSearch extends L10nMixin(LitElement) {\n static styles = styles;\n\n _showModal() {\n const search = document.querySelector(\"#search\");\n if (search instanceof MDNSearchModal) {\n search.showModal();\n } else {\n console.error(\"MDNSearchModal not found!\");\n }\n }\n\n render() {\n return html`<button\n class=\"mdn-homepage-search\"\n title=${this.l10n`Search the site`}\n @click=${this._showModal}\n >\n ${this.l10n`Search`}\n </button>`;\n }\n}\ncustomElements.define(\"mdn-homepage-search\", MDNHomepageSearch);\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../icon/search.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.mdn-homepage-search{border-color:var(--color-border-primary);border-radius:2em;border-style:solid;display:flex;font-size:var(--font-size-large);gap:.5ch;justify-content:center;margin:0 auto;padding:1em}.mdn-homepage-search:after{background-color:var(--color-text-primary);content:\"\";display:inline-block;flex-shrink:0;height:1.1em;-webkit-mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.1em}button{cursor:pointer}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["String","MDNHomepageSearch","s","document","console","customElements"],"mappings":"0FAEA,EAAO,OAAO,CAAG,SAAU,CAAG,CAAE,CAAO,SACjC,AAAC,GACH,GAAU,CAAC,GAER,IAGL,EAAMA,OAAO,EAAI,UAAU,CAAG,EAAI,OAAO,CAAG,GAGxC,eAAe,IAAI,CAAC,IACtB,GAAM,EAAI,KAAK,CAAC,EAAG,GAAE,EAEnB,EAAQ,IAAI,EACd,IAAO,EAAQ,IAAI,AAAD,EAKhB,oBAAoB,IAAI,CAAC,IAAQ,EAAQ,UAAU,GAC9C,IAAK,MAAM,CAAC,EAAI,OAAO,CAAC,KAAM,OAAO,OAAO,CAAC,MAAO,OAAQ,KAE9D,CACT,C,kMClBO,IAAMC,kBAAN,MAAMA,yBAA0B,QAAU,IAAU,EACzD,OAAO,OAASC,EAAA,CAAM,AAAC,AAEvB,aAAa,CACX,IAAM,EAASC,SAAS,aAAa,CAAC,UAClC,cAAkB,gBAAc,CAClC,EAAO,SAAS,GAEhBC,QAAQ,KAAK,CAAC,4BAElB,CAEA,QAAS,CACP,MAAO,QAAI,CAAC;;YAEJ,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC5B,EAAE,IAAI,CAAC,UAAU,CAAC;;MAEzB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACb,CAAC,AACZ,CACF,EACAC,eAAe,MAAM,CAAC,sBAAuBJ,kB,kHCxBzC,EAAgC,kBAChC,EAA0B,IAA4B,KACtD,EAAqC,IAAgC,GAEzE,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,CAAC,mWAAmW,EAAE,EAAmC,iBAAiB,EAAE,EAAmC,oIAAoI,CAAC,CAAE,GAAG,EAElnB,MAAe,SAAI,CAAC,EAAwB,QAAQ,GAAG,C"}
@@ -1,32 +0,0 @@
1
- export const __webpack_ids__=["2776"];export const __webpack_modules__={39187:function(e,t,s){s.r(t),s.d(t,{MDNSearchModal:()=>MDNSearchModal,splitQuery:()=>n});var i=s(35470),a=s(14703),l=s(69535),o=s(1613);let MDNSearchModal=class MDNSearchModal extends(0,l.q)(a.oi){static styles=o.Z;static properties={_index:{state:!0},_query:{state:!0},_selected:{state:!0},_shiftFocus:{state:!0}};constructor(){super(),this._index=void 0,this._query="",this._selected=0,this._shiftFocus=!1}async _loadIndex(){this._index||(this._index=this._fetchIndex())}async _fetchIndex(){let e=await fetch(`/${this.locale}/search-index.json`),t=await e.json();return{flex:t.map(({title:e,url:t},s)=>({index:s,title:e.toLowerCase(),slugTail:t.split("/").pop()?.toLowerCase()||""})),items:t}}showModal(){this._loadIndex(),this.shadowRoot?.querySelector("dialog")?.showModal(),this.shadowRoot?.querySelector("input")?.select()}_input({target:e}){e instanceof HTMLInputElement&&(this._query=e.value)}_keydown(e){let t=(this._queryIndex.value?.length||0)+1;switch(e.key){case"ArrowUp":{e.preventDefault();let s=(this._selected-1)%t;this._selected=s<0?t+s:s;break}case"ArrowDown":e.preventDefault(),this._selected=(this._selected+1)%t;break;default:return}}_submit(e){e.preventDefault();let t=this.shadowRoot?.querySelector("[data-selected] a");t instanceof HTMLElement&&t.click()}_focus({target:e}){if(e instanceof HTMLElement){let t=e.closest("[data-result]");if(t instanceof HTMLElement){let e=Number.parseInt(t.dataset.result||"NaN",10);Number.isNaN(e)||(this._selected=e,this._shiftFocus=!0)}else this._shiftFocus=!1}}_globalKeydown(e){let t=e.composedPath()?.[0]||e.target;if(t instanceof HTMLElement&&(["TEXTAREA","INPUT"].includes(t.tagName)||t.isContentEditable))return;let s=globalThis.getSelection()?.toString(),i=e.key,a=e.ctrlKey||e.metaKey,l="k"===i&&a&&!e.shiftKey;("/"===i&&!a||l)&&(e.preventDefault(),this.showModal(),s&&(this._query=s))}_queryIndex=new i.iQ(this,{args:()=>[this._index,this._query],task:async([e,t])=>{if(e&&t){var s=t,i=await e;let a=s.toLowerCase().trim(),l=n(s);return i.flex.filter(({title:e})=>l.every(t=>e.includes(t))).map(({index:e,title:t,slugTail:s})=>[Number([t,s].includes(a)),e]).sort(([e],[t])=>t-e).map(([e,t])=>t).slice(0,10).map(e=>e&&(i.items||[])[e]).filter(Boolean)}}});connectedCallback(){super.connectedCallback(),this._globalKeydown=this._globalKeydown.bind(this),document.addEventListener("keydown",this._globalKeydown),this._loadIndex=this._loadIndex.bind(this),this.renderRoot.addEventListener("mouseover",this._loadIndex)}disconnectedCallback(){super.disconnectedCallback(),this.renderRoot.removeEventListener("mouseover",this._loadIndex),document.removeEventListener("keydown",this._globalKeydown)}render(){let e=this._queryIndex.value?.length||0;return(0,a.dy)`
2
- <dialog @keydown=${this._keydown} @focusin=${this._focus} closedby="any">
3
- <form @submit=${this._submit}>
4
- <input
5
- type="text"
6
- .value=${this._query}
7
- autofocus
8
- @input=${this._input}
9
- />
10
- </form>
11
- <ul>
12
- ${this._queryIndex.render({initial:()=>(0,a.dy)`<progress></progress>`,pending:()=>(0,a.dy)`<progress></progress>`,complete:e=>e?.map(({title:e,url:t},s)=>(0,a.dy)`
13
- <li ?data-selected=${this._selected===s} data-result=${s}>
14
- <a href=${t}>${(function(e,t){let s=n(t),i=s.map(e=>e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)).map(e=>`(${e})`).join("|");return e.split(RegExp(i,"gi")).filter(Boolean).map(e=>s.includes(e.toLowerCase())?(0,a.dy)`<mark>${e}</mark>`:e)})(e,this._query)}</a>
15
- <small>
16
- ${t.split("/").slice(1).filter(e=>!["docs",this.locale].includes(e)).join(" / ")}
17
- </small>
18
- </li>
19
- `)})}
20
- ${this._query?(0,a.dy)`<li
21
- ?data-selected=${this._selected===e}
22
- data-result=${e}
23
- >
24
- <a
25
- href=${`/${this.locale}/search?${new URLSearchParams({q:this._query})}`}
26
- >${this.l10n.raw({id:"search-modal-site-search",args:{query:this._query},elements:{query:{tag:"code"}}})}</a
27
- >
28
- </li>`:a.Ld}
29
- </ul>
30
- </dialog>
31
- `}updated(){if(this._shiftFocus){let e=this.shadowRoot?.querySelector("[data-selected] a");e instanceof HTMLElement&&e.focus()}}};function n(e){return(e=e.trim().toLowerCase()).startsWith(".")||e.endsWith(".")?e.split(/[ ,]+/):e.split(/[ ,.]+/)}customElements.define("mdn-search-modal",MDNSearchModal)},1613:function(e,t,s){s.d(t,{Z:()=>r});var i=s(14703),a=s(8081),l=s.n(a),o=s(23645),n=s.n(o)()(l());n.push([e.id,"*,:after,:before{box-sizing:border-box}dialog{margin:5vh auto;max-height:90vh;width:50vw}li[data-selected]{background:#ff0}",""]);let r=(0,i.iv)([n.toString()])}};
32
- //# sourceMappingURL=2776.f1ca2b5f474ba69f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"2776.f1ca2b5f474ba69f.js","sources":["webpack://@mdn/fred/./components/search-modal/element.js","webpack://@mdn/fred/./components/search-modal/element.css"],"sourcesContent":["import { Task } from \"@lit/task\";\nimport { LitElement, html, nothing } from \"lit\";\n\nimport { L10nMixin } from \"../../l10n/mixin.js\";\n\nimport styles from \"./element.css?lit\";\n\nexport class MDNSearchModal extends L10nMixin(LitElement) {\n static styles = styles;\n\n static properties = {\n _index: { state: true },\n _query: { state: true },\n _selected: { state: true },\n _shiftFocus: { state: true },\n };\n\n constructor() {\n super();\n /** @type {Promise<import(\"./types.js\").SearchIndex> | undefined} */\n this._index = undefined;\n this._query = \"\";\n this._selected = 0;\n this._shiftFocus = false;\n }\n\n async _loadIndex() {\n if (this._index) {\n return;\n }\n\n this._index = this._fetchIndex();\n }\n\n async _fetchIndex() {\n const res = await fetch(`/${this.locale}/search-index.json`);\n /** @type {import(\"./types.js\").SearchIndexItem[]} */\n const items = await res.json();\n /** @type {import(\"./types.js\").SearchIndexFlexItem[]} */\n const flex = items.map(({ title, url }, index) => ({\n index,\n title: title.toLowerCase(),\n slugTail: url.split(\"/\").pop()?.toLowerCase() || \"\",\n }));\n\n return {\n flex,\n items,\n };\n }\n\n showModal() {\n this._loadIndex();\n this.shadowRoot?.querySelector(\"dialog\")?.showModal();\n this.shadowRoot?.querySelector(\"input\")?.select();\n }\n\n /** @param {InputEvent} event */\n _input({ target }) {\n if (target instanceof HTMLInputElement) {\n this._query = target.value;\n }\n }\n\n /** @param {KeyboardEvent} event */\n _keydown(event) {\n const results = (this._queryIndex.value?.length || 0) + 1;\n switch (event.key) {\n case \"ArrowUp\": {\n event.preventDefault();\n const value = (this._selected - 1) % results;\n this._selected = value < 0 ? results + value : value;\n break;\n }\n case \"ArrowDown\":\n event.preventDefault();\n this._selected = (this._selected + 1) % results;\n break;\n default:\n return;\n }\n }\n\n /** @param {SubmitEvent} event */\n _submit(event) {\n event.preventDefault();\n const item = this.shadowRoot?.querySelector(\"[data-selected] a\");\n if (item instanceof HTMLElement) {\n item.click();\n }\n }\n\n /** @param {FocusEvent} event */\n _focus({ target }) {\n if (target instanceof HTMLElement) {\n const focused = target.closest(\"[data-result]\");\n if (focused instanceof HTMLElement) {\n const index = Number.parseInt(focused.dataset.result || \"NaN\", 10);\n if (!Number.isNaN(index)) {\n this._selected = index;\n this._shiftFocus = true;\n }\n } else {\n this._shiftFocus = false;\n }\n }\n }\n\n /** @param {KeyboardEvent} event */\n _globalKeydown(event) {\n const target = event.composedPath()?.[0] || event.target;\n const isTextField =\n target instanceof HTMLElement &&\n ([\"TEXTAREA\", \"INPUT\"].includes(target.tagName) ||\n target.isContentEditable);\n\n if (isTextField) {\n return;\n }\n\n const selection = globalThis.getSelection()?.toString();\n const keyPressed = event.key;\n const ctrlOrMetaPressed = event.ctrlKey || event.metaKey;\n const isSlash = keyPressed === \"/\" && !ctrlOrMetaPressed;\n const isCtrlK = keyPressed === \"k\" && ctrlOrMetaPressed && !event.shiftKey;\n\n if (isSlash || isCtrlK) {\n event.preventDefault();\n this.showModal();\n if (selection) {\n this._query = selection;\n }\n }\n }\n\n _queryIndex = new Task(this, {\n args: () => [this._index, this._query],\n task: async ([index, query]) => {\n if (!index || !query) {\n return;\n }\n return quickSearch(query, await index);\n },\n });\n\n connectedCallback() {\n super.connectedCallback();\n this._globalKeydown = this._globalKeydown.bind(this);\n document.addEventListener(\"keydown\", this._globalKeydown);\n this._loadIndex = this._loadIndex.bind(this);\n this.renderRoot.addEventListener(\"mouseover\", this._loadIndex);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.renderRoot.removeEventListener(\"mouseover\", this._loadIndex);\n document.removeEventListener(\"keydown\", this._globalKeydown);\n }\n\n render() {\n const siteSearchIndex = this._queryIndex.value?.length || 0;\n return html`\n <dialog @keydown=${this._keydown} @focusin=${this._focus} closedby=\"any\">\n <form @submit=${this._submit}>\n <input\n type=\"text\"\n .value=${this._query}\n autofocus\n @input=${this._input}\n />\n </form>\n <ul>\n ${this._queryIndex.render({\n initial: () => html`<progress></progress>`,\n pending: () => html`<progress></progress>`,\n complete: (results) =>\n results?.map(\n ({ title, url }, i) => html`\n <li ?data-selected=${this._selected === i} data-result=${i}>\n <a href=${url}>${HighlightMatch(title, this._query)}</a>\n <small>\n ${url\n .split(\"/\")\n .slice(1)\n .filter((p) => ![\"docs\", this.locale].includes(p))\n .join(\" / \")}\n </small>\n </li>\n `,\n ),\n })}\n ${this._query\n ? html`<li\n ?data-selected=${this._selected === siteSearchIndex}\n data-result=${siteSearchIndex}\n >\n <a\n href=${`/${this.locale}/search?${new URLSearchParams({ q: this._query })}`}\n >${this.l10n.raw({\n id: \"search-modal-site-search\",\n args: {\n query: this._query,\n },\n elements: {\n query: { tag: \"code\" },\n },\n })}</a\n >\n </li>`\n : nothing}\n </ul>\n </dialog>\n `;\n }\n\n updated() {\n if (this._shiftFocus) {\n const selected = this.shadowRoot?.querySelector(\"[data-selected] a\");\n if (selected instanceof HTMLElement) {\n selected.focus();\n }\n }\n }\n}\n\ncustomElements.define(\"mdn-search-modal\", MDNSearchModal);\n\n/**\n * @param {string} input\n * @param {import(\"./types.js\").SearchIndex} index\n * @returns {import(\"./types.js\").SearchResultItem[]}\n */\nfunction quickSearch(input, index) {\n const inputValueLC = input.toLowerCase().trim();\n const q = splitQuery(input);\n const indexResults = index.flex\n .filter(({ title }) => q.every((q) => title.includes(q)))\n .map(({ index, title, slugTail }) => {\n const exact = Number([title, slugTail].includes(inputValueLC));\n return /** @type {const} */ ([exact, index]);\n })\n .sort(([aExact], [bExact]) => bExact - aExact) // Boost exact matches.\n .map(([_, i]) => i)\n .slice(0, 10);\n\n return indexResults.map((i) => i && (index.items || [])[i]).filter(Boolean);\n}\n\n/**\n * Used by quicksearch and sidebar filters.\n * @param {string} term\n * @returns {string[]}\n */\nexport function splitQuery(term) {\n term = term.trim().toLowerCase();\n return term.startsWith(\".\") || term.endsWith(\".\")\n ? // Dot is probably meaningful.\n term.split(/[ ,]+/)\n : // Dot is probably just a word separator.\n term.split(/[ ,.]+/);\n}\n\n/**\n * @param {string} title\n * @param {string} query\n */\nfunction HighlightMatch(title, query) {\n // Split on highlight term and include term into parts, ignore case.\n const words = splitQuery(query);\n // $& means the whole matched string\n const regexWords = words.map((s) =>\n s.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`),\n );\n const regex = regexWords.map((word) => `(${word})`).join(\"|\");\n const parts = title.split(new RegExp(regex, \"gi\"));\n return parts\n .filter(Boolean)\n .map((part) =>\n words.includes(part.toLowerCase()) ? html`<mark>${part}</mark>` : part,\n );\n}\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `*,:after,:before{box-sizing:border-box}dialog{margin:5vh auto;max-height:90vh;width:50vw}li[data-selected]{background:#ff0}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["MDNSearchModal","fetch","HTMLInputElement","e","HTMLElement","Number","t","s","globalThis","i","Boolean","document","String","RegExp","URLSearchParams","customElements"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"9565.5e45ab3e0d622510.js","sources":["webpack://@mdn/fred/./l10n/en-US.ftl","webpack://@mdn/fred/./l10n/fluent.js","webpack://@mdn/fred/./l10n/de.ftl","webpack://@mdn/fred/./l10n/es.ftl","webpack://@mdn/fred/./l10n/fr.ftl","webpack://@mdn/fred/./l10n/ja.ftl","webpack://@mdn/fred/./l10n/ko.ftl","webpack://@mdn/fred/./l10n/pt-BR.ftl","webpack://@mdn/fred/./l10n/ru.ftl","webpack://@mdn/fred/./l10n/zh-CN.ftl","webpack://@mdn/fred/./l10n/zh-TW.ftl","webpack://@mdn/fred/./l10n/mixin.js","webpack://@mdn/fred/./symmetric-context/both.js"],"sourcesContent":["export default `# TODO Use comments, see: https://firefox-source-docs.mozilla.org/l10n/fluent/review.html#comments\n# TODO Consider using terms, see: https://firefox-source-docs.mozilla.org/l10n/fluent/review.html#terms and https://projectfluent.org/fluent/guide/references.html#message-references\n\narticle-footer-last-modified = This page was last modified on <time data-l10n-name=\"date\">{ \\$date }</timestamp> by <a data-l10n-name=\"contributors\">MDN contributors</a>.\narticle-footer-source-title = Folder: { \\$folder } (Opens in a new tab)\n\nbaseline-asterisk = { \\$asterisk } Some parts of this feature may have varying levels of support.\nbaseline-high-extra = This feature is well established and works across many devices and browser versions. It’s been available across browsers since { \\$date }.\nbaseline-low-extra = Since { \\$date }, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.\nbaseline-not-extra = This feature is not Baseline because it does not work in some of the most widely-used browsers.\nbaseline-supported-in = Supported in { \\$browsers }\nbaseline-unsupported-in = Not widely supported in { \\$browsers }\nbaseline-supported-and-unsupported-in = Supported in { \\$supported }, but not widely supported in { \\$unsupported }\n\nhomepage-hero-title = Resources for <u data-l10n-name=\"developers\">Developers</u>,<br> by Developers\nhomepage-hero-description = Documenting <a data-l10n-name=\"css\">CSS</a>, <a data-l10n-name=\"html\">HTML</a>, and <a data-l10n-name=\"js\">JavaScript</a>, since 2005.\n\nnot-found-title = Page not found\nnot-found-description = Sorry, the page <code data-l10n-name=\"url\">{ \\$url }</code> could not be found.\nnot-found-fallback-english = <strong data-l10n-name=\"strong\">Good news:</strong> The page you requested exists in <em data-l10n-name=\"em\">English</em>.\nnot-found-fallback-search = The page you requested doesn't exist, but you could try a site search for:\nnot-found-back = Go back to the home page\n\nreference-toc-header = In this article\n\nfooter-mofo = Visit <a data-l10n-name=\"moco\">Mozilla Corporation’s</a> not-for-profit parent, the <a data-l10n-name=\"mofo\">Mozilla Foundation</a>.\nfooter-copyright = Portions of this content are ©1998–2024 by individual mozilla.org contributors. Content available under <a data-l10n-name=\"cc\">a Creative Commons license</a>.\n\nsearch-title = Search results for: <em>{ \\$query }</em>\nsearch-stats = Found { \\$results } matches in { \\$time } milliseconds.\n\nsearch-modal-site-search = Site search for <em>{ \\$query }</em>\n\nblog-time-to-read = { \\$minutes ->\n [one] { \\$minutes } minute read\n *[other] { \\$minutes } minutes read\n}\nblog-post-not-found = Blog post not found.\n\nblog-previous = Previous Post\nblog-next = Next Post\n\nReport = Report\n\nobs-title = HTTP Observatory\nobs-landing-intro = Launched in 2016, the HTTP Observatory enhances web security by analyzing compliance with best security practices. It has provided insights to over 6.9 million websites through 47 million scans.\nobs-assessment = Developed by Mozilla, the HTTP Observatory performs an in-depth assessment of a site’s HTTP headers and other key security configurations.\nobs-scanning = Its automated scanning process provides developers and website administrators with detailed, actionable feedback, focusing on identifying and addressing potential security vulnerabilities.\nobs-security = The tool is instrumental in helping developers and website administrators strengthen their sites against common security threats in a constantly advancing digital environment.\nobs-mdn = The HTTP Observatory provides effective security insights, guided by Mozilla's expertise and commitment to a safer and more secure internet and based on well-established trends and guidelines.\n\n\ncompat-loading = Loading…\n\ncompat-browser-version-date = { \\$browser } { \\$version } – Released { \\$date }\n\ncompat-link-report-issue = Report problems with this compatibility data\ncompat-link-report-issue-title = Report an issue with this compatibility data\ncompat-link-report-missing-title = Report missing compatibility data\ncompat-link-report-missing = Report this issue\ncompat-link-source = View data on GitHub\ncompat-link-source-title = File: { \\$filename }\n\ncompat-deprecated = Deprecated\ncompat-experimental = Experimental\ncompat-nonstandard = Non-standard\ncompat-no = No\n\ncompat-support-full = Full support\ncompat-support-partial = Partial support\ncompat-support-no = No support\ncompat-support-unknown = Support unknown\ncompat-support-preview = Preview browser support\ncompat-support-prefix = Implemented with the vendor prefix: { \\$prefix }\ncompat-support-altname = Alternate name: { \\$altname }\ncompat-support-removed = Removed in { \\$version } and later\ncompat-support-see-impl-url = See <a data-l10n-name=\"impl_url\">{ \\$label }</a>\n\ncompat-legend = Legend\ncompat-legend-tip = Tip: you can click/tap on a cell for more information.\ncompat-legend-yes = { compat-support-full }\ncompat-legend-partial = { compat-support-partial }\ncompat-legend-preview = In development. Supported in a pre-release version.\ncompat-legend-no = { compat-support-no }\ncompat-legend-unknown = Compatibility unknown\ncompat-legend-experimental = { compat-experimental }. Expect behavior to change in the future.\ncompat-legend-nonstandard = { compat-nonstandard }. Check cross-browser support before using.\ncompat-legend-deprecated = { compat-deprecated }. Not for use in new websites.\ncompat-legend-footnote = See implementation notes.\ncompat-legend-disabled = User must explicitly enable this feature.\ncompat-legend-altname = Uses a non-standard name.\ncompat-legend-prefix = Requires a vendor prefix or different name for use.\ncompat-legend-more = Has more compatibility info.\n\nsidebar-filter-matches = { \\$matches ->\n [0] No matches\n [1] { \\$matches } match\n *[other] { \\$matches } matches\n}\n\nplacement-note = Ad\nplacement-no = Don't want to see ads?\n\npagination-next = Next page\npagination-prev = Previous page\npagination-current = Current page\npagination-goto = Go to page { \\$page }\n\nlogout = Sign out\nlogin = Log in\nsettings = My Settings\n`;","import { FluentBundle, FluentResource } from \"@fluent/bundle\";\nimport insane from \"insane\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\n\nimport de_ftl from \"../l10n/de.ftl\";\nimport enUS_ftl from \"../l10n/en-US.ftl\";\nimport es_ftl from \"../l10n/es.ftl\";\nimport fr_ftl from \"../l10n/fr.ftl\";\nimport ja_ftl from \"../l10n/ja.ftl\";\nimport ko_ftl from \"../l10n/ko.ftl\";\nimport ptBR_ftl from \"../l10n/pt-BR.ftl\";\nimport ru_ftl from \"../l10n/ru.ftl\";\nimport zhCN_ftl from \"../l10n/zh-CN.ftl\";\nimport zhTW_ftl from \"../l10n/zh-TW.ftl\";\n\n/**\n * @import { AllowedTags } from \"insane\";\n */\n\n/** @type {Record<string, string>} */\nconst ftlMap = {\n \"en-US\": enUS_ftl,\n de: de_ftl,\n es: es_ftl,\n fr: fr_ftl,\n ja: ja_ftl,\n ko: ko_ftl,\n \"pt-BR\": ptBR_ftl,\n ru: ru_ftl,\n \"zh-CN\": zhCN_ftl,\n \"zh-TW\": zhTW_ftl,\n};\n\nconst ALLOWED_TAGS = [\"i\", \"strong\", \"br\", \"em\"];\nconst ALLOWED_ATTRIBUTES = [\"title\", \"aria-label\"];\n\nexport class Fluent {\n /**\n * @param {string} locale\n * @param {string[]} resources\n */\n constructor(locale = \"en-US\", resources = []) {\n this.locale = locale;\n\n this.usBundle = Fluent.constructBundle(new FluentBundle(locale), [\n enUS_ftl,\n ]);\n\n if (resources.length > 0) {\n this.bundle = Fluent.constructBundle(new FluentBundle(locale), [\n enUS_ftl,\n ...resources,\n ]);\n }\n }\n\n /**\n * @param {FluentBundle} bundle\n * @param {string[]} resources\n */\n static constructBundle(bundle, resources = []) {\n for (const r of resources) {\n const errors = bundle.addResource(new FluentResource(r), {\n allowOverrides: true,\n });\n if (errors.length > 0) {\n console.error(errors);\n }\n }\n return bundle;\n }\n\n /**\n * @param {string} id\n * @param {string} [attr]\n * @param {Record<string, any>} [args]\n * @param {Record<string, import(\"../types/fluent.js\").Element>} [elements]\n * @returns {string | ReturnType<typeof unsafeHTML> | undefined}\n */\n get(id, attr, args, elements) {\n const message = this.getMessage(id, attr, args);\n if (!message) {\n return;\n }\n return Fluent.sanitize(message, elements);\n }\n\n /**\n * @param {string} message\n * @param {Record<string, import(\"../types/fluent.js\").Element>} [elements]\n * @returns {string | ReturnType<typeof unsafeHTML>}\n */\n static sanitize(message, elements = {}) {\n /** @type { Record<string, string[]> } */\n const allowedAttributes = {};\n for (const t of Object.values(elements)) {\n allowedAttributes[t.tag] = [\n ...Object.keys(t).filter((x) => x !== \"tag\"),\n ...ALLOWED_ATTRIBUTES,\n ];\n }\n\n const allowedTags = [\n ...Object.values(elements).map((t) => t.tag),\n ...ALLOWED_TAGS,\n ];\n\n let safe = true;\n const sanitized = insane(\n message,\n {\n allowedAttributes,\n allowedTags: /** @type {AllowedTags[]} */ (allowedTags),\n allowedSchemes: [\"http\", \"https\", \"mailto\"],\n filter(token) {\n // TODO: use element names directly\n const name = token.attrs[\"data-l10n-name\"];\n if (name) {\n for (const [k, v] of Object.entries(elements[name] || {})) {\n token.attrs[k] = v;\n }\n }\n if (\n ALLOWED_TAGS.includes(token.tag) ||\n (name &&\n Object.keys(elements).includes(name) &&\n elements[name]?.tag === token.tag)\n ) {\n safe = false;\n return true;\n }\n return false;\n },\n },\n true,\n );\n return safe ? sanitized : unsafeHTML(sanitized);\n }\n\n /**\n * @param {string} id\n * @param {string} [attr]\n * @param {Record<string, any>} [args]\n * @param {FluentBundle | undefined} [bundle]\n * @param {boolean} [us]\n * @returns {string | undefined}\n */\n getMessage(id, attr, args = {}, bundle = this.bundle, us = false) {\n const parentMessage = bundle ? bundle.getMessage(id) : undefined;\n let message;\n\n if (this.locale === \"qa\") {\n return `[${id}${attr ? `.${attr}` : \"\"}]`;\n }\n\n if (!parentMessage) {\n if (us) {\n // console.error(`string ${id} doesn't exist`);\n // return `[${id}${attr ? `.${attr}` : \"\"}]`;\n return;\n }\n return this.getMessage(id, attr, args, this.usBundle, true);\n }\n\n if (attr) {\n message = parentMessage.attributes[attr];\n if (!message) {\n if (us) {\n // console.error(`string ${id} with ${attr} attribute doesn't exist`);\n // return `[${id}.${attr}]`;\n return;\n }\n return this.getMessage(id, attr, args, this.usBundle, true);\n }\n } else if (parentMessage.value) {\n message = parentMessage.value;\n }\n\n if (!message || !bundle) {\n return \"\";\n }\n\n /** @type {Error[]} */\n const errors = [];\n const formatted = bundle?.formatPattern(message, args, errors);\n if (errors.length > 0) {\n console.error(errors);\n }\n return formatted;\n }\n}\n\n/** @type {Map<string, Fluent>} */\nconst fluent = new Map();\n\n/**\n * @param {string} [locale]\n */\nfunction getLocale(locale) {\n if (!locale) {\n return;\n }\n if (!fluent.has(locale)) {\n const ftl = ftlMap[locale];\n const localeF = new Fluent(locale, ftl ? [ftl] : undefined);\n fluent.set(locale, localeF);\n }\n return fluent.get(locale);\n}\n\n/**\n * @param {string} [locale]\n */\nexport default function getFluentContext(locale) {\n /**\n * @overload\n * @param {string} id\n * @param {string} [_comment]\n * @returns {import(\"../types/fluent.js\").L10nTag}\n */\n\n /**\n * @overload\n * @param {TemplateStringsArray} strings\n * @returns {string}\n */\n\n /**\n * @param {string | TemplateStringsArray} idOrStrings\n * @param {string} [_comment]\n * @returns {import(\"../types/fluent.js\").L10nTag | string}\n */\n function l10n(idOrStrings, _comment) {\n if (typeof idOrStrings === \"string\") {\n // called as a function, returning a template tag:\n // l10n(\"foobar\")`Foobar`\n const id = idOrStrings;\n const localizedString = getLocale(locale)?.get(id);\n const fallbackString = `[${id}]`;\n /** @type {import(\"../types/fluent.js\").L10nTag} */\n const tag = (strings) => {\n // we don't currently support any expressions in the template string\n // we might in the future, if we use l10n.raw a lot\n const templateString = strings[0];\n return localizedString || templateString || fallbackString;\n };\n tag.toString = () => {\n // called as a function, used as a function:\n // ${l10n(\"foobar\")}\n return (\n (typeof localizedString === \"string\" && localizedString) ||\n fallbackString\n );\n };\n return tag;\n }\n // called directly as a template tag:\n // l10n`Foobar`\n // TODO: create consistent logic for id generation at runtime and scrapetime\n const strings = idOrStrings;\n const templateString = strings[0];\n return templateString || \"\";\n }\n\n /**\n * @param {{ id: string, attr?: string, args?: Record<string, any>, elements?: Record<string, import(\"../types/fluent.js\").Element> }} param0\n */\n l10n.raw = function ({ id, attr, args, elements }) {\n const fluent = getLocale(locale);\n if (fluent) {\n return fluent.get(id, attr, args, elements);\n }\n return `[${id}]`;\n };\n\n return l10n;\n}\n\n// const l10n = getFluentContext(\"en-US\");\n\n// console.log(l10n`Hello`);\n// console.log(l10n(\"hello\")`Hello`);\n// console.log(l10n(\"hello\", \"a greeting to the user\")`Hello`);\n// console.log(l10n.raw({ id: \"hello\" }));\n// console.log(`${l10n(\"hello\")}`);\n\n// should show error:\n// l10n(\"hello\")`Hello ${\"world\"}`;\n","export default `content-feedback-question = War diese Übersetzung hilfreich?\ncontent-feedback-reason = Warum war diese Übersetzung nicht hilfreich?\ncontent-feedback-thanks = Vielen Dank für die Rückmeldung!\n\nreference-toc-header = In diesem Artikel\n\nfooter-tagline = Dein Bauplan für ein besseres Internet.\nfooter-mofo = Besuche die gemeinnützige Muttergesellschaft der <a data-l10n-name=\"moco\">Mozilla Corporation</a>, die <a data-l10n-name=\"mofo\">Mozilla Foundation</a>.\nfooter-copyright = Teile dieses Inhalts sind ©1998–2024 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter <a data-l10n-name=\"cc\">einer Creative-Commons-Lizenz</a>.\n\ntheme-default = Systemstandard\n\nblog-time-to-read = { \\$minutes ->\n [one] { \\$minutes } Minute Lesezeit\n *[other] { \\$minutes } Minuten Lesezeit\n}\nblog-post-not-found = Blogartikel nicht gefunden.\n\nblog-previous = Voriger Artikel\nblog-next = Nächster Artikel\n\nNo = Nein\nSubmit = Abschicken\nYes = Ja\n\nReport = Report\n\nobs-title = HTTP Observatory\nobs-landing-intro = Sei 2016 verbessert HTTP Observatory die Sicherheit durch Analyse der Einhaltung bewährter Sicherheitspraktiken. Es hat durch 47 Millionen Scans Einblicke in über 6,9 Millionen Websites geliefert.\nobs-assessment = Das von Mozilla entwickelte HTTP Observatory führt eine umfassende Bewertung der HTTP-Header und weiterer zentraler Sicherheitskonfigurationen einer Website durch.\nobs-scanning = Der automatisierte Scan-Prozess liefert Entwicklern und Website-Administratoren detailliertes, handlungsorientiertes Feedback und konzentriert sich darauf, potenzielle Sicherheitslücken zu erkennen und zu beheben.\nobs-security = Das Tool unterstützt Entwickler und Website-Administratoren maßgeblich dabei, ihre Websites in einem sich stetig weiterentwickelnden digitalen Umfeld gegen häufige Sicherheitsbedrohungen abzusichern.\nobs-mdn = Das HTTP Observatory bietet wirksame Sicherheitseinblicke auf Grundlage von Mozillas Expertise und Engagement für ein sichereres Internet sowie basierend auf etablierten Trends und Richtlinien.\n`;","export default `blog-toc-title = En este artículo\n\n`;","export default `blog-toc-title = Dans cet article\n`;","export default `blog-toc-title = この記事では\n\n`;","export default `blog-toc-title = 목차\n`;","export default `blog-toc-title = Neste artigo\n\n`;","export default `blog-toc-title = В этой статье\n`;","export default `blog-toc-title = 在本文中\n`;","export default `blog-toc-title = 在本文中\n`;","import { getSymmetricContext } from \"../symmetric-context/both.js\";\n\nimport getFluentContext from \"./fluent.js\";\n\n/**\n * @import { LitElement } from \"lit\";\n */\n\n/**\n * @template {new (...args: any[]) => LitElement} TBase\n * @param {TBase} Base\n */\nexport const L10nMixin = (Base) =>\n class LocalizedElement extends Base {\n /**\n * @param {...any} args\n */\n constructor(...args) {\n super(...args);\n const context = getSymmetricContext();\n this.locale = context.locale;\n this.l10n = getFluentContext(this.locale);\n }\n };\n","/**\n * Runs on either client or server,\n * and returns the client or server context respectively\n * @returns {import(\"./types.js\").SymmetricContext}\n */\nexport function getSymmetricContext() {\n const serverStore = globalThis.__MDNServerContext?.getStore();\n const clientStore = globalThis.__MDNClientContext;\n return serverStore || clientStore;\n}\n"],"names":["Fluent","console","Object","s","n","Map","globalThis","t"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles-global.8acd1554a2791e3c.css","sources":["webpack://@mdn/fred/./components/badge/global.css","webpack://@mdn/fred/./components/button/global.css","webpack://@mdn/fred/./components/code-example/global.css","webpack://@mdn/fred/./components/color/border.css","webpack://@mdn/fred/./components/color/background.css","webpack://@mdn/fred/./components/color/text.css","webpack://@mdn/fred/./components/color/link.css","webpack://@mdn/fred/./components/color/scrollbar.css","webpack://@mdn/fred/./components/color/global.css","webpack://@mdn/fred/./components/dropdown/global.css","webpack://@mdn/fred/./components/external-link/global.css","webpack://@mdn/fred/./components/font/global.css","webpack://@mdn/fred/./components/global/global.css","webpack://@mdn/fred/./components/icon/global.css","webpack://@mdn/fred/./components/layout/global.css","webpack://@mdn/fred/./components/live-sample-result/global.css","webpack://@mdn/fred/./components/only-in-en-us/global.css","webpack://@mdn/fred/./components/scrim-inline/global.css","webpack://@mdn/fred/./components/table-container/global.css","webpack://@mdn/fred/./components/vars/global.css","webpack://@mdn/fred/./components/visually-hidden/global.css"],"sourcesContent":["/*\n Badge legacy.\n\n To be removed when rari no longer renders these.\n\n Note: The selectors are intentionally explicit to discourage use.\n*/\n.badge.inline {\n /* See https://github.com/mdn/rari/blob/5a2ead64bb8d4f46f9c548b942072838fb686281/crates/rari-doc/src/templ/templs/inline_labels.rs#L16-L21 */\n &.optional,\n /* See https://github.com/mdn/rari/blob/5a2ead64bb8d4f46f9c548b942072838fb686281/crates/rari-doc/src/templ/templs/inline_labels.rs#L16-L21 */\n &.readonly,\n /* See https://github.com/mdn/rari/blob/5a2ead64bb8d4f46f9c548b942072838fb686281/crates/rari-doc/src/templ/templs/inline_labels.rs#L8-L13 */\n &.secure {\n padding: 0.25em 0.5em;\n\n font-size: var(--font-size-small);\n\n vertical-align: text-top;\n\n color: var(--color-text-secondary);\n\n white-space: nowrap;\n\n border: 1px solid var(--color-border-primary);\n border-radius: 1em;\n }\n}\n","mdn-button {\n display: inline-flex;\n vertical-align: middle;\n}\n","mdn-code-example {\n display: block;\n}\n","/* Border */\n\n:root {\n --color-border-primary: light-dark(\n var(--color-gray-60),\n var(--color-gray-40)\n );\n --color-border-secondary: light-dark(\n var(--color-gray-40),\n var(--color-gray-60)\n );\n --color-border-active: light-dark(var(--color-blue-80), var(--color-blue-20));\n}\n","/* Background */\n\n/* Basic */\n\n:root {\n --color-background-page: light-dark(var(--color-white), var(--color-gray-05));\n --color-background-primary: light-dark(\n var(--color-gray-90),\n var(--color-gray-10)\n );\n --color-background-secondary: light-dark(\n var(--color-gray-80),\n var(--color-gray-20)\n );\n}\n\n/* Tinted */\n\n:root {\n --color-background-red: light-dark(var(--color-red-90), var(--color-red-10));\n --color-background-orange: light-dark(\n var(--color-orange-90),\n var(--color-orange-10)\n );\n --color-background-yellow: light-dark(\n var(--color-yellow-90),\n var(--color-yellow-10)\n );\n --color-background-green: light-dark(\n var(--color-green-90),\n var(--color-green-10)\n );\n --color-background-blue: light-dark(\n var(--color-blue-90),\n var(--color-blue-10)\n );\n --color-background-purple: light-dark(\n var(--color-purple-90),\n var(--color-purple-10)\n );\n}\n","/* Text */\n\n/* Basic */\n\n:root {\n --color-text-primary: light-dark(var(--color-black), var(--color-white));\n --color-text-secondary: light-dark(\n var(--color-gray-40),\n var(--color-gray-60)\n );\n}\n\n/* Tinted */\n\n:root {\n --color-text-red: light-dark(var(--color-red-20), var(--color-red-80));\n --color-text-orange: light-dark(\n var(--color-orange-20),\n var(--color-orange-80)\n );\n --color-text-yellow: light-dark(\n var(--color-yellow-20),\n var(--color-yellow-80)\n );\n --color-text-green: light-dark(var(--color-green-20), var(--color-green-80));\n --color-text-blue: light-dark(var(--color-blue-20), var(--color-blue-80));\n --color-text-purple: light-dark(\n var(--color-purple-20),\n var(--color-purple-80)\n );\n}\n","/* Link */\n\n:root {\n --color-link-normal: light-dark(var(--color-blue-20), var(--color-blue-80));\n --color-link-visited: light-dark(\n var(--color-purple-20),\n var(--color-purple-80)\n );\n}\n","/* Scrollbar */\n\n:root {\n --color-scrollbar-track: transparent;\n --color-scrollbar-thumb: light-dark(\n var(--color-black-alpha-25),\n var(--color-white-alpha-25)\n );\n}\n","/* Color */\n\n@import url(\"border.css\");\n@import url(\"background.css\");\n@import url(\"text.css\");\n@import url(\"link.css\");\n@import url(\"scrollbar.css\");\n\n/* Light/dark */\n:root {\n color-scheme: light dark;\n}\n\n/* Basic */\n\n:root {\n --color-white: hsl(0deg 0% 100%);\n --color-white-alpha-25: hsl(0deg 0% 100% / 25%);\n\n --color-black: hsl(0deg 0% 0%);\n --color-black-alpha-25: hsl(0deg 0% 0% / 25%);\n}\n\n/* Gray */\n\n:root {\n --color-gray-90: hsl(212deg 7% 97%);\n --color-gray-80: hsl(212deg 7% 92%);\n --color-gray-60: hsl(212deg 7% 78%);\n --color-gray-40: hsl(212deg 7% 34%);\n --color-gray-20: hsl(212deg 7% 19%);\n --color-gray-10: hsl(212deg 7% 14%);\n --color-gray-05: hsl(212deg 7% 10%);\n}\n\n/* Tinted */\n\n:root {\n --color-red-90: hsl(350deg 100% 95%);\n --color-red-80: hsl(350deg 90% 60%);\n --color-red-50: hsl(350deg 84% 45%);\n --color-red-20: hsl(350deg 84% 39%);\n --color-red-10: hsl(350deg 60% 15%);\n\n --color-orange-90: hsl(25deg 92% 95%);\n --color-orange-80: hsl(25deg 93% 63%);\n --color-orange-50: hsl(25deg 76% 53%);\n --color-orange-20: hsl(25deg 78% 40%);\n --color-orange-10: hsl(25deg 55% 15%);\n\n --color-yellow-90: hsl(46deg 95% 95%);\n --color-yellow-80: hsl(46deg 90% 70%);\n --color-yellow-50: hsl(46deg 92% 47%);\n --color-yellow-20: hsl(46deg 75% 38%);\n --color-yellow-10: hsl(46deg 70% 12%);\n\n --color-green-90: hsl(145deg 40% 93%);\n --color-green-80: hsl(145deg 55% 55%);\n --color-green-50: hsl(145deg 90% 30%);\n --color-green-20: hsl(145deg 70% 24%);\n --color-green-10: hsl(145deg 50% 10%);\n\n --color-blue-90: hsl(212deg 91% 95%);\n --color-blue-80: hsl(212deg 91% 64%);\n --color-blue-50: hsl(212deg 90% 39%);\n --color-blue-20: hsl(212deg 80% 33%);\n --color-blue-10: hsl(212deg 65% 12%);\n\n --color-purple-90: hsl(267deg 99% 96%);\n --color-purple-80: hsl(267deg 99% 74%);\n --color-purple-50: hsl(267deg 76% 56%);\n --color-purple-20: hsl(267deg 65% 40%);\n --color-purple-10: hsl(267deg 55% 14%);\n}\n","mdn-dropdown {\n display: contents;\n\n &:not([loaded], :focus-within) {\n [slot=\"dropdown\"] {\n display: none;\n }\n }\n}\n",".external {\n &::after {\n display: inline-block;\n\n width: 1em;\n height: 1em;\n\n margin-left: 0.25em;\n\n content: \"\";\n\n background-color: currentcolor;\n\n mask-image: url(\"../icon/external-link.svg\");\n mask-size: cover;\n }\n}\n","@font-face {\n font-family: \"Inter\";\n font-style: normal;\n font-weight: 100 900;\n\n src: url(\"fonts/inter.woff2\") format(\"woff2\");\n font-display: swap;\n}\n\n@font-face {\n font-family: \"Inter\";\n font-style: italic;\n font-weight: 100 900;\n\n src: url(\"fonts/inter-italic.woff2\") format(\"woff2\");\n font-display: swap;\n}\n\n@font-feature-values \"Inter\" {\n @styleset {\n disambiguation: 2;\n }\n}\n\n:root {\n --font-family-text: \"Inter\", sans-serif;\n --font-family-code:\n \"Menlo\", \"Consolas\", \"Monaco\", \"Liberation Mono\", \"Lucida Console\",\n monospace;\n\n --font-line-content: 1.75;\n --font-line-normal: 1.5;\n --font-line-ui: 1;\n\n --font-size-largest: 2.5rem;\n --font-size-larger: 2rem;\n --font-size-large: 1.5rem;\n --font-size-normal: 1rem;\n --font-size-small: 0.8rem;\n}\n","/* Normalize */\n\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\ninput,\nbutton,\ntextarea,\nselect {\n font: inherit;\n}\n\nbutton {\n cursor: pointer;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/* Motion */\n\nhtml {\n scroll-behavior: smooth;\n\n @media (prefers-reduced-motion: reduce) {\n scroll-behavior: auto;\n }\n}\n\n/* Typography */\n\nbody {\n font-family: var(--font-family-text);\n font-size: var(--font-size-normal);\n font-variant-alternates: styleset(disambiguation);\n\n line-height: var(--font-line-normal);\n\n color: var(--color-text-primary);\n\n background-color: var(--color-background-page);\n}\n","/*\n Icon legacy.\n\n To be removed when rari no longer renders these.\n\n Note: The selectors are intentionally explicit to discourage use.\n*/\n.icon {\n &.icon-deprecated,\n &.icon-experimental,\n &.icon-nonstandard {\n display: inline-block;\n\n flex-shrink: 0;\n\n width: 1em;\n height: 1em;\n\n vertical-align: middle;\n\n background-color: var(--color-text-secondary);\n\n mask-size: cover;\n }\n\n /* See https://github.com/mdn/rari/blob/927fac7cb89c7f7e49dd3ff265c3d74ad89d6490/crates/rari-doc/src/templ/templs/badges.rs#L43-L47 */\n &.icon-deprecated {\n mask-image: url(\"../icon/trash-2.svg\");\n }\n\n /* See https://github.com/mdn/rari/blob/927fac7cb89c7f7e49dd3ff265c3d74ad89d6490/crates/rari-doc/src/templ/templs/badges.rs#L36-L41 */\n &.icon-experimental {\n mask-image: url(\"../icon/flask-conical.svg\");\n }\n\n /* See https://github.com/mdn/rari/blob/927fac7cb89c7f7e49dd3ff265c3d74ad89d6490/crates/rari-doc/src/templ/templs/badges.rs#L43-L47 */\n &.icon-nonstandard {\n mask-image: url(\"../icon/triangle-alert.svg\");\n }\n}\n","/* --layout-side-padding-min * 2 + (--layout-sidebar-min + --layout-sidebar-gap) * 2 + --layout-content-min */\n@custom-media --screen-layout-1-sidebar-or-less (width < calc(1rem * 2 + (14rem + 2rem) * 2 + 31rem));\n\n/* --layout-side-padding-min * 2 + --layout-sidebar-min + --layout-sidebar-gap + --layout-content-min */\n@custom-media --screen-layout-no-sidebar (width < calc(1rem * 2 + 14rem + 2rem + 31rem));\n\n:root {\n --layout-side-padding-min: 1rem;\n --layout-side-padding: max(\n var(--layout-side-padding-min),\n calc((100vw - 1440px + (2rem)) / 2)\n );\n --layout-full-width: calc(100vw - 2 * var(--layout-side-padding));\n\n --layout-sidebar-min: 14rem;\n --layout-sidebar-gap: 2rem;\n --layout-content-min: 31rem;\n --layout-content-max: 48rem;\n\n /* WARNING: TODO: left/center/right cols widths will change */\n\n /* prettier-ignore */\n --layout-2-sidebars:\n [full-start left-sidebar-start]\n minmax(var(--layout-sidebar-min), 1fr)\n [left-sidebar-end]\n var(--layout-sidebar-gap)\n [content-start]\n minmax(0, var(--layout-content-max))\n [content-end]\n var(--layout-sidebar-gap)\n [right-sidebar-start]\n minmax(var(--layout-sidebar-min), 1fr)\n [full-end right-sidebar-end];\n\n /* prettier-ignore */\n --layout-1-sidebar-left:\n [full-start sidebar-start left-sidebar-start]\n minmax(var(--layout-sidebar-min), 1fr)\n [sidebar-end left-sidebar-end]\n var(--layout-sidebar-gap)\n [content-start]\n minmax(0, var(--layout-content-max))\n [full-end content-end]\n minmax(0, 1fr);\n\n /* prettier-ignore */\n --layout-1-sidebar-right:\n minmax(0, 1fr)\n [full-start content-start]\n minmax(0, var(--layout-content-max))\n [content-end]\n var(--layout-sidebar-gap)\n [sidebar-start right-sidebar-start]\n minmax(var(--layout-sidebar-min), 1fr)\n [full-end sidebar-end right-sidebar-end];\n\n /* prettier-ignore */\n --layout-no-sidebar:\n [full-start]\n 1fr\n [content-start]\n minmax(0, var(--layout-content-max))\n [content-end]\n 1fr\n [full-end];\n\n /* prettier-ignore */\n --layout-no-sidebar-extended:\n [extended-full-start]\n var(--layout-side-padding)\n [full-start]\n 1fr\n [content-start]\n minmax(0, var(--layout-content-max))\n [content-end]\n 1fr\n [full-end]\n var(--layout-side-padding)\n [extended-full-end];\n}\n","mdn-live-sample-result {\n display: block;\n}\n","html a.only-in-en-us::after {\n display: inline-block;\n\n margin-left: 0.5ch;\n\n font-size: 0.7rem;\n\n vertical-align: super;\n\n content: \"(en-US)\";\n}\n\nhtml[lang=\"de\"] a.only-in-en-us::after {\n content: \"(engl.)\";\n}\n\nhtml[lang=\"es\"] a.only-in-en-us::after {\n content: \"(inglés)\";\n}\n\nhtml[lang=\"fr\"] a.only-in-en-us::after {\n content: \"(angl.)\";\n}\n\nhtml[lang=\"ja\"] a.only-in-en-us::after {\n content: \"(英語)\";\n}\n\nhtml[lang=\"ko\"] a.only-in-en-us::after {\n content: \"(영어)\";\n}\n\nhtml[lang=\"ru\"] a.only-in-en-us::after {\n content: \"(англ.)\";\n}\n\nhtml[lang=\"pt-BR\"] a.only-in-en-us::after {\n content: \"(inglês)\";\n}\n\nhtml[lang=\"zh-CN\"] a.only-in-en-us::after {\n margin-left: unset;\n vertical-align: baseline;\n content: \"(英语)\";\n}\n\nhtml[lang=\"zh-TW\"] a.only-in-en-us::after {\n margin-left: unset;\n vertical-align: baseline;\n content: \"(英語)\";\n}\n","@font-face {\n font-family: \"BarlowCondensed-SemiBold\";\n font-weight: 600;\n\n src:\n local(\"BarlowCondensed-SemiBold\"),\n url(\"./assets/BarlowCondensed-SemiBold.woff2\") format(\"woff2\");\n font-display: block;\n}\n",".table-container {\n margin: 0;\n overflow-x: auto;\n}\n",":root {\n --top-banner-height: 3.375rem;\n --sticky-header-height: calc(\n var(--top-nav-height) + var(--breadcrumbs-bar-height)\n );\n\n --z-index-sticky-header: 100;\n --z-index-sidebar-mobile: 90;\n}\n",".visually-hidden {\n position: absolute !important;\n\n width: 1px !important;\n height: 1px !important;\n\n padding: 0 !important;\n margin: -1px !important;\n\n overflow: hidden !important;\n\n white-space: nowrap !important;\n\n border: 0 !important;\n\n clip: rect(1px, 1px, 1px, 1px) !important;\n clip-path: inset(50%) !important;\n}\n"],"names":[],"mappings":"AASE,mEAeE,4CAA6C,CAC7C,iBAAkB,CALlB,iCAAkC,CAJlC,gCAAiC,CAFjC,kBAAqB,CAIrB,uBAAwB,CAIxB,kBAIF,CC1BF,WACE,mBAAoB,CACpB,qBACF,CCHA,iBACE,aACF,CCAA,MACE,wFAGC,CAHD,gFAGC,CACD,kFAGC,CACD,wFAA6E,CAA7E,+EACF,CAVA,4CACE,4EAGC,CACD,8EAGC,CACD,2EACF,EATE,0IAGC,CAHD,gFAGC,CACD,wFAGC,CAHD,kFAGC,CACD,wFAA6E,CAA7E,+EALC,ECFH,MACE,wFAA6E,CAA7E,+EAA6E,CAC7E,wFAGC,CAHD,oFAGC,CACD,wFAGC,CAHD,sFAIF,CAVA,4CACE,2EAA6E,CAC7E,gFAGC,CACD,kFAIF,EATE,0IAA6E,CAA7E,+EAA6E,CAC7E,wFAGC,CAHD,oFAGC,CACD,wFAGC,CAHD,sFAL6E,EAa/E,MACE,uFAA4E,CAA5E,+EAA4E,CAC5E,0FAGC,CAHD,qFAGC,CACD,0FAGC,CAHD,qFAGC,CACD,yFAGC,CAHD,mFAGC,CACD,wFAGC,CAHD,iFAGC,CACD,0FAGC,CAHD,qFAIF,CAtBA,4CACE,0EAA4E,CAC5E,mFAGC,CACD,mFAGC,CACD,gFAGC,CACD,6EAGC,CACD,mFAIF,EArBE,yIAA4E,CAA5E,+EAA4E,CAC5E,0FAGC,CAHD,qFAGC,CACD,0FAGC,CAHD,qFAGC,CACD,yFAGC,CAHD,mFAGC,CACD,wFAGC,CAHD,iFAGC,CACD,0FAGC,CAHD,qFAjB4E,ECf9E,MACE,sFAAwE,CAAxE,4EAAwE,CACxE,wFAGC,CAHD,gFAIF,CANA,4CACE,sEAAwE,CACxE,4EAIF,EALE,wIAAwE,CAAxE,4EAAwE,CACxE,wFAGC,CAHD,gFADwE,EAS1E,MACE,uFAAsE,CAAtE,yEAAsE,CACtE,0FAGC,CAHD,+EAGC,CACD,0FAGC,CAHD,+EAGC,CACD,yFAA4E,CAA5E,6EAA4E,CAC5E,wFAAyE,CAAzE,2EAAyE,CACzE,0FAGC,CAHD,+EAIF,CAhBA,4CACE,oEAAsE,CACtE,6EAGC,CACD,6EAGC,CACD,0EAA4E,CAC5E,uEAAyE,CACzE,6EAIF,EAfE,yIAAsE,CAAtE,yEAAsE,CACtE,0FAGC,CAHD,+EAGC,CACD,0FAGC,CAHD,+EAGC,CACD,yFAA4E,CAA5E,6EAA4E,CAC5E,wFAAyE,CAAzE,2EAAyE,CACzE,0FAGC,CAHD,+EAXsE,ECbxE,MACE,wFAA2E,CAA3E,6EAA2E,CAC3E,0FAGC,CAHD,gFAIF,CANA,4CACE,yEAA2E,CAC3E,8EAIF,EALE,0IAA2E,CAA3E,6EAA2E,CAC3E,0FAGC,CAHD,gFAD2E,ECD7E,MACE,6BAAoC,CACpC,+FAGC,CAHD,wFAIF,CANA,4CAEE,2FAIF,EAJE,iJAGC,CAHD,wFAGC,ECEH,MACE,sCAAwB,CAAxB,uBACF,CAFA,yCACE,gCACF,EAIA,MACE,kBAAgC,CAChC,gCAA+C,CAE/C,kBAA8B,CAC9B,gCAA6C,CAM7C,uBAAmC,CACnC,uBAAmC,CACnC,uBAAmC,CACnC,uBAAmC,CACnC,uBAAmC,CACnC,uBAAmC,CACnC,uBAAmC,CAMnC,sBAAoC,CACpC,sBAAmC,CACnC,sBAAmC,CACnC,sBAAmC,CACnC,sBAAmC,CAEnC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CAErC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CACrC,yBAAqC,CAErC,wBAAqC,CACrC,wBAAqC,CACrC,wBAAqC,CACrC,wBAAqC,CACrC,wBAAqC,CAErC,uBAAoC,CACpC,uBAAoC,CACpC,uBAAoC,CACpC,uBAAoC,CACpC,uBAAoC,CAEpC,yBAAsC,CACtC,yBAAsC,CACtC,yBAAsC,CACtC,yBAAsC,CACtC,yBAnDF,CCrBA,aACE,gBAOF,CAJI,yDACE,YACF,CCLF,gBAUE,6BAA8B,CAF9B,UAAW,CAPX,oBAAqB,CAGrB,UAAW,CAEX,iBAAmB,CAMnB,yEAA4C,CAA5C,iEAA4C,CAC5C,uBAAgB,CAAhB,eAAgB,CAVhB,SAWF,CCfF,WAME,iBAAkB,CALlB,iBAAoB,CACpB,iBAAkB,CAClB,mBAAoB,CAEpB,oEAEF,CAEA,WAME,iBAAkB,CALlB,iBAAoB,CACpB,iBAAkB,CAClB,mBAAoB,CAEpB,2EAEF,CAEA,6BACE,UACE,gBACF,CACF,CAEA,MACE,qCAAuC,CACvC,2FAEW,CAEX,wBAAyB,CACzB,sBAAuB,CACvB,gBAAiB,CAEjB,0BAA2B,CAC3B,uBAAwB,CACxB,wBAAyB,CACzB,uBAAwB,CACxB,wBACF,CCrCA,iBAGE,qBACF,CAEA,6BAIE,YACF,CAEA,OACE,cACF,CAEA,IAEE,WAAY,CADZ,cAEF,CAEA,SACE,sBACF,CAIA,KACE,sBAKF,CAHE,uCAHF,KAII,oBAEJ,CADE,CAKF,KASE,6CAA8C,CAF9C,+BAAgC,CANhC,mCAAoC,CACpC,iCAAkC,CAClC,gDAAiD,CAEjD,mCAKF,CC1CE,qEAYE,4CAA6C,CAT7C,oBAAqB,CAErB,aAAc,CAGd,UAAW,CAMX,uBAAgB,CAAhB,eAAgB,CAJhB,qBAAsB,CAHtB,SAQF,CAGA,sBACE,mEAAsC,CAAtC,2DACF,CAGA,wBACE,yEAA4C,CAA5C,iEACF,CAGA,uBACE,0EAA6C,CAA7C,kEACF,CChCF,MACE,8BAA+B,CAC/B,mFAGC,CACD,8DAAiE,CAEjE,0BAA2B,CAC3B,yBAA0B,CAC1B,0BAA2B,CAC3B,0BAA2B,CAK3B,2TAW8B,CAG9B,6PAQkB,CAGlB,gQAQ0C,CAG1C,qHAOY,CAGZ,8NAYF,CChFA,uBACE,aACF,CCFA,2BASE,iBAAkB,CARlB,oBAAqB,CAIrB,eAAiB,CAFjB,gBAAkB,CAIlB,oBAGF,CAEA,oCACE,iBACF,CAEA,oCACE,kBACF,CAEA,oCACE,iBACF,CAEA,oCACE,cACF,CAEA,oCACE,cACF,CAEA,oCACE,iBACF,CAEA,uCACE,kBACF,CAEA,uCAGE,cAAe,CAFf,iBAAkB,CAClB,sBAEF,CAEA,uCAGE,cAAe,CAFf,iBAAkB,CAClB,sBAEF,CClDA,WAOE,kBAAmB,CANnB,oCAAuC,CACvC,eAAgB,CAEhB,yHAIF,CCRA,iBACE,QAAS,CACT,eACF,CCHA,MACE,4BAA6B,CAC7B,kFAEC,CAED,2BAA4B,CAC5B,2BACF,CCRA,iBAaE,kBAAoB,CATpB,oBAAsB,CAGtB,qBAAuB,CAEvB,yBAA2B,CAH3B,mBAAqB,CALrB,2BAA6B,CAU7B,4BAA8B,CAR9B,mBAAqB,CAYrB,oCAAyC,CACzC,8BACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles-reference-layout.4b0aca3ae954f961.css","sources":["webpack://@mdn/fred/./components/reference-layout/server.css"],"sourcesContent":["/* Reference Layout */\n\n.reference-layout {\n display: grid;\n\n grid-template-areas:\n \"sidebar . header . toc\"\n \"sidebar . body . toc\";\n grid-template-rows: min-content auto;\n grid-template-columns: var(--layout-2-sidebars);\n\n justify-content: space-between;\n\n padding-inline: var(--layout-side-padding);\n\n .reference-layout__content {\n display: contents;\n }\n\n .reference-layout__content__header {\n grid-area: header;\n\n h1 {\n margin-top: 0;\n\n font-size: var(--font-size-largest);\n font-weight: normal;\n\n line-height: var(--font-line-content);\n }\n }\n\n .reference-layout__content__body {\n grid-area: body;\n padding-bottom: 3rem;\n }\n\n .reference-layout__sidebar {\n grid-area: sidebar;\n }\n\n .reference-layout__toc {\n display: flex;\n\n flex-wrap: wrap;\n\n grid-area: toc;\n\n gap: 0.5rem;\n align-content: start;\n align-items: start;\n justify-content: space-between;\n }\n\n .reference-layout__sidebar .left-sidebar,\n .reference-layout__toc {\n position: sticky;\n top: var(--sticky-header-height);\n\n max-height: calc(100vh - var(--sticky-header-height));\n\n overflow-y: auto;\n }\n\n @media (--screen-layout-1-sidebar-or-less) {\n grid-template-areas:\n \"toc . header\"\n \"toc . body\";\n grid-template-columns: var(--layout-1-sidebar-left);\n\n .reference-layout__sidebar {\n z-index: 1;\n\n display: none;\n\n grid-area: toc;\n\n background: var(--color-background-page);\n }\n }\n\n @media (--screen-layout-no-sidebar) {\n display: block;\n\n .reference-layout__sidebar {\n position: fixed;\n inset: 0;\n top: var(--sticky-header-height);\n z-index: var(--z-index-sidebar-mobile);\n\n .left-sidebar {\n padding: 1rem;\n }\n }\n\n .reference-layout__toc {\n position: unset;\n top: unset;\n\n max-height: unset;\n\n overflow-y: unset;\n --toc-header-font-size: var(--font-size-larger);\n }\n }\n}\n"],"names":[],"mappings":"AAEA,kBACE,YAAa,CAEb,qEAE0B,CAE1B,8CAA+C,CAD/C,mCAAoC,CAGpC,6BAA8B,CAE9B,yCA4FF,CA1FE,6CACE,gBACF,CAEA,qDACE,gBAUF,CARE,6DAGE,kCAAmC,CACnC,eAAmB,CAEnB,oCAAqC,CALrC,YAMF,CAGF,mDACE,cAAe,CACf,mBACF,CAEA,6CACE,iBACF,CAEA,yCAQE,mBAAoB,CACpB,iBAAkB,CARlB,YAAa,CAEb,cAAe,CAIf,SAAW,CAFX,aAAc,CAKd,6BACF,CAEA,oGAKE,oDAAqD,CAErD,eAAgB,CALhB,eAAgB,CAChB,+BAKF,CAEA,6BA9DF,kBA+DI,+CAEc,CACd,kDAqCJ,CAnCI,6CAOE,uCAAwC,CAJxC,YAAa,CAEb,aAAc,CAJd,SAOF,CACF,CAEA,6BA/EF,kBAgFI,aAuBJ,CArBI,6CAEE,OAAQ,CADR,cAAe,CAEf,+BAAgC,CAChC,qCAKF,CAHE,gEACE,YACF,CAGF,yCAIE,gBAAiB,CAEjB,gBAAiB,CALjB,cAAe,CACf,SAAU,CAKV,8CACF,CACF"}