diff --git a/pr-preview/pr-1220/404.html b/pr-preview/pr-1220/404.html deleted file mode 100644 index 9da3456d0..000000000 --- a/pr-preview/pr-1220/404.html +++ /dev/null @@ -1,54 +0,0 @@ - 404 | Grafana Tanka - - Skip to content
main.libsonnet
local k = import "k.libsonnet";
-
{
grafana: k.apps.v1.deployment.new(
name="grafana",
replicas=1,
containers=[k.core.v1.container.new(
name="grafana",
image="grafana/grafana",
)]
)
}
-Kubernetes Deployment. That's all it takes. -

Define. Reuse. Override.

Grafana Tanka is the robust configuration utility for your Kubernetes cluster, powered by the unique Jsonnet language

\ No newline at end of file diff --git a/pr-preview/pr-1220/_astro/Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js b/pr-preview/pr-1220/_astro/Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js deleted file mode 100644 index 646075fa5..000000000 --- a/pr-preview/pr-1220/_astro/Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js +++ /dev/null @@ -1 +0,0 @@ -class r extends HTMLElement{static#e=new Map;#t;#n="starlight-synced-tabs__";constructor(){super();const t=this.querySelector('[role="tablist"]');if(this.tabs=[...t.querySelectorAll('[role="tab"]')],this.panels=[...this.querySelectorAll(':scope > [role="tabpanel"]')],this.#t=this.dataset.syncKey,this.#t){const i=r.#e.get(this.#t)??[];i.push(this),r.#e.set(this.#t,i)}this.tabs.forEach((i,c)=>{i.addEventListener("click",e=>{e.preventDefault();const n=t.querySelector('[aria-selected="true"]');e.currentTarget!==n&&this.switchTab(e.currentTarget,c)}),i.addEventListener("keydown",e=>{const n=this.tabs.indexOf(e.currentTarget),s=e.key==="ArrowLeft"?n-1:e.key==="ArrowRight"?n+1:e.key==="Home"?0:e.key==="End"?this.tabs.length-1:null;s!==null&&this.tabs[s]&&(e.preventDefault(),this.switchTab(this.tabs[s],s))})})}switchTab(t,i,c=!0){if(!t)return;const e=c?this.getBoundingClientRect().top:0;this.tabs.forEach(s=>{s.setAttribute("aria-selected","false"),s.setAttribute("tabindex","-1")}),this.panels.forEach(s=>{s.hidden=!0});const n=this.panels[i];n&&(n.hidden=!1),t.removeAttribute("tabindex"),t.setAttribute("aria-selected","true"),c&&(t.focus(),r.#r(this,t),window.scrollTo({top:window.scrollY+(this.getBoundingClientRect().top-e)}))}#i(t){!this.#t||typeof localStorage>"u"||localStorage.setItem(this.#n+this.#t,t)}static#r(t,i){const c=t.#t,e=r.#s(i);if(!c||!e)return;const n=r.#e.get(c);if(n){for(const s of n){if(s===t)continue;const a=s.tabs.findIndex(o=>r.#s(o)===e);a!==-1&&s.switchTab(s.tabs[a],a,!1)}t.#i(e)}}static#s(t){return t.textContent?.trim()}}customElements.define("starlight-tabs",r); diff --git a/pr-preview/pr-1220/_astro/ec.8zarh.js b/pr-preview/pr-1220/_astro/ec.8zarh.js deleted file mode 100644 index bf1115dfc..000000000 --- a/pr-preview/pr-1220/_astro/ec.8zarh.js +++ /dev/null @@ -1,3 +0,0 @@ -try{(()=>{function a(e){if(!e)return;let t=e.getAttribute("tabindex")!==null,n=e.scrollWidth>e.clientWidth;n&&!t?e.setAttribute("tabindex","0"):!n&&t&&e.removeAttribute("tabindex")}var u=window.requestIdleCallback||(e=>setTimeout(e,1)),i=window.cancelIdleCallback||clearTimeout;function l(e){let t=new Set,n,r;return new ResizeObserver(c=>{c.forEach(o=>t.add(o.target)),n&&clearTimeout(n),r&&i(r),n=setTimeout(()=>{r&&i(r),r=u(()=>{t.forEach(o=>e(o)),t.clear()})},250)})}function d(e,t){e.querySelectorAll?.(".expressive-code pre > code").forEach(n=>{let r=n.parentElement;r&&t.observe(r)})}var s=l(a);d(document,s);var b=new MutationObserver(e=>e.forEach(t=>t.addedNodes.forEach(n=>{d(n,s)})));b.observe(document.body,{childList:!0,subtree:!0});document.addEventListener("astro:page-load",()=>{d(document,s)});})();}catch(e){console.error("[EC] tabindex-js-module failed:",e)} -try{(()=>{function i(o){let e=document.createElement("pre");Object.assign(e.style,{opacity:"0",pointerEvents:"none",position:"absolute",overflow:"hidden",left:"0",top:"0",width:"20px",height:"20px",webkitUserSelect:"auto",userSelect:"all"}),e.ariaHidden="true",e.textContent=o,document.body.appendChild(e);let a=document.createRange();a.selectNode(e);let n=getSelection();if(!n)return!1;n.removeAllRanges(),n.addRange(a);let r=!1;try{r=document.execCommand("copy")}finally{n.removeAllRanges(),document.body.removeChild(e)}return r}async function l(o){let e=o.currentTarget,a=e.dataset,n=!1,r=a.code.replace(/\u007f/g,` -`);try{await navigator.clipboard.writeText(r),n=!0}catch{n=i(r)}if(!n||e.parentNode?.querySelector(".feedback"))return;let t=document.createElement("div");t.classList.add("feedback"),t.append(a.copied),e.before(t),t.offsetWidth,requestAnimationFrame(()=>t?.classList.add("show"));let c=()=>!t||t.classList.remove("show"),d=()=>{!t||parseFloat(getComputedStyle(t).opacity)>0||(t.remove(),t=void 0)};setTimeout(c,1500),setTimeout(d,2500),e.addEventListener("blur",c),t.addEventListener("transitioncancel",d),t.addEventListener("transitionend",d)}function s(o){o.querySelectorAll?.(".expressive-code .copy button").forEach(e=>e.addEventListener("click",l))}s(document);var u=new MutationObserver(o=>o.forEach(e=>e.addedNodes.forEach(a=>{s(a)})));u.observe(document.body,{childList:!0,subtree:!0});document.addEventListener("astro:page-load",()=>{s(document)});})();}catch(e){console.error("[EC] copy-js-module failed:",e)} \ No newline at end of file diff --git a/pr-preview/pr-1220/_astro/ec.j8ofn.css b/pr-preview/pr-1220/_astro/ec.j8ofn.css deleted file mode 100644 index 62e6fed8a..000000000 --- a/pr-preview/pr-1220/_astro/ec.j8ofn.css +++ /dev/null @@ -1 +0,0 @@ -.expressive-code{font-family:var(--ec-uiFontFml);font-size:var(--ec-uiFontSize);font-weight:var(--ec-uiFontWg);line-height:var(--ec-uiLineHt);text-size-adjust:none;-webkit-text-size-adjust:none}.expressive-code *:not(path){all:revert;box-sizing:border-box}.expressive-code pre{display:flex;margin:0;padding:0;border:var(--ec-brdWd) solid var(--ec-brdCol);border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));background:var(--ec-codeBg)}.expressive-code pre:focus-visible{outline:3px solid var(--ec-focusBrd);outline-offset:-3px}.expressive-code pre > code{all:unset;display:block;flex:1 0 100%;padding:var(--ec-codePadBlk) 0;color:var(--ec-codeFg);font-family:var(--ec-codeFontFml);font-size:var(--ec-codeFontSize);font-weight:var(--ec-codeFontWg);line-height:var(--ec-codeLineHt)}.expressive-code pre{overflow-x:auto}.expressive-code pre.wrap .ec-line .code{white-space:pre-wrap;overflow-wrap:break-word;min-width:min(20ch, var(--ecMaxLine, 20ch))}.expressive-code pre.wrap .ec-line .code span.indent{white-space:pre}.expressive-code pre::-webkit-scrollbar,.expressive-code pre::-webkit-scrollbar-track{background-color:inherit;border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));border-top-left-radius:0;border-top-right-radius:0}.expressive-code pre::-webkit-scrollbar-thumb{background-color:var(--ec-sbThumbCol);border:4px solid transparent;background-clip:content-box;border-radius:10px}.expressive-code pre::-webkit-scrollbar-thumb:hover{background-color:var(--ec-sbThumbHoverCol)}.expressive-code .ec-line{direction:ltr;unicode-bidi:isolate;display:grid;grid-template-areas:'gutter code';grid-template-columns:auto 1fr;position:relative}.expressive-code .ec-line .gutter{grid-area:gutter;color:var(--ec-gtrFg)}.expressive-code .ec-line .gutter > *{pointer-events:none;user-select:none;-webkit-user-select:none}.expressive-code .ec-line .gutter ~ .code{--ecLineBrdCol:var(--ec-gtrBrdCol)}.expressive-code .ec-line.highlight .gutter{color:var(--ec-gtrHlFg)}.expressive-code .ec-line .code{grid-area:code;position:relative;box-sizing:content-box;padding-inline-start:calc(var(--ecIndent, 0ch) + var(--ec-codePadInl) - var(--ecGtrBrdWd));padding-inline-end:var(--ec-codePadInl);text-indent:calc(var(--ecIndent, 0ch) * -1)}.expressive-code .ec-line .code::before,.expressive-code .ec-line .code::after,.expressive-code .ec-line .code :where(*){text-indent:0}.expressive-code .ec-line .code{--ecGtrBrdWd:var(--ec-gtrBrdWd);border-inline-start:var(--ecGtrBrdWd) solid var(--ecLineBrdCol, transparent)}.expressive-code :nth-child(1 of .ec-line) .code{padding-inline-end:calc(2rem + var(--ec-codePadInl))}.expressive-code .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.expressive-code .ec-line.mark{--tmLineBgCol:var(--ec-tm-markBg)}.expressive-code .ec-line.mark .code{--ecLineBrdCol:var(--ec-tm-markBrdCol)}.expressive-code .ec-line.ins{--tmLineBgCol:var(--ec-tm-insBg);--tmLabel:var(--ec-tm-insDiffIndContent)}.expressive-code .ec-line.ins .code{--ecLineBrdCol:var(--ec-tm-insBrdCol)}.expressive-code .ec-line.ins .code::before{color:var(--ec-tm-insDiffIndCol)}.expressive-code .ec-line.del{--tmLineBgCol:var(--ec-tm-delBg);--tmLabel:var(--ec-tm-delDiffIndContent)}.expressive-code .ec-line.del .code{--ecLineBrdCol:var(--ec-tm-delBrdCol)}.expressive-code .ec-line.del .code::before{color:var(--ec-tm-delDiffIndCol)}.expressive-code .ec-line.mark,.expressive-code .ec-line.ins,.expressive-code .ec-line.del{background:var(--tmLineBgCol)}.expressive-code .ec-line.mark .code,.expressive-code .ec-line.ins .code,.expressive-code .ec-line.del .code{--ecGtrBrdWd:var(--ec-tm-lineMarkerAccentWd)}.expressive-code .ec-line.mark .code::before,.expressive-code .ec-line.ins .code::before,.expressive-code .ec-line.del .code::before{display:block;position:absolute;left:0;box-sizing:border-box;content:var(--tmLabel, ' ');padding-inline-start:var(--ec-tm-lineDiffIndMargLeft);text-align:center;white-space:pre}.expressive-code .ec-line.mark.tm-label .code::before,.expressive-code .ec-line.ins.tm-label .code::before,.expressive-code .ec-line.del.tm-label .code::before{background:var(--ecLineBrdCol);padding:0 calc(var(--ec-tm-lineMarkerLabelPadInl) + var(--ec-tm-lineMarkerAccentWd)) 0 var(--ec-tm-lineMarkerLabelPadInl);color:var(--ec-tm-lineMarkerLabelCol)}.expressive-code .ec-line mark{--tmInlineBgCol:var(--ec-tm-markBg);--tmInlineBrdCol:var(--ec-tm-markBrdCol)}.expressive-code .ec-line ins{--tmInlineBgCol:var(--ec-tm-insBg);--tmInlineBrdCol:var(--ec-tm-insBrdCol)}.expressive-code .ec-line del{--tmInlineBgCol:var(--ec-tm-delBg);--tmInlineBrdCol:var(--ec-tm-delBrdCol)}.expressive-code .ec-line mark,.expressive-code .ec-line ins,.expressive-code .ec-line del{all:unset;display:inline-block;position:relative;--tmBrdL:var(--ec-tm-inlMarkerBrdWd);--tmBrdR:var(--ec-tm-inlMarkerBrdWd);--tmRadL:var(--ec-tm-inlMarkerBrdRad);--tmRadR:var(--ec-tm-inlMarkerBrdRad);margin-inline:0.025rem;padding-inline:var(--ec-tm-inlMarkerPad);border-radius:var(--tmRadL) var(--tmRadR) var(--tmRadR) var(--tmRadL);background:var(--tmInlineBgCol);background-clip:padding-box}.expressive-code .ec-line mark.open-start,.expressive-code .ec-line ins.open-start,.expressive-code .ec-line del.open-start{margin-inline-start:0;padding-inline-start:0;--tmBrdL:0px;--tmRadL:0}.expressive-code .ec-line mark.open-end,.expressive-code .ec-line ins.open-end,.expressive-code .ec-line del.open-end{margin-inline-end:0;padding-inline-end:0;--tmBrdR:0px;--tmRadR:0}.expressive-code .ec-line mark::before,.expressive-code .ec-line ins::before,.expressive-code .ec-line del::before{content:'';position:absolute;pointer-events:none;display:inline-block;inset:0;border-radius:var(--tmRadL) var(--tmRadR) var(--tmRadR) var(--tmRadL);border:var(--ec-tm-inlMarkerBrdWd) solid var(--tmInlineBrdCol);border-inline-width:var(--tmBrdL) var(--tmBrdR)}.expressive-code .frame{all:unset;position:relative;display:block;--header-border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));--tab-border-radius:calc(var(--ec-frm-edTabBrdRad) + var(--ec-brdWd));--button-spacing:0.4rem;--code-background:var(--ec-frm-edBg);border-radius:var(--header-border-radius);box-shadow:var(--ec-frm-frameBoxShdCssVal)}.expressive-code .frame .header{display:none;z-index:1;position:relative;border-radius:var(--header-border-radius) var(--header-border-radius) 0 0}.expressive-code .frame.has-title pre,.expressive-code .frame.has-title code,.expressive-code .frame.is-terminal pre,.expressive-code .frame.is-terminal code{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.expressive-code .frame .title:empty:before{content:'\a0'}.expressive-code .frame.has-title:not(.is-terminal){--button-spacing:calc(1.9rem + 2 * (var(--ec-uiPadBlk) + var(--ec-frm-edActTabIndHt)))}.expressive-code .frame.has-title:not(.is-terminal) .title{position:relative;color:var(--ec-frm-edActTabFg);background:var(--ec-frm-edActTabBg);background-clip:padding-box;margin-block-start:var(--ec-frm-edTabsMargBlkStart);padding:calc(var(--ec-uiPadBlk) + var(--ec-frm-edActTabIndHt)) var(--ec-uiPadInl);border:var(--ec-brdWd) solid var(--ec-frm-edActTabBrdCol);border-radius:var(--tab-border-radius) var(--tab-border-radius) 0 0;border-bottom:none;overflow:hidden}.expressive-code .frame.has-title:not(.is-terminal) .title::after{content:'';position:absolute;pointer-events:none;inset:0;border-top:var(--ec-frm-edActTabIndHt) solid var(--ec-frm-edActTabIndTopCol);border-bottom:var(--ec-frm-edActTabIndHt) solid var(--ec-frm-edActTabIndBtmCol)}.expressive-code .frame.has-title:not(.is-terminal) .header{display:flex;background:linear-gradient(to top, var(--ec-frm-edTabBarBrdBtmCol) var(--ec-brdWd), transparent var(--ec-brdWd)),linear-gradient(var(--ec-frm-edTabBarBg), var(--ec-frm-edTabBarBg));background-repeat:no-repeat;padding-inline-start:var(--ec-frm-edTabsMargInlStart)}.expressive-code .frame.has-title:not(.is-terminal) .header::before{content:'';position:absolute;pointer-events:none;inset:0;border:var(--ec-brdWd) solid var(--ec-frm-edTabBarBrdCol);border-radius:inherit;border-bottom:none}.expressive-code .frame.is-terminal{--button-spacing:calc(1.9rem + var(--ec-brdWd) + 2 * var(--ec-uiPadBlk));--code-background:var(--ec-frm-trmBg)}.expressive-code .frame.is-terminal .header{display:flex;align-items:center;justify-content:center;padding-block:var(--ec-uiPadBlk);padding-block-end:calc(var(--ec-uiPadBlk) + var(--ec-brdWd));position:relative;font-weight:500;letter-spacing:0.025ch;color:var(--ec-frm-trmTtbFg);background:var(--ec-frm-trmTtbBg);border:var(--ec-brdWd) solid var(--ec-brdCol);border-bottom:none}.expressive-code .frame.is-terminal .header::before{content:'';position:absolute;pointer-events:none;left:var(--ec-uiPadInl);width:2.1rem;height:0.56rem;line-height:0;background-color:var(--ec-frm-trmTtbDotsFg);opacity:var(--ec-frm-trmTtbDotsOpa);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 16' preserveAspectRatio='xMidYMid meet'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3Ccircle cx='30' cy='8' r='8'/%3E%3Ccircle cx='52' cy='8' r='8'/%3E%3C/svg%3E");-webkit-mask-repeat:no-repeat;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 16' preserveAspectRatio='xMidYMid meet'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3Ccircle cx='30' cy='8' r='8'/%3E%3Ccircle cx='52' cy='8' r='8'/%3E%3C/svg%3E");mask-repeat:no-repeat}.expressive-code .frame.is-terminal .header::after{content:'';position:absolute;pointer-events:none;inset:0;border-bottom:var(--ec-brdWd) solid var(--ec-frm-trmTtbBrdBtmCol)}.expressive-code .frame pre{background:var(--code-background)}.expressive-code .copy{display:flex;gap:0.25rem;flex-direction:row;position:absolute;inset-block-start:calc(var(--ec-brdWd) + var(--button-spacing));inset-inline-end:calc(var(--ec-brdWd) + var(--ec-uiPadInl) / 2)}@media (scripting: none){.expressive-code .copy{display:none}}.expressive-code .copy{direction:ltr;unicode-bidi:isolate}.expressive-code .copy button{position:relative;align-self:flex-end;margin:0;padding:0;border:none;border-radius:0.2rem;z-index:1;cursor:pointer;transition-property:opacity, background, border-color;transition-duration:0.2s;transition-timing-function:cubic-bezier(0.25, 0.46, 0.45, 0.94);width:2.5rem;height:2.5rem;background:var(--code-background);opacity:0.75}.expressive-code .copy button div{position:absolute;inset:0;border-radius:inherit;background:var(--ec-frm-inlBtnBg);opacity:var(--ec-frm-inlBtnBgIdleOpa);transition-property:inherit;transition-duration:inherit;transition-timing-function:inherit}.expressive-code .copy button::before{content:'';position:absolute;pointer-events:none;inset:0;border-radius:inherit;border:var(--ec-brdWd) solid var(--ec-frm-inlBtnBrd);opacity:var(--ec-frm-inlBtnBrdOpa)}.expressive-code .copy button::after{content:'';position:absolute;pointer-events:none;inset:0;background-color:var(--ec-frm-inlBtnFg);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.75'%3E%3Cpath d='M3 19a2 2 0 0 1-1-2V2a2 2 0 0 1 1-1h13a2 2 0 0 1 2 1'/%3E%3Crect x='6' y='5' width='16' height='18' rx='1.5' ry='1.5'/%3E%3C/svg%3E");-webkit-mask-repeat:no-repeat;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.75'%3E%3Cpath d='M3 19a2 2 0 0 1-1-2V2a2 2 0 0 1 1-1h13a2 2 0 0 1 2 1'/%3E%3Crect x='6' y='5' width='16' height='18' rx='1.5' ry='1.5'/%3E%3C/svg%3E");mask-repeat:no-repeat;margin:0.475rem;line-height:0}.expressive-code .copy button:hover,.expressive-code .copy button:focus:focus-visible{opacity:1}.expressive-code .copy button:hover div,.expressive-code .copy button:focus:focus-visible div{opacity:var(--ec-frm-inlBtnBgHoverOrFocusOpa)}.expressive-code .copy button:active{opacity:1}.expressive-code .copy button:active div{opacity:var(--ec-frm-inlBtnBgActOpa)}.expressive-code .copy .feedback{--tooltip-arrow-size:0.35rem;--tooltip-bg:var(--ec-frm-tooltipSuccessBg);color:var(--ec-frm-tooltipSuccessFg);pointer-events:none;user-select:none;-webkit-user-select:none;position:relative;align-self:center;background-color:var(--tooltip-bg);z-index:99;padding:0.125rem 0.75rem;border-radius:0.2rem;margin-inline-end:var(--tooltip-arrow-size);opacity:0;transition-property:opacity, transform;transition-duration:0.2s;transition-timing-function:ease-in-out;transform:translate3d(0, 0.25rem, 0)}.expressive-code .copy .feedback::after{content:'';position:absolute;pointer-events:none;top:calc(50% - var(--tooltip-arrow-size));inset-inline-end:calc(-2 * (var(--tooltip-arrow-size) - 0.5px));border:var(--tooltip-arrow-size) solid transparent;border-inline-start-color:var(--tooltip-bg)}.expressive-code .copy .feedback.show{opacity:1;transform:translate3d(0, 0, 0)}@media (hover: hover){.expressive-code{}.expressive-code .copy button{opacity:0;width:2rem;height:2rem}.expressive-code .frame:hover .copy button:not(:hover),.expressive-code .frame:focus-within :focus-visible ~ .copy button:not(:hover),.expressive-code .frame .copy .feedback.show ~ button:not(:hover){opacity:0.75}}:root,:root:not([data-theme='dark']) .expressive-code[data-theme='dark']{--ec-brdRad:0px;--ec-brdWd:1px;--ec-brdCol:color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-codeFontFml:var(--__sl-font-mono);--ec-codeFontSize:var(--sl-text-code);--ec-codeFontWg:400;--ec-codeLineHt:var(--sl-line-height);--ec-codePadBlk:0.75rem;--ec-codePadInl:1rem;--ec-codeBg:#011627;--ec-codeFg:#d6deeb;--ec-codeSelBg:#1d3b53;--ec-gtrFg:#556c80;--ec-gtrBrdCol:#556c8033;--ec-gtrBrdWd:1.5px;--ec-gtrHlFg:#c5e4fd8e;--ec-uiFontFml:var(--__sl-font);--ec-uiFontSize:0.9rem;--ec-uiFontWg:400;--ec-uiLineHt:1.65;--ec-uiPadBlk:0.25rem;--ec-uiPadInl:1rem;--ec-uiSelBg:#234d708c;--ec-uiSelFg:#ffffff;--ec-focusBrd:#122d42;--ec-sbThumbCol:#ffffff17;--ec-sbThumbHoverCol:#ffffff49;--ec-tm-lineMarkerAccentMarg:0rem;--ec-tm-lineMarkerAccentWd:0.15rem;--ec-tm-lineMarkerLabelPadInl:0.2rem;--ec-tm-lineMarkerLabelCol:white;--ec-tm-lineDiffIndMargLeft:0.25rem;--ec-tm-inlMarkerBrdWd:1.5px;--ec-tm-inlMarkerBrdRad:0.2rem;--ec-tm-inlMarkerPad:0.15rem;--ec-tm-insDiffIndContent:'+';--ec-tm-delDiffIndContent:'-';--ec-tm-markBg:#ffffff17;--ec-tm-markBrdCol:#ffffff40;--ec-tm-insBg:#1e571599;--ec-tm-insBrdCol:#487f3bd0;--ec-tm-insDiffIndCol:#79b169d0;--ec-tm-delBg:#862d2799;--ec-tm-delBrdCol:#b4554bd0;--ec-tm-delDiffIndCol:#ed8779d0;--ec-frm-shdCol:#011627;--ec-frm-frameBoxShdCssVal:none;--ec-frm-edActTabBg:var(--sl-color-gray-6);--ec-frm-edActTabFg:var(--sl-color-text);--ec-frm-edActTabBrdCol:transparent;--ec-frm-edActTabIndHt:1px;--ec-frm-edActTabIndTopCol:var(--sl-color-accent-high);--ec-frm-edActTabIndBtmCol:transparent;--ec-frm-edTabsMargInlStart:0;--ec-frm-edTabsMargBlkStart:0;--ec-frm-edTabBrdRad:0px;--ec-frm-edTabBarBg:var(--sl-color-black);--ec-frm-edTabBarBrdCol:color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edTabBarBrdBtmCol:color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edBg:var(--sl-color-gray-6);--ec-frm-trmTtbDotsFg:color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmTtbDotsOpa:0.75;--ec-frm-trmTtbBg:var(--sl-color-black);--ec-frm-trmTtbFg:var(--sl-color-text);--ec-frm-trmTtbBrdBtmCol:color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmBg:var(--sl-color-gray-6);--ec-frm-inlBtnFg:var(--sl-color-text);--ec-frm-inlBtnBg:var(--sl-color-text);--ec-frm-inlBtnBgIdleOpa:0;--ec-frm-inlBtnBgHoverOrFocusOpa:0.2;--ec-frm-inlBtnBgActOpa:0.3;--ec-frm-inlBtnBrd:var(--sl-color-text);--ec-frm-inlBtnBrdOpa:0.4;--ec-frm-tooltipSuccessBg:#158744;--ec-frm-tooltipSuccessFg:white}.expressive-code .ec-line :where(span[style^='--']:not([class])),:root:not([data-theme='dark']) .expressive-code[data-theme='dark'] .ec-line :where(span[style^='--']:not([class])){color:var(--0, inherit);font-style:var(--0fs, inherit);font-weight:var(--0fw, inherit);text-decoration:var(--0td, inherit)}@media (prefers-color-scheme: light){:root:not([data-theme='dark']){--ec-codeBg:#fbfbfb;--ec-codeFg:#403f53;--ec-codeSelBg:#e0e0e0;--ec-gtrFg:#7a8d96;--ec-gtrBrdCol:#7a8d9633;--ec-gtrHlFg:#403f53c3;--ec-uiSelBg:#d3e8f8;--ec-uiSelFg:#403f53;--ec-focusBrd:#93a1a1;--ec-sbThumbCol:#0000001a;--ec-sbThumbHoverCol:#0000005c;--ec-tm-markBg:#0000001a;--ec-tm-markBrdCol:#00000055;--ec-tm-insBg:#8ec77d99;--ec-tm-insDiffIndCol:#336a28d0;--ec-tm-delBg:#ff9c8e99;--ec-tm-delDiffIndCol:#9d4138d0;--ec-frm-shdCol:#d9d9d9;--ec-frm-edActTabBg:var(--sl-color-gray-7);--ec-frm-edActTabIndTopCol:var(--sl-color-accent);--ec-frm-edTabBarBg:var(--sl-color-gray-6);--ec-frm-edBg:var(--sl-color-gray-7);--ec-frm-trmTtbBg:var(--sl-color-gray-6);--ec-frm-trmBg:var(--sl-color-gray-7);--ec-frm-tooltipSuccessBg:#078662}:root:not([data-theme='dark']) .expressive-code .ec-line :where(span[style^='--']:not([class])){color:var(--1, inherit);font-style:var(--1fs, inherit);font-weight:var(--1fw, inherit);text-decoration:var(--1td, inherit)}}:root[data-theme='light'] .expressive-code:not([data-theme='dark']),.expressive-code[data-theme='light']{--ec-codeBg:#fbfbfb;--ec-codeFg:#403f53;--ec-codeSelBg:#e0e0e0;--ec-gtrFg:#7a8d96;--ec-gtrBrdCol:#7a8d9633;--ec-gtrHlFg:#403f53c3;--ec-uiSelBg:#d3e8f8;--ec-uiSelFg:#403f53;--ec-focusBrd:#93a1a1;--ec-sbThumbCol:#0000001a;--ec-sbThumbHoverCol:#0000005c;--ec-tm-markBg:#0000001a;--ec-tm-markBrdCol:#00000055;--ec-tm-insBg:#8ec77d99;--ec-tm-insDiffIndCol:#336a28d0;--ec-tm-delBg:#ff9c8e99;--ec-tm-delDiffIndCol:#9d4138d0;--ec-frm-shdCol:#d9d9d9;--ec-frm-edActTabBg:var(--sl-color-gray-7);--ec-frm-edActTabIndTopCol:var(--sl-color-accent);--ec-frm-edTabBarBg:var(--sl-color-gray-6);--ec-frm-edBg:var(--sl-color-gray-7);--ec-frm-trmTtbBg:var(--sl-color-gray-6);--ec-frm-trmBg:var(--sl-color-gray-7);--ec-frm-tooltipSuccessBg:#078662}:root[data-theme='light'] .expressive-code:not([data-theme='dark']) .ec-line :where(span[style^='--']:not([class])),.expressive-code[data-theme='light'] .ec-line :where(span[style^='--']:not([class])){color:var(--1, inherit);font-style:var(--1fs, inherit);font-weight:var(--1fw, inherit);text-decoration:var(--1td, inherit)} \ No newline at end of file diff --git a/pr-preview/pr-1220/_astro/hoisted.BZ5Snbkq.js b/pr-preview/pr-1220/_astro/hoisted.BZ5Snbkq.js deleted file mode 100644 index 48919a4ff..000000000 --- a/pr-preview/pr-1220/_astro/hoisted.BZ5Snbkq.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["_astro/ui-core.D91euXbw.js","_astro/Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js"])))=>i.map(i=>d[i]); -import"./Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js";const S=document.getElementById("starlight__sidebar"),y=S?.querySelector("sl-sidebar-state-persist"),v="sl-sidebar-state",b=()=>{let t=[];const e=y?.dataset.hash||"";try{const n=sessionStorage.getItem(v),r=JSON.parse(n||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:S?.scrollTop||0}},w=t=>{try{sessionStorage.setItem(v,JSON.stringify(t))}catch{}},L=()=>w(b()),H=(t,e)=>{const n=b();n.open[e]=t,w(n)};y?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const n=e.querySelector("sl-sidebar-restore"),r=parseInt(n?.dataset.index||"");isNaN(r)||H(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&L()});addEventListener("pageHide",L);class I extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&e.addEventListener("change",n=>{n.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=n.currentTarget.value)})}}customElements.define("starlight-lang-select",I);const C="modulepreload",M=function(t){return"/pr-preview/pr-1220/"+t},E={},_=function(e,n,r){let u=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=a?.nonce||a?.getAttribute("nonce");u=Promise.allSettled(n.map(l=>{if(l=M(l),l in E)return;E[l]=!0;const g=l.endsWith(".css"),o=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${o}`))return;const i=document.createElement("link");if(i.rel=g?"stylesheet":C,g||(i.as="script"),i.crossOrigin="",i.href=l,c&&i.setAttribute("nonce",c),document.head.appendChild(i),g)return new Promise((s,h)=>{i.addEventListener("load",s),i.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${l}`)))})}))}function d(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return u.then(a=>{for(const c of a||[])c.status==="rejected"&&d(c.reason);return e().catch(d)})};class A extends HTMLElement{constructor(){super();const e=this.querySelector("button[data-open-modal]"),n=this.querySelector("button[data-close-modal]"),r=this.querySelector("dialog"),u=this.querySelector(".dialog-frame"),d=s=>{("href"in(s.target||{})||document.body.contains(s.target)&&!u.contains(s.target))&&c()},a=s=>{r.showModal(),document.body.toggleAttribute("data-search-modal-open",!0),this.querySelector("input")?.focus(),s?.stopPropagation(),window.addEventListener("click",d)},c=()=>r.close();e.addEventListener("click",a),e.disabled=!1,n.addEventListener("click",c),r.addEventListener("close",()=>{document.body.toggleAttribute("data-search-modal-open",!1),window.removeEventListener("click",d)}),window.addEventListener("keydown",s=>{(s.metaKey===!0||s.ctrlKey===!0)&&s.key==="k"&&(r.open?c():a(),s.preventDefault())});let l={};try{l=JSON.parse(this.dataset.translations||"{}")}catch{}const i=this.dataset.stripTrailingSlash!==void 0?s=>s.replace(/(.)\/(#.*)?$/,"$1$2"):s=>s;window.addEventListener("DOMContentLoaded",()=>{(window.requestIdleCallback||(h=>setTimeout(h,1)))(async()=>{const{PagefindUI:h}=await _(async()=>{const{PagefindUI:m}=await import("./ui-core.D91euXbw.js");return{PagefindUI:m}},__vite__mapDeps([0,1]));new h({element:"#starlight__search",baseUrl:"/pr-preview/pr-1220/",bundlePath:"/pr-preview/pr-1220/".replace(/\/$/,"")+"/pagefind/",showImages:!1,translations:l,showSubResults:!0,processResult:m=>{m.url=i(m.url),m.sub_results=m.sub_results.map(p=>(p.url=i(p.url),p))}})})})}}customElements.define("site-search",A);const T="starlight-theme",k=t=>t==="auto"||t==="dark"||t==="light"?t:"auto",q=()=>k(typeof localStorage<"u"&&localStorage.getItem(T));function P(t){typeof localStorage<"u"&&localStorage.setItem(T,t==="light"||t==="dark"?t:"")}const O=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function f(t){StarlightThemeProvider.updatePickers(t),document.documentElement.dataset.theme=t==="auto"?O():t,P(t)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{q()==="auto"&&f("auto")});class R extends HTMLElement{constructor(){super(),f(q()),this.querySelector("select")?.addEventListener("change",e=>{e.currentTarget instanceof HTMLSelectElement&&f(k(e.currentTarget.value))})}}customElements.define("starlight-theme-select",R);class N extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const e=this.closest("nav");e&&e.addEventListener("keyup",n=>this.closeOnEscape(n))}setExpanded(e){this.setAttribute("aria-expanded",String(e)),document.body.toggleAttribute("data-mobile-menu-expanded",e)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(e){e.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",N);class x extends HTMLElement{_current=this.querySelector('a[aria-current="true"]');minH=parseInt(this.dataset.minH||"2",10);maxH=parseInt(this.dataset.maxH||"3",10);set current(e){e!==this._current&&(this._current&&this._current.removeAttribute("aria-current"),e.setAttribute("aria-current","true"),this._current=e)}constructor(){super();const e=[...this.querySelectorAll("a")],n=o=>{if(o instanceof HTMLHeadingElement){if(o.id==="_top")return!0;const i=o.tagName[1];if(i){const s=parseInt(i,10);if(s>=this.minH&&s<=this.maxH)return!0}}return!1},r=o=>{if(!o)return null;const i=o;for(;o;){if(n(o))return o;for(o=o.previousElementSibling;o?.lastElementChild;)o=o.lastElementChild;const s=r(o);if(s)return s}return r(i.parentElement)},u=o=>{for(const{isIntersecting:i,target:s}of o){if(!i)continue;const h=r(s);if(!h)continue;const m=e.find(p=>p.hash==="#"+encodeURIComponent(h.id));if(m){this.current=m;break}}},d=document.querySelectorAll("main [id], main [id] ~ *, main .content > *");let a;const c=()=>{a&&a.disconnect(),a=new IntersectionObserver(u,{rootMargin:this.getRootMargin()}),d.forEach(o=>a.observe(o))};c();const l=window.requestIdleCallback||(o=>setTimeout(o,1));let g;window.addEventListener("resize",()=>{a&&a.disconnect(),clearTimeout(g),g=setTimeout(()=>l(c),200)})}getRootMargin(){const e=document.querySelector("header")?.getBoundingClientRect().height||0,n=this.querySelector("summary")?.getBoundingClientRect().height||0,r=e+n+32,u=r+53,d=document.documentElement.clientHeight;return`-${r}px 0% ${u-d}px`}}customElements.define("starlight-toc",x);class $ extends x{set current(e){super.current=e;const n=this.querySelector(".display-current");n&&(n.textContent=e.textContent)}constructor(){super();const e=this.querySelector("details");if(!e)return;const n=()=>{e.open=!1};e.querySelectorAll("a").forEach(r=>{r.addEventListener("click",n)}),window.addEventListener("click",r=>{e.contains(r.target)||n()}),window.addEventListener("keydown",r=>{if(r.key==="Escape"&&e.open){const u=e.contains(document.activeElement);if(n(),u){const d=e.querySelector("summary");d&&d.focus()}}})}}customElements.define("mobile-starlight-toc",$);export{_}; diff --git a/pr-preview/pr-1220/_astro/index.B42wp69A.css b/pr-preview/pr-1220/_astro/index.B42wp69A.css deleted file mode 100644 index 483bea61c..000000000 --- a/pr-preview/pr-1220/_astro/index.B42wp69A.css +++ /dev/null @@ -1 +0,0 @@ -:root,::backdrop{--sl-color-white: hsl(0, 0%, 100%);--sl-color-gray-1: hsl(224, 20%, 94%);--sl-color-gray-2: hsl(224, 6%, 77%);--sl-color-gray-3: hsl(224, 6%, 56%);--sl-color-gray-4: hsl(224, 7%, 36%);--sl-color-gray-5: hsl(224, 10%, 23%);--sl-color-gray-6: hsl(224, 14%, 16%);--sl-color-black: hsl(224, 10%, 10%);--sl-hue-orange: 41;--sl-color-orange-low: hsl(var(--sl-hue-orange), 39%, 22%);--sl-color-orange: hsl(var(--sl-hue-orange), 82%, 63%);--sl-color-orange-high: hsl(var(--sl-hue-orange), 82%, 87%);--sl-hue-green: 101;--sl-color-green-low: hsl(var(--sl-hue-green), 39%, 22%);--sl-color-green: hsl(var(--sl-hue-green), 82%, 63%);--sl-color-green-high: hsl(var(--sl-hue-green), 82%, 80%);--sl-hue-blue: 234;--sl-color-blue-low: hsl(var(--sl-hue-blue), 54%, 20%);--sl-color-blue: hsl(var(--sl-hue-blue), 100%, 60%);--sl-color-blue-high: hsl(var(--sl-hue-blue), 100%, 87%);--sl-hue-purple: 281;--sl-color-purple-low: hsl(var(--sl-hue-purple), 39%, 22%);--sl-color-purple: hsl(var(--sl-hue-purple), 82%, 63%);--sl-color-purple-high: hsl(var(--sl-hue-purple), 82%, 89%);--sl-hue-red: 339;--sl-color-red-low: hsl(var(--sl-hue-red), 39%, 22%);--sl-color-red: hsl(var(--sl-hue-red), 82%, 63%);--sl-color-red-high: hsl(var(--sl-hue-red), 82%, 87%);--sl-color-accent-low: hsl(224, 54%, 20%);--sl-color-accent: hsl(224, 100%, 60%);--sl-color-accent-high: hsl(224, 100%, 85%);--sl-color-text: var(--sl-color-gray-2);--sl-color-text-accent: var(--sl-color-accent-high);--sl-color-text-invert: var(--sl-color-accent-low);--sl-color-bg: var(--sl-color-black);--sl-color-bg-nav: var(--sl-color-gray-6);--sl-color-bg-sidebar: var(--sl-color-gray-6);--sl-color-bg-inline-code: var(--sl-color-gray-5);--sl-color-bg-accent: var(--sl-color-accent-high);--sl-color-hairline-light: var(--sl-color-gray-5);--sl-color-hairline: var(--sl-color-gray-6);--sl-color-hairline-shade: var(--sl-color-black);--sl-color-backdrop-overlay: hsla(223, 13%, 10%, .66);--sl-shadow-sm: 0px 1px 1px hsla(0, 0%, 0%, .12), 0px 2px 1px hsla(0, 0%, 0%, .24);--sl-shadow-md: 0px 8px 4px hsla(0, 0%, 0%, .08), 0px 5px 2px hsla(0, 0%, 0%, .08), 0px 3px 2px hsla(0, 0%, 0%, .12), 0px 1px 1px hsla(0, 0%, 0%, .15);--sl-shadow-lg: 0px 25px 7px hsla(0, 0%, 0%, .03), 0px 16px 6px hsla(0, 0%, 0%, .1), 0px 9px 5px hsla(223, 13%, 10%, .33), 0px 4px 4px hsla(0, 0%, 0%, .75), 0px 4px 2px hsla(0, 0%, 0%, .25);--sl-text-2xs: .75rem;--sl-text-xs: .8125rem;--sl-text-sm: .875rem;--sl-text-base: 1rem;--sl-text-lg: 1.125rem;--sl-text-xl: 1.25rem;--sl-text-2xl: 1.5rem;--sl-text-3xl: 1.8125rem;--sl-text-4xl: 2.1875rem;--sl-text-5xl: 2.625rem;--sl-text-6xl: 4rem;--sl-text-body: var(--sl-text-base);--sl-text-body-sm: var(--sl-text-xs);--sl-text-code: var(--sl-text-sm);--sl-text-code-sm: var(--sl-text-xs);--sl-text-h1: var(--sl-text-4xl);--sl-text-h2: var(--sl-text-3xl);--sl-text-h3: var(--sl-text-2xl);--sl-text-h4: var(--sl-text-xl);--sl-text-h5: var(--sl-text-lg);--sl-line-height: 1.75;--sl-line-height-headings: 1.2;--sl-font-system: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--sl-font-system-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--__sl-font: var(--sl-font, var(--sl-font-system)), var(--sl-font-system);--__sl-font-mono: var(--sl-font-mono, var(--sl-font-system-mono)), var(--sl-font-system-mono);--sl-nav-height: 3.5rem;--sl-nav-pad-x: 1rem;--sl-nav-pad-y: .75rem;--sl-mobile-toc-height: 3rem;--sl-sidebar-width: 18.75rem;--sl-sidebar-pad-x: 1rem;--sl-content-width: 45rem;--sl-content-pad-x: 1rem;--sl-menu-button-size: 2rem;--sl-nav-gap: var(--sl-content-pad-x);--sl-outline-offset-inside: -.1875rem;--sl-z-index-toc: 4;--sl-z-index-menu: 5;--sl-z-index-navbar: 10;--sl-z-index-skiplink: 20}:root[data-theme=light],[data-theme=light] ::backdrop{--sl-color-white: hsl(224, 10%, 10%);--sl-color-gray-1: hsl(224, 14%, 16%);--sl-color-gray-2: hsl(224, 10%, 23%);--sl-color-gray-3: hsl(224, 7%, 36%);--sl-color-gray-4: hsl(224, 6%, 56%);--sl-color-gray-5: hsl(224, 6%, 77%);--sl-color-gray-6: hsl(224, 20%, 94%);--sl-color-gray-7: hsl(224, 19%, 97%);--sl-color-black: hsl(0, 0%, 100%);--sl-color-orange-high: hsl(var(--sl-hue-orange), 80%, 25%);--sl-color-orange: hsl(var(--sl-hue-orange), 90%, 60%);--sl-color-orange-low: hsl(var(--sl-hue-orange), 90%, 88%);--sl-color-green-high: hsl(var(--sl-hue-green), 80%, 22%);--sl-color-green: hsl(var(--sl-hue-green), 90%, 46%);--sl-color-green-low: hsl(var(--sl-hue-green), 85%, 90%);--sl-color-blue-high: hsl(var(--sl-hue-blue), 80%, 30%);--sl-color-blue: hsl(var(--sl-hue-blue), 90%, 60%);--sl-color-blue-low: hsl(var(--sl-hue-blue), 88%, 90%);--sl-color-purple-high: hsl(var(--sl-hue-purple), 90%, 30%);--sl-color-purple: hsl(var(--sl-hue-purple), 90%, 60%);--sl-color-purple-low: hsl(var(--sl-hue-purple), 80%, 90%);--sl-color-red-high: hsl(var(--sl-hue-red), 80%, 30%);--sl-color-red: hsl(var(--sl-hue-red), 90%, 60%);--sl-color-red-low: hsl(var(--sl-hue-red), 80%, 90%);--sl-color-accent-high: hsl(234, 80%, 30%);--sl-color-accent: hsl(234, 90%, 60%);--sl-color-accent-low: hsl(234, 88%, 90%);--sl-color-text-accent: var(--sl-color-accent);--sl-color-text-invert: var(--sl-color-black);--sl-color-bg-nav: var(--sl-color-gray-7);--sl-color-bg-sidebar: var(--sl-color-bg);--sl-color-bg-inline-code: var(--sl-color-gray-6);--sl-color-bg-accent: var(--sl-color-accent);--sl-color-hairline-light: var(--sl-color-gray-6);--sl-color-hairline-shade: var(--sl-color-gray-6);--sl-color-backdrop-overlay: hsla(225, 9%, 36%, .66);--sl-shadow-sm: 0px 1px 1px hsla(0, 0%, 0%, .06), 0px 2px 1px hsla(0, 0%, 0%, .06);--sl-shadow-md: 0px 8px 4px hsla(0, 0%, 0%, .03), 0px 5px 2px hsla(0, 0%, 0%, .03), 0px 3px 2px hsla(0, 0%, 0%, .06), 0px 1px 1px hsla(0, 0%, 0%, .06);--sl-shadow-lg: 0px 25px 7px rgba(0, 0, 0, .01), 0px 16px 6px hsla(0, 0%, 0%, .03), 0px 9px 5px hsla(223, 13%, 10%, .08), 0px 4px 4px hsla(0, 0%, 0%, .16), 0px 4px 2px hsla(0, 0%, 0%, .04)}@media (min-width: 50em){:root{--sl-nav-height: 4rem;--sl-nav-pad-x: 1.5rem;--sl-text-h1: var(--sl-text-5xl);--sl-text-h2: var(--sl-text-4xl);--sl-text-h3: var(--sl-text-3xl);--sl-text-h4: var(--sl-text-2xl)}}@media (min-width: 72rem){:root{--sl-content-pad-x: 1.5rem;--sl-mobile-toc-height: 0rem}}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{color-scheme:dark;accent-color:var(--sl-color-accent)}html[data-theme=light]{color-scheme:light}body{font-family:var(--__sl-font);line-height:var(--sl-line-height);-webkit-font-smoothing:antialiased;color:var(--sl-color-text);background-color:var(--sl-color-bg)}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6,code{overflow-wrap:anywhere}code{font-family:var(--__sl-font-mono)}:root{--astro-code-color-text: var(--sl-color-white);--astro-code-color-background: var(--sl-color-gray-6);--astro-code-token-constant: var(--sl-color-blue-high);--astro-code-token-string: var(--sl-color-green-high);--astro-code-token-comment: var(--sl-color-gray-2);--astro-code-token-keyword: var(--sl-color-purple-high);--astro-code-token-parameter: var(--sl-color-red-high);--astro-code-token-function: var(--sl-color-red-high);--astro-code-token-string-expression: var(--sl-color-green-high);--astro-code-token-punctuation: var(--sl-color-gray-2);--astro-code-token-link: var(--sl-color-blue-high)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sl-hidden{display:none}.sl-flex{display:flex}.sl-block{display:block}@media (min-width: 50rem){.md\:sl-hidden{display:none}.md\:sl-flex{display:flex}.md\:sl-block{display:block}}@media (min-width: 72rem){.lg\:sl-hidden{display:none}.lg\:sl-flex{display:flex}.lg\:sl-block{display:block}}[data-theme=light] .light\:sl-hidden,[data-theme=dark] .dark\:sl-hidden{display:none}[dir=rtl] .rtl\:flip:not(:where([dir=rtl] [dir=ltr] *)){transform:scaleX(-1)}.sl-banner:where(.astro-zuxqunuq){--__sl-banner-text: var(--sl-color-banner-text, var(--sl-color-text-invert));padding:var(--sl-nav-pad-y) var(--sl-nav-pad-x);background-color:var(--sl-color-banner-bg, var(--sl-color-bg-accent));color:var(--__sl-banner-text);line-height:var(--sl-line-height-headings);text-align:center;text-wrap:balance;box-shadow:var(--sl-shadow-sm)}.sl-banner:where(.astro-zuxqunuq) a{color:var(--__sl-banner-text)}.content-panel:where(.astro-msts3inq){padding:1.5rem var(--sl-content-pad-x)}.content-panel:where(.astro-msts3inq)+.content-panel:where(.astro-msts3inq){border-top:1px solid var(--sl-color-hairline)}.sl-container:where(.astro-msts3inq){max-width:var(--sl-content-width)}.sl-container:where(.astro-msts3inq)>*+*{margin-top:1.5rem}@media (min-width: 72rem){.sl-container:where(.astro-msts3inq){margin-inline:var(--sl-content-margin-inline, auto)}}p:where(.astro-n442rkr5){border:1px solid var(--sl-color-orange);padding:.75em 1em;background-color:var(--sl-color-orange-low);color:var(--sl-color-orange-high);width:-moz-max-content;width:max-content;max-width:100%;align-items:center;gap:.75em;font-size:var(--sl-text-body-sm);line-height:var(--sl-line-height-headings)}a:where(.astro-pie4vz3w){gap:.5rem;align-items:center;text-decoration:none;color:var(--sl-color-gray-3)}a:where(.astro-pie4vz3w):hover{color:var(--sl-color-white)}.pagination-links:where(.astro-kanugxtz){display:grid;grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr));gap:1rem}a:where(.astro-kanugxtz){display:flex;align-items:center;justify-content:flex-start;gap:.5rem;width:100%;flex-basis:calc(50% - .5rem);flex-grow:1;border:1px solid var(--sl-color-gray-5);border-radius:.5rem;padding:1rem;text-decoration:none;color:var(--sl-color-gray-2);box-shadow:var(--sl-shadow-md);overflow-wrap:anywhere}:where(.astro-kanugxtz)[rel=next]{justify-content:end;text-align:end;flex-direction:row-reverse}a:where(.astro-kanugxtz):hover{border-color:var(--sl-color-gray-2)}.link-title:where(.astro-kanugxtz){color:var(--sl-color-white);font-size:var(--sl-text-2xl);line-height:var(--sl-line-height-headings)}svg:where(.astro-kanugxtz){flex-shrink:0}footer:where(.astro-25swywcw){flex-direction:column;gap:1.5rem}.meta:where(.astro-25swywcw){gap:.75rem 3rem;justify-content:space-between;flex-wrap:wrap;margin-top:3rem;font-size:var(--sl-text-sm);color:var(--sl-color-gray-3)}.meta:where(.astro-25swywcw)>p:only-child{margin-inline-start:auto}.kudos:where(.astro-25swywcw){align-items:center;gap:.5em;margin:1.5rem auto;font-size:var(--sl-text-xs);text-decoration:none;color:var(--sl-color-gray-3)}.kudos:where(.astro-25swywcw) svg{color:var(--sl-color-orange)}.kudos:where(.astro-25swywcw):hover{color:var(--sl-color-white)}label:where(.astro-lebbqyku){--sl-label-icon-size: .875rem;--sl-caret-size: 1.25rem;--sl-inline-padding: .5rem;position:relative;display:flex;align-items:center;gap:.25rem;color:var(--sl-color-gray-1)}label:where(.astro-lebbqyku):hover{color:var(--sl-color-gray-2)}.icon:where(.astro-lebbqyku){position:absolute;top:50%;transform:translateY(-50%);pointer-events:none}.label-icon:where(.astro-lebbqyku){font-size:var(--sl-label-icon-size);inset-inline-start:0}.caret:where(.astro-lebbqyku){font-size:var(--sl-caret-size);inset-inline-end:0}select:where(.astro-lebbqyku){border:0;padding-block:.625rem;padding-inline:calc(var(--sl-label-icon-size) + var(--sl-inline-padding) + .25rem) calc(var(--sl-caret-size) + var(--sl-inline-padding) + .25rem);margin-inline:calc(var(--sl-inline-padding) * -1);width:calc(var(--sl-select-width) + var(--sl-inline-padding) * 2);background-color:transparent;text-overflow:ellipsis;color:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}option:where(.astro-lebbqyku){background-color:var(--sl-color-bg-nav);color:var(--sl-color-gray-1)}@media (min-width: 50rem){select:where(.astro-lebbqyku){font-size:var(--sl-text-sm)}}.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"⤷ ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);-moz-appearance:none;appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;-moz-appearance:revert;appearance:revert}.pagefind-ui--reset ::-moz-placeholder{color:unset}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable=true]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;-moz-appearance:none;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::-moz-placeholder{opacity:.2}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)}[data-search-modal-open]{overflow:hidden}#starlight__search{--sl-search-result-spacing: calc(1.25rem * var(--pagefind-ui-scale));--sl-search-result-pad-inline-start: calc(3.75rem * var(--pagefind-ui-scale));--sl-search-result-pad-inline-end: calc(1.25rem * var(--pagefind-ui-scale));--sl-search-result-pad-block: calc(.9375rem * var(--pagefind-ui-scale));--sl-search-result-nested-pad-block: calc(.625rem * var(--pagefind-ui-scale));--sl-search-corners: calc(.3125rem * var(--pagefind-ui-scale));--sl-search-page-icon-size: calc(1.875rem * var(--pagefind-ui-scale));--sl-search-page-icon-inline-start: calc( (var(--sl-search-result-pad-inline-start) - var(--sl-search-page-icon-size)) / 2 );--sl-search-tree-diagram-size: calc(2.5rem * var(--pagefind-ui-scale));--sl-search-tree-diagram-inline-start: calc( (var(--sl-search-result-pad-inline-start) - var(--sl-search-tree-diagram-size)) / 2 )}#starlight__search .pagefind-ui__form:before{--pagefind-ui-text: var(--sl-color-gray-1);opacity:1}#starlight__search .pagefind-ui__search-input{color:var(--sl-color-white);font-weight:400;width:calc(100% - var(--sl-search-cancel-space))}#starlight__search input:focus{--pagefind-ui-border: var(--sl-color-accent)}#starlight__search .pagefind-ui__search-clear{inset-inline-end:var(--sl-search-cancel-space);width:calc(60px * var(--pagefind-ui-scale));padding:0;background-color:transparent;overflow:hidden}#starlight__search .pagefind-ui__search-clear:focus{outline:1px solid var(--sl-color-accent)}#starlight__search .pagefind-ui__search-clear:before{content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m13.41 12 6.3-6.29a1 1 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1 1 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 .33 1.64 1 1 0 0 0 1.09-.22l6.29-6.3 6.29 6.3a1 1 0 0 0 1.64-.33 1 1 0 0 0-.22-1.09L13.41 12Z'/%3E%3C/svg%3E") center / 50% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m13.41 12 6.3-6.29a1 1 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1 1 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 .33 1.64 1 1 0 0 0 1.09-.22l6.29-6.3 6.29 6.3a1 1 0 0 0 1.64-.33 1 1 0 0 0-.22-1.09L13.41 12Z'/%3E%3C/svg%3E") center / 50% no-repeat;background-color:var(--sl-color-text-accent);display:block;width:100%;height:100%}#starlight__search .pagefind-ui__results>*+*{margin-top:var(--sl-search-result-spacing)}#starlight__search .pagefind-ui__result{border:0;padding:0}#starlight__search .pagefind-ui__result-nested{position:relative;padding:var(--sl-search-result-nested-pad-block) var(--sl-search-result-pad-inline-end);padding-inline-start:var(--sl-search-result-pad-inline-start)}#starlight__search .pagefind-ui__result-title:not(:where(.pagefind-ui__result-nested *)),#starlight__search .pagefind-ui__result-nested{position:relative;background-color:var(--sl-color-black)}#starlight__search .pagefind-ui__result-title:not(:where(.pagefind-ui__result-nested *)):hover,#starlight__search .pagefind-ui__result-title:not(:where(.pagefind-ui__result-nested *)):focus-within,#starlight__search .pagefind-ui__result-nested:hover,#starlight__search .pagefind-ui__result-nested:focus-within{outline:1px solid var(--sl-color-accent-high)}#starlight__search .pagefind-ui__result-title:not(:where(.pagefind-ui__result-nested *)):focus-within,#starlight__search .pagefind-ui__result-nested:focus-within{background-color:var(--sl-color-accent-low)}#starlight__search .pagefind-ui__result-thumb,#starlight__search .pagefind-ui__result-inner{margin-top:0}#starlight__search .pagefind-ui__result-inner>:first-child{border-radius:var(--sl-search-corners) var(--sl-search-corners) 0 0}#starlight__search .pagefind-ui__result-inner>:last-child{border-radius:0 0 var(--sl-search-corners) var(--sl-search-corners)}#starlight__search .pagefind-ui__result-inner>.pagefind-ui__result-title{padding:var(--sl-search-result-pad-block) var(--sl-search-result-pad-inline-end);padding-inline-start:var(--sl-search-result-pad-inline-start)}#starlight__search .pagefind-ui__result-inner>.pagefind-ui__result-title:before{content:"";position:absolute;inset-block:0;inset-inline-start:var(--sl-search-page-icon-inline-start);width:var(--sl-search-page-icon-size);background:var(--sl-color-gray-3);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' viewBox='0 0 24 24'%3E%3Cpath d='M9 10h1a1 1 0 1 0 0-2H9a1 1 0 0 0 0 2Zm0 2a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2H9Zm11-3V8l-6-6a1 1 0 0 0-1 0H7a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V9Zm-6-4 3 3h-2a1 1 0 0 1-1-1V5Zm4 14a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h5v3a3 3 0 0 0 3 3h3v9Zm-3-3H9a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2Z'/%3E%3C/svg%3E") center no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' viewBox='0 0 24 24'%3E%3Cpath d='M9 10h1a1 1 0 1 0 0-2H9a1 1 0 0 0 0 2Zm0 2a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2H9Zm11-3V8l-6-6a1 1 0 0 0-1 0H7a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V9Zm-6-4 3 3h-2a1 1 0 0 1-1-1V5Zm4 14a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h5v3a3 3 0 0 0 3 3h3v9Zm-3-3H9a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2Z'/%3E%3C/svg%3E") center no-repeat}#starlight__search .pagefind-ui__result-inner{align-items:stretch;gap:1px}#starlight__search .pagefind-ui__result-link{position:unset;--pagefind-ui-text: var(--sl-color-white);font-weight:600}#starlight__search .pagefind-ui__result-link:hover{text-decoration:none}#starlight__search .pagefind-ui__result-nested .pagefind-ui__result-link:before{content:unset}#starlight__search .pagefind-ui__result-nested:before{content:"";position:absolute;inset-block:0;inset-inline-start:var(--sl-search-tree-diagram-inline-start);width:var(--sl-search-tree-diagram-size);background:var(--sl-color-gray-4);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' viewBox='0 0 16 1000' preserveAspectRatio='xMinYMin slice'%3E%3Cpath d='M8 0v1000m6-988H8'/%3E%3C/svg%3E") 0% 0% / 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' viewBox='0 0 16 1000' preserveAspectRatio='xMinYMin slice'%3E%3Cpath d='M8 0v1000m6-988H8'/%3E%3C/svg%3E") 0% 0% / 100% no-repeat}#starlight__search .pagefind-ui__result-nested:last-child:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='M8 0v12m6 0H8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='M8 0v12m6 0H8'/%3E%3C/svg%3E")}[dir=rtl] .pagefind-ui__result-title:before,[dir=rtl] .pagefind-ui__result-nested:before{transform:scaleX(-1)}#starlight__search .pagefind-ui__result-link:after{content:"";position:absolute;inset:0}#starlight__search .pagefind-ui__result-excerpt{font-size:calc(1rem * var(--pagefind-ui-scale));overflow-wrap:anywhere}#starlight__search mark{color:var(--sl-color-gray-2);background-color:transparent;font-weight:600}site-search:where(.astro-3pf2kwyz){display:contents}button:where(.astro-3pf2kwyz)[data-open-modal]{display:flex;align-items:center;gap:.5rem;border:0;background-color:transparent;color:var(--sl-color-gray-1);cursor:pointer;height:2.5rem;font-size:var(--sl-text-xl)}@media (min-width: 50rem){button:where(.astro-3pf2kwyz)[data-open-modal]{border:1px solid var(--sl-color-gray-5);border-radius:.5rem;padding-inline-start:.75rem;padding-inline-end:.5rem;background-color:var(--sl-color-black);color:var(--sl-color-gray-2);font-size:var(--sl-text-sm);width:100%;max-width:22rem}button:where(.astro-3pf2kwyz)[data-open-modal]:hover{border-color:var(--sl-color-gray-2);color:var(--sl-color-white)}button:where(.astro-3pf2kwyz)[data-open-modal]>:last-child:where(.astro-3pf2kwyz){margin-inline-start:auto}}button:where(.astro-3pf2kwyz)>kbd:where(.astro-3pf2kwyz){border-radius:.25rem;font-size:var(--sl-text-2xs);gap:.25em;padding-inline:.375rem;background-color:var(--sl-color-gray-6)}kbd:where(.astro-3pf2kwyz){font-family:var(--__sl-font)}dialog:where(.astro-3pf2kwyz){margin:0;background-color:var(--sl-color-gray-6);border:1px solid var(--sl-color-gray-5);width:100%;max-width:100%;height:100%;max-height:100%;box-shadow:var(--sl-shadow-lg)}dialog:where(.astro-3pf2kwyz)[open]{display:flex}dialog:where(.astro-3pf2kwyz)::backdrop{background-color:var(--sl-color-backdrop-overlay);-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem)}.dialog-frame:where(.astro-3pf2kwyz){position:relative;overflow:auto;flex-direction:column;flex-grow:1;gap:1rem;padding:1rem}button:where(.astro-3pf2kwyz)[data-close-modal]{position:absolute;z-index:1;align-items:center;align-self:flex-end;height:calc(64px * var(--pagefind-ui-scale));padding:.25rem;border:0;background:transparent;cursor:pointer;color:var(--sl-color-text-accent)}#starlight__search:where(.astro-3pf2kwyz){--pagefind-ui-primary: var(--sl-color-accent-light);--pagefind-ui-text: var(--sl-color-gray-2);--pagefind-ui-font: var(--__sl-font);--pagefind-ui-background: var(--sl-color-black);--pagefind-ui-border: var(--sl-color-gray-5);--pagefind-ui-border-width: 1px;--sl-search-cancel-space: 5rem}@media (min-width: 50rem){#starlight__search:where(.astro-3pf2kwyz){--sl-search-cancel-space: 0px}dialog:where(.astro-3pf2kwyz){margin:4rem auto auto;border-radius:.5rem;width:90%;max-width:40rem;height:-moz-max-content;height:max-content;min-height:15rem;max-height:calc(100% - 8rem)}.dialog-frame:where(.astro-3pf2kwyz){padding:1.5rem}}.site-title:where(.astro-ntbslxny){align-items:center;gap:var(--sl-nav-gap);font-size:var(--sl-text-h4);font-weight:600;color:var(--sl-color-text-accent);text-decoration:none;white-space:nowrap}img:where(.astro-ntbslxny){height:calc(var(--sl-nav-height) - 2 * var(--sl-nav-pad-y));width:auto;max-width:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:0 50%;object-position:0 50%}a:where(.astro-rsjnfeim){color:var(--sl-color-text-accent);padding:.5em;margin:-.5em}a:where(.astro-rsjnfeim):hover{opacity:.66}.header:where(.astro-u5yfhrja){gap:var(--sl-nav-gap);justify-content:space-between;align-items:center;height:100%}.title-wrapper:where(.astro-u5yfhrja){overflow:hidden}.right-group:where(.astro-u5yfhrja),.social-icons:where(.astro-u5yfhrja){gap:1rem;align-items:center}.social-icons:where(.astro-u5yfhrja):after{content:"";height:2rem;border-inline-end:1px solid var(--sl-color-gray-5)}@media (min-width: 50rem){:root[data-has-sidebar]{--__sidebar-pad: calc(2 * var(--sl-nav-pad-x))}:root:not([data-has-toc]){--__toc-width: 0rem}.header:where(.astro-u5yfhrja){--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));--__main-column-fr: calc( ( 100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) - (2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) - var(--sl-content-width) ) / 2 );display:grid;grid-template-columns:minmax(calc(var(--__sidebar-width) + max(0rem,var(--__main-column-fr) - var(--sl-nav-gap))),auto) 1fr auto;align-content:center}}[data-has-hero]{--sl-content-width: 66.7rem}.hero:where(.astro-bbe6dxrz){padding-bottom:1rem}.hero:where(.astro-bbe6dxrz)>img:where(.astro-bbe6dxrz),.hero:where(.astro-bbe6dxrz)>.hero-html:where(.astro-bbe6dxrz){-o-object-fit:contain;object-fit:contain;height:auto;margin-inline:auto}.stack:where(.astro-bbe6dxrz){flex-direction:column;gap:clamp(1.5rem,calc(1.5rem + 1vw),2rem);text-align:center}.copy:where(.astro-bbe6dxrz){flex-direction:column;gap:1rem;align-items:center}.copy:where(.astro-bbe6dxrz)>:where(.astro-bbe6dxrz){max-width:50ch}h1:where(.astro-bbe6dxrz){font-size:clamp(var(--sl-text-3xl),calc(.25rem + 5vw),var(--sl-text-6xl));line-height:var(--sl-line-height-headings);font-weight:600;color:var(--sl-color-white)}.tagline:where(.astro-bbe6dxrz){font-size:clamp(var(--sl-text-base),calc(.0625rem + 2vw),var(--sl-text-xl));color:var(--sl-color-gray-2)}.actions:where(.astro-bbe6dxrz){gap:1rem 2rem;flex-wrap:wrap;justify-content:center}@media (min-width: 50rem){.hero:where(.astro-bbe6dxrz){padding-block:clamp(2.5rem,calc(1rem + 10vmin),10rem)}.hero:where(.astro-bbe6dxrz)>img:where(.astro-bbe6dxrz),.hero:where(.astro-bbe6dxrz)>.hero-html:where(.astro-bbe6dxrz){order:2;width:min(100%,25rem)}.stack:where(.astro-bbe6dxrz){text-align:start}.copy:where(.astro-bbe6dxrz){align-items:flex-start}.actions:where(.astro-bbe6dxrz){justify-content:flex-start}}.sl-markdown-content :not(a,strong,em,del,span,input,code,br)+:not(a,strong,em,del,span,input,code,br,:where(.not-content *)){margin-top:1rem}.sl-markdown-content :not(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){margin-top:1.5em}.sl-markdown-content li+li:not(:where(.not-content *)),.sl-markdown-content dt+dt:not(:where(.not-content *)),.sl-markdown-content dt+dd:not(:where(.not-content *)),.sl-markdown-content dd+dd:not(:where(.not-content *)){margin-top:.25rem}.sl-markdown-content li:not(:where(.not-content *)){overflow-wrap:anywhere}.sl-markdown-content li>:last-child:not(li,ul,ol):not(a,strong,em,del,span,input,:where(.not-content *)){margin-bottom:1.25rem}.sl-markdown-content dt:not(:where(.not-content *)){font-weight:700}.sl-markdown-content dd:not(:where(.not-content *)){padding-inline-start:1rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){color:var(--sl-color-white);line-height:var(--sl-line-height-headings);font-weight:600}.sl-markdown-content :is(img,picture,video,canvas,svg,iframe):not(:where(.not-content *)){display:block;max-width:100%;height:auto}.sl-markdown-content h1:not(:where(.not-content *)){font-size:var(--sl-text-h1)}.sl-markdown-content h2:not(:where(.not-content *)){font-size:var(--sl-text-h2)}.sl-markdown-content h3:not(:where(.not-content *)){font-size:var(--sl-text-h3)}.sl-markdown-content h4:not(:where(.not-content *)){font-size:var(--sl-text-h4)}.sl-markdown-content h5:not(:where(.not-content *)){font-size:var(--sl-text-h5)}.sl-markdown-content h6:not(:where(.not-content *)){font-size:var(--sl-text-h6)}.sl-markdown-content a:not(:where(.not-content *)){color:var(--sl-color-text-accent)}.sl-markdown-content a:hover:not(:where(.not-content *)){color:var(--sl-color-white)}.sl-markdown-content code:not(:where(.not-content *)){background-color:var(--sl-color-bg-inline-code);margin-block:-.125rem;padding:.125rem .375rem;font-size:var(--sl-text-code-sm)}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) code{font-size:inherit}.sl-markdown-content pre:not(:where(.not-content *)){border:1px solid var(--sl-color-gray-5);padding:.75rem 1rem;font-size:var(--sl-text-code);-moz-tab-size:2;-o-tab-size:2;tab-size:2}.sl-markdown-content pre code:not(:where(.not-content *)){all:unset;font-family:var(--__sl-font-mono)}.sl-markdown-content blockquote:not(:where(.not-content *)){border-inline-start:1px solid var(--sl-color-gray-5);padding-inline-start:1rem}.sl-markdown-content table:not(:where(.not-content *)){display:block;overflow:auto;border-spacing:0}.sl-markdown-content :is(th,td):not(:where(.not-content *)){border-bottom:1px solid var(--sl-color-gray-5);padding:.5rem 1rem;vertical-align:baseline}.sl-markdown-content :is(th:first-child,td:first-child):not(:where(.not-content *)){padding-inline-start:0}.sl-markdown-content :is(th:last-child,td:last-child):not(:where(.not-content *)){padding-inline-end:0}.sl-markdown-content th:not(:where(.not-content *)){color:var(--sl-color-white);font-weight:600}.sl-markdown-content th:not([align]):not(:where(.not-content *)){text-align:start}.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:var(--sl-color-gray-4)}@supports (border-color: color-mix(in srgb,var(--sl-color-asides-text-accent) 30%,transparent)){.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:color-mix(in srgb,var(--sl-color-asides-text-accent) 30%,transparent)}}@supports (border-color: color-mix(in srgb,var(--sl-color-asides-text-accent) 12%,transparent)){.sl-markdown-content .starlight-aside code:not(:where(.not-content *)){background-color:color-mix(in srgb,var(--sl-color-asides-text-accent) 12%,transparent)}}.sl-markdown-content hr:not(:where(.not-content *)){border:0;border-bottom:1px solid var(--sl-color-hairline)}.sl-markdown-content details:not(:where(.not-content *)){--sl-details-border-color: var(--sl-color-gray-5);--sl-details-border-color--hover: var(--sl-color-text-accent);border-inline-start:2px solid var(--sl-details-border-color);padding-inline-start:1rem}.sl-markdown-content details:not([open]):hover:not(:where(.not-content *)),.sl-markdown-content details:has(>summary:hover):not(:where(.not-content *)){border-color:var(--sl-details-border-color--hover)}.sl-markdown-content summary:not(:where(.not-content *)){color:var(--sl-color-white);cursor:pointer;display:block;font-weight:600;margin-inline-start:-.5rem;padding-inline-start:.5rem}.sl-markdown-content details[open]>summary:not(:where(.not-content *)){margin-bottom:1rem}.sl-markdown-content summary:not(:where(.not-content *))::marker,.sl-markdown-content summary:not(:where(.not-content *))::-webkit-details-marker{display:none}.sl-markdown-content summary:not(:where(.not-content *)):before{--sl-details-marker-size: 1.25rem;background-color:currentColor;content:"";display:inline-block;height:var(--sl-details-marker-size);width:var(--sl-details-marker-size);margin-inline:calc((var(--sl-details-marker-size) / 4) * -1) .25rem;vertical-align:middle;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@media (prefers-reduced-motion: no-preference){.sl-markdown-content summary:not(:where(.not-content *)):before{transition:transform .2s ease-in-out}}.sl-markdown-content details[open]>summary:not(:where(.not-content *)):before{transform:rotate(90deg)}[dir=rtl] .sl-markdown-content summary:not(:where(.not-content *)):before,.sl-markdown-content [dir=rtl] summary:not(:where(.not-content *)):before{transform:rotate(180deg)}.sl-markdown-content summary:not(:where(.not-content *)) p:only-child{display:inline}.sl-markdown-content .starlight-aside details:not(:where(.not-content *)){--sl-details-border-color: var(--sl-color-asides-border);--sl-details-border-color--hover: var(--sl-color-asides-text-accent)}[data-mobile-menu-expanded]{overflow:hidden}@media (min-width: 50rem){[data-mobile-menu-expanded]{overflow:auto}}button:where(.astro-ar2625mr){position:fixed;top:calc((var(--sl-nav-height) - var(--sl-menu-button-size)) / 2);inset-inline-end:var(--sl-nav-pad-x);z-index:var(--sl-z-index-navbar);border:0;border-radius:50%;width:var(--sl-menu-button-size);height:var(--sl-menu-button-size);padding:.5rem;background-color:var(--sl-color-white);color:var(--sl-color-black);box-shadow:var(--sl-shadow-md);cursor:pointer}:where(.astro-ar2625mr)[aria-expanded=true] button:where(.astro-ar2625mr){background-color:var(--sl-color-gray-2);box-shadow:none}[data-theme=light] button:where(.astro-ar2625mr){background-color:var(--sl-color-black);color:var(--sl-color-white)}[data-theme=light] :where(.astro-ar2625mr)[aria-expanded=true] button:where(.astro-ar2625mr){background-color:var(--sl-color-gray-5)}.page:where(.astro-lls45dgv){flex-direction:column;min-height:100vh}.header:where(.astro-lls45dgv){z-index:var(--sl-z-index-navbar);position:fixed;inset-inline-start:0;inset-block-start:0;width:100%;height:var(--sl-nav-height);border-bottom:1px solid var(--sl-color-hairline-shade);padding:var(--sl-nav-pad-y) var(--sl-nav-pad-x);padding-inline-end:var(--sl-nav-pad-x);background-color:var(--sl-color-bg-nav)}[data-has-sidebar] .header:where(.astro-lls45dgv){padding-inline-end:calc(var(--sl-nav-gap) + var(--sl-nav-pad-x) + var(--sl-menu-button-size))}.sidebar-pane:where(.astro-lls45dgv){visibility:var(--sl-sidebar-visibility, hidden);position:fixed;z-index:var(--sl-z-index-menu);inset-block:var(--sl-nav-height) 0;inset-inline-start:0;width:100%;background-color:var(--sl-color-black);overflow-y:auto}[aria-expanded=true]~.sidebar-pane:where(.astro-lls45dgv){--sl-sidebar-visibility: visible}.sidebar-content:where(.astro-lls45dgv){height:100%;min-height:-moz-max-content;min-height:max-content;padding:1rem var(--sl-sidebar-pad-x) 0;flex-direction:column;gap:1rem}@media (min-width: 50rem){.sidebar-content:where(.astro-lls45dgv):after{content:"";padding-bottom:1px}}.main-frame:where(.astro-lls45dgv){padding-top:calc(var(--sl-nav-height) + var(--sl-mobile-toc-height));padding-inline-start:var(--sl-content-inline-start)}@media (min-width: 50rem){[data-has-sidebar] .header:where(.astro-lls45dgv){padding-inline-end:var(--sl-nav-pad-x)}.sidebar-pane:where(.astro-lls45dgv){--sl-sidebar-visibility: visible;width:var(--sl-sidebar-width);background-color:var(--sl-color-bg-sidebar);border-inline-end:1px solid var(--sl-color-hairline-shade)}}ul:where(.astro-lbtmlupc){padding:0;list-style:none}a:where(.astro-lbtmlupc){--pad-inline: .5rem;display:block;border-radius:.25rem;padding-block:.25rem;padding-inline:calc(1rem * var(--depth) + var(--pad-inline)) var(--pad-inline);line-height:1.25}a:where(.astro-lbtmlupc)[aria-current=true]{color:var(--sl-color-text-accent)}.isMobile:where(.astro-lbtmlupc) a:where(.astro-lbtmlupc){--pad-inline: 1rem;display:flex;justify-content:space-between;gap:var(--pad-inline);border-top:1px solid var(--sl-color-gray-6);border-radius:0;padding-block:.5rem;color:var(--sl-color-text);font-size:var(--sl-text-sm);text-decoration:none;outline-offset:var(--sl-outline-offset-inside)}.isMobile:where(.astro-lbtmlupc):first-child>li:where(.astro-lbtmlupc):first-child>a:where(.astro-lbtmlupc){border-top:0}.isMobile:where(.astro-lbtmlupc) a:where(.astro-lbtmlupc)[aria-current=true],.isMobile:where(.astro-lbtmlupc) a:where(.astro-lbtmlupc)[aria-current=true]:hover,.isMobile:where(.astro-lbtmlupc) a:where(.astro-lbtmlupc)[aria-current=true]:focus{color:var(--sl-color-white);background-color:unset}.isMobile:where(.astro-lbtmlupc) a:where(.astro-lbtmlupc)[aria-current=true]:after{content:"";width:1rem;background-color:var(--sl-color-text-accent);-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNCAxNCc+PHBhdGggZD0nTTEwLjkxNCA0LjIwNmEuNTgzLjU4MyAwIDAgMC0uODI4IDBMNS43NCA4LjU1NyAzLjkxNCA2LjcyNmEuNTk2LjU5NiAwIDAgMC0uODI4Ljg1N2wyLjI0IDIuMjRhLjU4My41ODMgMCAwIDAgLjgyOCAwbDQuNzYtNC43NmEuNTgzLjU4MyAwIDAgMCAwLS44NTdaJy8+PC9zdmc+Cg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNCAxNCc+PHBhdGggZD0nTTEwLjkxNCA0LjIwNmEuNTgzLjU4MyAwIDAgMC0uODI4IDBMNS43NCA4LjU1NyAzLjkxNCA2LjcyNmEuNTk2LjU5NiAwIDAgMC0uODI4Ljg1N2wyLjI0IDIuMjRhLjU4My41ODMgMCAwIDAgLjgyOCAwbDQuNzYtNC43NmEuNTgzLjU4MyAwIDAgMCAwLS44NTdaJy8+PC9zdmc+Cg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;flex-shrink:0}nav:where(.astro-kasrnjty){position:fixed;z-index:var(--sl-z-index-toc);top:calc(var(--sl-nav-height) - 1px);inset-inline:0;border-top:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-bg-nav)}@media (min-width: 50rem){nav:where(.astro-kasrnjty){inset-inline-start:var(--sl-content-inline-start, 0)}}summary:where(.astro-kasrnjty){gap:.5rem;align-items:center;height:var(--sl-mobile-toc-height);border-bottom:1px solid var(--sl-color-hairline-shade);padding:.5rem 1rem;font-size:var(--sl-text-xs);outline-offset:var(--sl-outline-offset-inside)}summary:where(.astro-kasrnjty)::marker,summary:where(.astro-kasrnjty)::-webkit-details-marker{display:none}.toggle:where(.astro-kasrnjty){flex-shrink:0;gap:1rem;align-items:center;justify-content:space-between;border:1px solid var(--sl-color-gray-5);border-radius:.5rem;padding-block:.5rem;padding-inline-start:.75rem;padding-inline-end:.5rem;line-height:1;background-color:var(--sl-color-black);-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer}details:where(.astro-kasrnjty)[open] .toggle:where(.astro-kasrnjty){color:var(--sl-color-white);border-color:var(--sl-color-accent)}details:where(.astro-kasrnjty) .toggle:where(.astro-kasrnjty):hover{color:var(--sl-color-white);border-color:var(--sl-color-gray-2)}[dir=rtl] .caret:where(.astro-kasrnjty){transform:rotate(180deg)}details:where(.astro-kasrnjty)[open] .caret:where(.astro-kasrnjty){transform:rotate(90deg)}.display-current:where(.astro-kasrnjty){white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--sl-color-white)}.dropdown:where(.astro-kasrnjty){--border-top: 1px;margin-top:calc(-1 * var(--border-top));border:var(--border-top) solid var(--sl-color-gray-6);border-top-color:var(--sl-color-hairline-shade);max-height:calc(85vh - var(--sl-nav-height) - var(--sl-mobile-toc-height));overflow-y:auto;background-color:var(--sl-color-black);box-shadow:var(--sl-shadow-md);overscroll-behavior:contain}.right-sidebar-panel:where(.astro-sfwi6dow){padding:1rem var(--sl-sidebar-pad-x)}.sl-container:where(.astro-sfwi6dow){width:calc(var(--sl-sidebar-width) - 2 * var(--sl-sidebar-pad-x))}.right-sidebar-panel:where(.astro-sfwi6dow) h2{color:var(--sl-color-white);font-size:var(--sl-text-h5);font-weight:600;line-height:var(--sl-line-height-headings);margin-bottom:.5rem}.right-sidebar-panel:where(.astro-sfwi6dow) :where(a){display:block;font-size:var(--sl-text-xs);text-decoration:none;color:var(--sl-color-gray-3);overflow-wrap:anywhere}.right-sidebar-panel:where(.astro-sfwi6dow) :where(a):hover{color:var(--sl-color-white)}@media (min-width: 72rem){.sl-container:where(.astro-sfwi6dow){max-width:calc(((100vw - var(--sl-sidebar-width) - 2 * var(--sl-content-pad-x) - 2 * var(--sl-sidebar-pad-x)) * .25))}}h1:where(.astro-t2xxeseq){margin-top:1rem;font-size:var(--sl-text-h1);line-height:var(--sl-line-height-headings);font-weight:600;color:var(--sl-color-white)}.social-icons:where(.astro-rprr4dnr){margin-inline-end:auto;gap:1rem;align-items:center;padding-block:1rem}.social-icons:where(.astro-rprr4dnr):empty{display:none}.mobile-preferences:where(.astro-rprr4dnr){justify-content:space-between;flex-wrap:wrap;border-top:1px solid var(--sl-color-gray-6);-moz-column-gap:1rem;column-gap:1rem;padding:.5rem 0}sl-sidebar-state-persist:where(.astro-utohngnv){display:contents}ul:where(.astro-li4k3whk){--sl-sidebar-item-padding-inline: .5rem;list-style:none;padding:0}li:where(.astro-li4k3whk){overflow-wrap:anywhere}ul:where(.astro-li4k3whk) ul:where(.astro-li4k3whk) li:where(.astro-li4k3whk){margin-inline-start:var(--sl-sidebar-item-padding-inline);border-inline-start:1px solid var(--sl-color-hairline-light);padding-inline-start:var(--sl-sidebar-item-padding-inline)}.large:where(.astro-li4k3whk){font-size:var(--sl-text-lg);font-weight:600;color:var(--sl-color-white)}.top-level:where(.astro-li4k3whk)>li:where(.astro-li4k3whk)+li:where(.astro-li4k3whk){margin-top:.75rem}summary:where(.astro-li4k3whk){display:flex;align-items:center;justify-content:space-between;padding:.2em var(--sl-sidebar-item-padding-inline);line-height:1.4;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}summary:where(.astro-li4k3whk)::marker,summary:where(.astro-li4k3whk)::-webkit-details-marker{display:none}.caret:where(.astro-li4k3whk){transition:transform .2s ease-in-out;flex-shrink:0}[dir=rtl] .caret:where(.astro-li4k3whk){transform:rotate(180deg)}:where(.astro-li4k3whk)[open]>summary:where(.astro-li4k3whk) .caret:where(.astro-li4k3whk){transform:rotate(90deg)}a:where(.astro-li4k3whk){display:block;border-radius:.25rem;text-decoration:none;color:var(--sl-color-gray-2);padding:.3em var(--sl-sidebar-item-padding-inline);line-height:1.4}a:where(.astro-li4k3whk):hover,a:where(.astro-li4k3whk):focus{color:var(--sl-color-white)}:where(.astro-li4k3whk)[aria-current=page],:where(.astro-li4k3whk)[aria-current=page]:hover,:where(.astro-li4k3whk)[aria-current=page]:focus{font-weight:600;color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent)}a:where(.astro-li4k3whk)>:where(.astro-li4k3whk):not(:last-child),.group-label:where(.astro-li4k3whk)>:where(.astro-li4k3whk):not(:last-child){margin-inline-end:.25em}@media (min-width: 50rem){.top-level:where(.astro-li4k3whk)>li:where(.astro-li4k3whk)+li:where(.astro-li4k3whk){margin-top:.5rem}.large:where(.astro-li4k3whk){font-size:var(--sl-text-base)}a:where(.astro-li4k3whk){font-size:var(--sl-text-sm)}}a:where(.astro-uh7espxa){clip:rect(0,0,0,0);position:fixed;top:.75rem;inset-inline-start:.75rem}a:where(.astro-uh7espxa):focus{clip:unset;z-index:var(--sl-z-index-skiplink);display:block;padding:.5rem 1rem;text-decoration:none;color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent);box-shadow:var(--sl-shadow-lg)}.main-pane:where(.astro-6ofjwv55){isolation:isolate}@media (min-width: 72rem){.right-sidebar-container:where(.astro-6ofjwv55){order:2;position:relative;width:calc(var(--sl-sidebar-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2)}.right-sidebar:where(.astro-6ofjwv55){position:fixed;top:0;border-inline-start:1px solid var(--sl-color-gray-6);padding-top:var(--sl-nav-height);width:100%;height:100vh;overflow-y:auto;scrollbar-width:none}.main-pane:where(.astro-6ofjwv55){width:100%}[data-has-sidebar][data-has-toc] .main-pane:where(.astro-6ofjwv55){--sl-content-margin-inline: auto 0;order:1;width:calc(var(--sl-content-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2)}}.starlight-aside{padding:1rem;border-inline-start:.25rem solid var(--sl-color-asides-border);color:var(--sl-color-white)}.starlight-aside--note{--sl-color-asides-text-accent: var(--sl-color-blue-high);--sl-color-asides-border: var(--sl-color-blue);background-color:var(--sl-color-blue-low)}.starlight-aside--tip{--sl-color-asides-text-accent: var(--sl-color-purple-high);--sl-color-asides-border: var(--sl-color-purple);background-color:var(--sl-color-purple-low)}.starlight-aside--caution{--sl-color-asides-text-accent: var(--sl-color-orange-high);--sl-color-asides-border: var(--sl-color-orange);background-color:var(--sl-color-orange-low)}.starlight-aside--danger{--sl-color-asides-text-accent: var(--sl-color-red-high);--sl-color-asides-border: var(--sl-color-red);background-color:var(--sl-color-red-low)}.starlight-aside__title{display:flex;gap:.5rem;align-items:center;font-size:var(--sl-text-h5);font-weight:600;line-height:var(--sl-line-height-headings);color:var(--sl-color-asides-text-accent)}.starlight-aside__icon{font-size:1.333em;width:1em;height:1em}.starlight-aside__title+.starlight-aside__content{margin-top:.5rem}.starlight-aside__content a{color:var(--sl-color-asides-text-accent)}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{border-width:0;border-style:solid;border-color:#e4e4e7}:before,:after{--tw-content: }html,:host{font-family:Inter Variable}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:root{--sl-font: "Inter Variable";--sl-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--sl-color-white: #fff;--sl-color-gray-1: #e4e4e7;--sl-color-gray-2: #d4d4d8;--sl-color-gray-3: #a1a1aa;--sl-color-gray-4: #52525b;--sl-color-gray-5: #3f3f46;--sl-color-gray-6: #27272a;--sl-color-black: #18181b;--sl-color-accent-low: #431407;--sl-color-accent: #ea580c;--sl-color-accent-high: #fed7aa}:root[data-theme=light]{--sl-color-white: #18181b;--sl-color-gray-1: #27272a;--sl-color-gray-2: #3f3f46;--sl-color-gray-3: #71717a;--sl-color-gray-4: #a1a1aa;--sl-color-gray-5: #d4d4d8;--sl-color-gray-6: #e4e4e7;--sl-color-gray-7: #f4f4f5;--sl-color-black: #fff;--sl-color-accent-low: #fed7aa;--sl-color-accent: #ea580c;--sl-color-accent-high: #7c2d12}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.contents{display:contents}.hidden{display:none}.flex-shrink{flex-shrink:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.border{border-width:1px}.text-center{text-align:center}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width: 1024px){.lg\:grid{display:grid}.lg\:grid-cols-hero{grid-template-columns:7fr 4fr}.lg\:gap-5{gap:1.25rem}.lg\:text-left{text-align:left}}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-cyrillic-wght-normal.CMZtQduZ.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-greek-ext-wght-normal.CGAr0uHJ.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-greek-wght-normal.CaVNZxsx.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-latin-ext-wght-normal.CFHvXkgd.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/pr-preview/pr-1220/_astro/inter-latin-wght-normal.C2S99t-D.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}html:not([data-has-toc]){--sl-mobile-toc-height: 0rem}html:not([data-has-sidebar]){--sl-content-width: 67.5rem}html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height) + var(--sl-mobile-toc-height))}main:where(.astro-eqei7il3){padding-bottom:3vh}@media (min-width: 50em){:where(.astro-eqei7il3)[data-has-sidebar]{--sl-content-inline-start: var(--sl-sidebar-width)}}@media (min-width: 72em){html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height))}} diff --git a/pr-preview/pr-1220/_astro/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2 b/pr-preview/pr-1220/_astro/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2 deleted file mode 100644 index 0ba164bb6..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-cyrillic-wght-normal.CMZtQduZ.woff2 b/pr-preview/pr-1220/_astro/inter-cyrillic-wght-normal.CMZtQduZ.woff2 deleted file mode 100644 index 83a6f10f2..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-cyrillic-wght-normal.CMZtQduZ.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-greek-ext-wght-normal.CGAr0uHJ.woff2 b/pr-preview/pr-1220/_astro/inter-greek-ext-wght-normal.CGAr0uHJ.woff2 deleted file mode 100644 index cf56a71f1..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-greek-ext-wght-normal.CGAr0uHJ.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-greek-wght-normal.CaVNZxsx.woff2 b/pr-preview/pr-1220/_astro/inter-greek-wght-normal.CaVNZxsx.woff2 deleted file mode 100644 index 907b4a4d7..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-greek-wght-normal.CaVNZxsx.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-latin-ext-wght-normal.CFHvXkgd.woff2 b/pr-preview/pr-1220/_astro/inter-latin-ext-wght-normal.CFHvXkgd.woff2 deleted file mode 100644 index 887153b81..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-latin-ext-wght-normal.CFHvXkgd.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-latin-wght-normal.C2S99t-D.woff2 b/pr-preview/pr-1220/_astro/inter-latin-wght-normal.C2S99t-D.woff2 deleted file mode 100644 index 798d6d9f6..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-latin-wght-normal.C2S99t-D.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2 b/pr-preview/pr-1220/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2 deleted file mode 100644 index a40c4699c..000000000 Binary files a/pr-preview/pr-1220/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2 and /dev/null differ diff --git a/pr-preview/pr-1220/_astro/logo.D9L7aiSf.svg b/pr-preview/pr-1220/_astro/logo.D9L7aiSf.svg deleted file mode 100644 index a58214778..000000000 --- a/pr-preview/pr-1220/_astro/logo.D9L7aiSf.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/pr-preview/pr-1220/_astro/page.7qqag-5g.js b/pr-preview/pr-1220/_astro/page.7qqag-5g.js deleted file mode 100644 index 12aa5b52c..000000000 --- a/pr-preview/pr-1220/_astro/page.7qqag-5g.js +++ /dev/null @@ -1 +0,0 @@ -const d=new Set,c=new WeakSet;let f=!0,h,l=!1;function v(e){l||(l=!0,f??=!1,h??="hover",g(),p(),w(),L())}function g(){for(const e of["touchstart","mousedown"])document.body.addEventListener(e,t=>{i(t.target,"tap")&&s(t.target.href,{ignoreSlowConnection:!0})},{passive:!0})}function p(){let e;document.body.addEventListener("focusin",n=>{i(n.target,"hover")&&t(n)},{passive:!0}),document.body.addEventListener("focusout",o,{passive:!0}),u(()=>{for(const n of document.getElementsByTagName("a"))c.has(n)||i(n,"hover")&&(c.add(n),n.addEventListener("mouseenter",t,{passive:!0}),n.addEventListener("mouseleave",o,{passive:!0}))});function t(n){const r=n.target.href;e&&clearTimeout(e),e=setTimeout(()=>{s(r)},80)}function o(){e&&(clearTimeout(e),e=0)}}function w(){let e;u(()=>{for(const t of document.getElementsByTagName("a"))c.has(t)||i(t,"viewport")&&(c.add(t),e??=y(),e.observe(t))})}function y(){const e=new WeakMap;return new IntersectionObserver((t,o)=>{for(const n of t){const r=n.target,a=e.get(r);n.isIntersecting?(a&&clearTimeout(a),e.set(r,setTimeout(()=>{o.unobserve(r),e.delete(r),s(r.href)},300))):a&&(clearTimeout(a),e.delete(r))}})}function L(){u(()=>{for(const e of document.getElementsByTagName("a"))i(e,"load")&&s(e.href)})}function s(e,t){e=e.replace(/#.*/,"");const o=t?.ignoreSlowConnection??!1;if(S(e,o))if(d.add(e),document.createElement("link").relList?.supports?.("prefetch")&&t?.with!=="fetch"){const n=document.createElement("link");n.rel="prefetch",n.setAttribute("href",e),document.head.append(n)}else fetch(e,{priority:"low"})}function S(e,t){if(!navigator.onLine||!t&&m())return!1;try{const o=new URL(e,location.href);return location.origin===o.origin&&(location.pathname!==o.pathname||location.search!==o.search)&&!d.has(e)}catch{}return!1}function i(e,t){if(e?.tagName!=="A")return!1;const o=e.dataset.astroPrefetch;return o==="false"?!1:t==="tap"&&(o!=null||f)&&m()?!0:o==null&&f||o===""?t===h:o===t}function m(){if("connection"in navigator){const e=navigator.connection;return e.saveData||/2g/.test(e.effectiveType)}return!1}function u(e){e();let t=!1;document.addEventListener("astro:page-load",()=>{if(!t){t=!0;return}e()})}v(); diff --git a/pr-preview/pr-1220/_astro/ui-core.D91euXbw.js b/pr-preview/pr-1220/_astro/ui-core.D91euXbw.js deleted file mode 100644 index b516c593a..000000000 --- a/pr-preview/pr-1220/_astro/ui-core.D91euXbw.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as Js}from"./hoisted.BZ5Snbkq.js";import"./Tabs.astro_astro_type_script_index_0_lang.3nBd5krW.js";var Ws=Object.defineProperty,k=(e,t)=>{for(var u in t)Ws(e,u,{get:t[u],enumerable:!0})};function P(){}function hu(e){return e()}function Ne(){return Object.create(null)}function W(e){e.forEach(hu)}function mu(e){return typeof e=="function"}function fe(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}var oe;function ce(e,t){return oe||(oe=document.createElement("a")),oe.href=t,e===oe.href}function Zs(e){return Object.keys(e).length===0}function A(e,t){e.appendChild(t)}function T(e,t,u){e.insertBefore(t,u||null)}function v(e){e.parentNode&&e.parentNode.removeChild(e)}function ie(e,t){for(let u=0;ue.removeEventListener(t,u,r)}function g(e,t,u){u==null?e.removeAttribute(t):e.getAttribute(t)!==u&&e.setAttribute(t,u)}function Xs(e){return Array.from(e.childNodes)}function j(e,t){t=""+t,e.data!==t&&(e.data=t)}function ze(e,t){e.value=t??""}function K(e,t,u){e.classList[u?"add":"remove"](t)}var Qs=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,u=null){this.e||(this.is_svg?this.e=Ys(t.nodeName):this.e=p(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(u)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;te.indexOf(r)===-1?t.push(r):u.push(r)),u.forEach(r=>r()),$=t}var _e=new Set,J;function ae(){J={r:0,c:[],p:J}}function ne(){J.r||W(J.c),J=J.p}function z(e,t){e&&e.i&&(_e.delete(e),e.i(t))}function U(e,t,u,r){if(e&&e.o){if(_e.has(e))return;_e.add(e),J.c.push(()=>{_e.delete(e),r&&(u&&e.d(1),r())}),e.o(t)}else r&&r()}function al(e,t){U(e,1,1,()=>{t.delete(e.key)})}function nl(e,t,u,r,s,l,a,n,i,d,_,h){let m=e.length,f=l.length,c=m;const o={};for(;c--;)o[e[c].key]=c;const E=[],B=new Map,R=new Map,F=[];for(c=f;c--;){const b=h(s,l,c),D=u(b);let w=a.get(D);w?F.push(()=>w.p(b,t)):(w=d(D,b),w.c()),B.set(D,E[c]=w),D in o&&R.set(D,Math.abs(c-o[D]))}const N=new Set,q=new Set;function L(b){z(b,1),b.m(n,_),a.set(b.key,b),_=b.first,f--}for(;m&&f;){const b=E[f-1],D=e[m-1],w=b.key,x=D.key;b===D?(_=b.first,m--,f--):B.has(x)?!a.has(w)||N.has(w)?L(b):q.has(x)?m--:R.get(w)>R.get(x)?(q.add(w),L(b)):(N.add(x),m--):(i(D,a),m--)}for(;m--;){const b=e[m];B.has(b.key)||i(b,a)}for(;f;)L(E[f-1]);return W(F),E}function il(e,t,u){const r=e.$$.props[t];r!==void 0&&(e.$$.bound[r]=u,u(e.$$.ctx[r]))}function Fe(e){e&&e.c()}function Ee(e,t,u,r){const{fragment:s,after_update:l}=e.$$;s&&s.m(t,u),r||Te(()=>{const a=e.$$.on_mount.map(hu).filter(mu);e.$$.on_destroy?e.$$.on_destroy.push(...a):W(a),e.$$.on_mount=[]}),l.forEach(Te)}function de(e,t){const u=e.$$;u.fragment!==null&&(ll(u.after_update),W(u.on_destroy),u.fragment&&u.fragment.d(t),u.on_destroy=u.fragment=null,u.ctx=[])}function ol(e,t){e.$$.dirty[0]===-1&&(X.push(e),tl(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const c=f.length?f[0]:m;return d.ctx&&s(d.ctx[h],d.ctx[h]=c)&&(!d.skip_bound&&d.bound[h]&&d.bound[h](c),_&&ol(e,h)),m}):[],d.update(),_=!0,W(d.before_update),d.fragment=r?r(d.ctx):!1,t.target){if(t.hydrate){const h=Xs(t.target);d.fragment&&d.fragment.l(h),h.forEach(v)}else d.fragment&&d.fragment.c();t.intro&&z(e.$$.fragment),Ee(e,t.target,t.anchor,t.customElement),gu()}re(i)}var me=class{$destroy(){de(this,1),this.$destroy=P}$on(e,t){if(!mu(t))return P;const u=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return u.push(t),()=>{const r=u.indexOf(t);r!==-1&&u.splice(r,1)}}$set(e){this.$$set&&!Zs(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function O(e){const t=typeof e=="string"?e.charCodeAt(0):e;return t>=97&&t<=122||t>=65&&t<=90}function Q(e){const t=typeof e=="string"?e.charCodeAt(0):e;return t>=48&&t<=57}function V(e){return O(e)||Q(e)}var _l=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"],je={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"},cl={}.hasOwnProperty;function Ru(e,t={}){const u=Oe(),r=String(e),s=r.toLowerCase();let l=0;if(e==null)throw new Error("Expected string, got `"+e+"`");if(cl.call(je,s)){const n=je[s];return(t.normalize===void 0||t.normalize===null||t.normalize)&&typeof n=="string"?Ru(n):(u[_l.includes(s)?"regular":"irregular"]=r,u)}for(;O(s.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(u.language=r.slice(0,l),l<4){let n=0;for(;s.charCodeAt(l)===45&&O(s.charCodeAt(l+1))&&O(s.charCodeAt(l+2))&&O(s.charCodeAt(l+3))&&!O(s.charCodeAt(l+4));){if(n>2)return a(l,3,"Too many extended language subtags, expected at most 3 subtags");u.extendedLanguageSubtags.push(r.slice(l+1,l+4)),l+=4,n++}}for(s.charCodeAt(l)===45&&O(s.charCodeAt(l+1))&&O(s.charCodeAt(l+2))&&O(s.charCodeAt(l+3))&&O(s.charCodeAt(l+4))&&!O(s.charCodeAt(l+5))&&(u.script=r.slice(l+1,l+5),l+=5),s.charCodeAt(l)===45&&(O(s.charCodeAt(l+1))&&O(s.charCodeAt(l+2))&&!O(s.charCodeAt(l+3))?(u.region=r.slice(l+1,l+3),l+=3):Q(s.charCodeAt(l+1))&&Q(s.charCodeAt(l+2))&&Q(s.charCodeAt(l+3))&&!Q(s.charCodeAt(l+4))&&(u.region=r.slice(l+1,l+4),l+=4));s.charCodeAt(l)===45;){const n=l+1;let i=n;for(;V(s.charCodeAt(i));){if(i-n>7)return a(i,1,"Too long variant, expected at most 8 characters");i++}if(i-n>4||i-n>3&&Q(s.charCodeAt(n)))u.variants.push(r.slice(n,i)),l=i;else break}for(;s.charCodeAt(l)===45&&!(s.charCodeAt(l+1)===120||!V(s.charCodeAt(l+1))||s.charCodeAt(l+2)!==45||!V(s.charCodeAt(l+3)));){let n=l+2,i=0;for(;s.charCodeAt(n)===45&&V(s.charCodeAt(n+1))&&V(s.charCodeAt(n+2));){const d=n+1;for(n=d+2,i++;V(s.charCodeAt(n));){if(n-d>7)return a(n,2,"Too long extension, expected at most 8 characters");n++}}if(!i)return a(n,4,"Empty extension, extensions must have at least 2 characters of content");u.extensions.push({singleton:r.charAt(l+1),extensions:r.slice(l+3,n).split("-")}),l=n}}else l=0;if(l===0&&s.charCodeAt(l)===120||s.charCodeAt(l)===45&&s.charCodeAt(l+1)===120){l=l?l+2:1;let n=l;for(;s.charCodeAt(n)===45&&V(s.charCodeAt(n+1));){const i=l+1;for(n=i;V(s.charCodeAt(n));){if(n-i>7)return a(n,5,"Too long private-use area, expected at most 8 characters");n++}u.privateuse.push(r.slice(l+1,n)),l=n}}if(l!==r.length)return a(l,6,"Found superfluous content after tag");return u;function a(n,i,d){return t.warning&&t.warning(d,i,n),t.forgiving?u:Oe()}}function Oe(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function Ue(e,t,u){const r=e.slice();return r[8]=t[u][0],r[9]=t[u][1],r}function fl(e){let t,u,r,s,l,a=e[0]&&Ie();return{c(){a&&a.c(),t=M(),u=p("div"),r=p("p"),r.textContent=`${e[3](30)}`,s=M(),l=p("p"),l.textContent=`${e[3](40)}`,g(r,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),g(u,"class","pagefind-ui__result-inner svelte-j9e30")},m(n,i){a&&a.m(n,i),T(n,t,i),T(n,u,i),A(u,r),A(u,s),A(u,l)},p(n,i){n[0]?a||(a=Ie(),a.c(),a.m(t.parentNode,t)):a&&(a.d(1),a=null)},d(n){a&&a.d(n),n&&v(t),n&&v(u)}}}function El(e){let t,u,r,s,l=e[1].meta?.title+"",a,n,i,d,_=e[1].excerpt+"",h,m=e[0]&&Pe(e),f=e[2].length&&xe(e);return{c(){m&&m.c(),t=M(),u=p("div"),r=p("p"),s=p("a"),a=S(l),i=M(),d=p("p"),h=M(),f&&f.c(),g(s,"class","pagefind-ui__result-link svelte-j9e30"),g(s,"href",n=e[1].meta?.url||e[1].url),g(r,"class","pagefind-ui__result-title svelte-j9e30"),g(d,"class","pagefind-ui__result-excerpt svelte-j9e30"),g(u,"class","pagefind-ui__result-inner svelte-j9e30")},m(c,o){m&&m.m(c,o),T(c,t,o),T(c,u,o),A(u,r),A(r,s),A(s,a),A(u,i),A(u,d),d.innerHTML=_,A(u,h),f&&f.m(u,null)},p(c,o){c[0]?m?m.p(c,o):(m=Pe(c),m.c(),m.m(t.parentNode,t)):m&&(m.d(1),m=null),o&2&&l!==(l=c[1].meta?.title+"")&&j(a,l),o&2&&n!==(n=c[1].meta?.url||c[1].url)&&g(s,"href",n),o&2&&_!==(_=c[1].excerpt+"")&&(d.innerHTML=_),c[2].length?f?f.p(c,o):(f=xe(c),f.c(),f.m(u,null)):f&&(f.d(1),f=null)},d(c){m&&m.d(c),c&&v(t),c&&v(u),f&&f.d()}}}function Ie(e){let t;return{c(){t=p("div"),g(t,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(u,r){T(u,t,r)},d(u){u&&v(t)}}}function Pe(e){let t,u=e[1].meta.image&&Le(e);return{c(){t=p("div"),u&&u.c(),g(t,"class","pagefind-ui__result-thumb svelte-j9e30")},m(r,s){T(r,t,s),u&&u.m(t,null)},p(r,s){r[1].meta.image?u?u.p(r,s):(u=Le(r),u.c(),u.m(t,null)):u&&(u.d(1),u=null)},d(r){r&&v(t),u&&u.d()}}}function Le(e){let t,u,r;return{c(){t=p("img"),g(t,"class","pagefind-ui__result-image svelte-j9e30"),ce(t.src,u=e[1].meta?.image)||g(t,"src",u),g(t,"alt",r=e[1].meta?.image_alt||e[1].meta?.title)},m(s,l){T(s,t,l)},p(s,l){l&2&&!ce(t.src,u=s[1].meta?.image)&&g(t,"src",u),l&2&&r!==(r=s[1].meta?.image_alt||s[1].meta?.title)&&g(t,"alt",r)},d(s){s&&v(t)}}}function xe(e){let t,u=e[2],r=[];for(let s=0;se.toLocaleUpperCase();function hl(e,t,u){let{show_images:r=!0}=t,{process_result:s=null}=t,{result:l={data:async()=>{}}}=t;const a=["title","image","image_alt","url"];let n,i=[];const d=async h=>{u(1,n=await h.data()),u(1,n=s?.(n)??n),u(2,i=Object.entries(n.meta).filter(([m])=>!a.includes(m)))},_=(h=30)=>". ".repeat(Math.floor(10+Math.random()*h));return e.$$set=h=>{"show_images"in h&&u(0,r=h.show_images),"process_result"in h&&u(4,s=h.process_result),"result"in h&&u(5,l=h.result)},e.$$.update=()=>{e.$$.dirty&32&&d(l)},[r,n,i,_,s,l]}var ml=class extends me{constructor(e){super(),he(this,e,hl,dl,fe,{show_images:0,process_result:4,result:5})}},Cl=ml;function Ke(e,t,u){const r=e.slice();return r[11]=t[u][0],r[12]=t[u][1],r}function Ge(e,t,u){const r=e.slice();return r[15]=t[u],r}function gl(e){let t,u,r,s,l,a=e[0]&&Je();return{c(){a&&a.c(),t=M(),u=p("div"),r=p("p"),r.textContent=`${e[5](30)}`,s=M(),l=p("p"),l.textContent=`${e[5](40)}`,g(r,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),g(u,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(n,i){a&&a.m(n,i),T(n,t,i),T(n,u,i),A(u,r),A(u,s),A(u,l)},p(n,i){n[0]?a||(a=Je(),a.c(),a.m(t.parentNode,t)):a&&(a.d(1),a=null)},d(n){a&&a.d(n),n&&v(t),n&&v(u)}}}function Rl(e){let t,u,r,s,l=e[1].meta?.title+"",a,n,i,d,_,h=e[0]&&We(e),m=e[4]&&Ye(e),f=e[3],c=[];for(let E=0;Ee.toLocaleUpperCase();function Al(e,t,u){let{show_images:r=!0}=t,{process_result:s=null}=t,{result:l={data:async()=>{}}}=t;const a=["title","image","image_alt","url"];let n,i=[],d=[],_=!1;const h=(c,o)=>{if(c.length<=o)return c;const E=[...c].sort((B,R)=>R.locations.length-B.locations.length).slice(0,3).map(B=>B.url);return c.filter(B=>E.includes(B.url))},m=async c=>{u(1,n=await c.data()),u(1,n=s?.(n)??n),u(2,i=Object.entries(n.meta).filter(([o])=>!a.includes(o))),Array.isArray(n.sub_results)&&(u(4,_=n.sub_results?.[0]?.url===(n.meta?.url||n.url)),_?u(3,d=h(n.sub_results.slice(1),3)):u(3,d=h([...n.sub_results],3)))},f=(c=30)=>". ".repeat(Math.floor(10+Math.random()*c));return e.$$set=c=>{"show_images"in c&&u(0,r=c.show_images),"process_result"in c&&u(6,s=c.process_result),"result"in c&&u(7,l=c.result)},e.$$.update=()=>{e.$$.dirty&128&&m(l)},[r,n,i,d,_,f,s,l]}var pl=class extends me{constructor(e){super(),he(this,e,Al,Bl,fe,{show_images:0,process_result:6,result:7})}},vl=pl;function uu(e,t,u){const r=e.slice();return r[10]=t[u][0],r[11]=t[u][1],r[12]=t,r[13]=u,r}function tu(e,t,u){const r=e.slice();return r[14]=t[u][0],r[15]=t[u][1],r[16]=t,r[17]=u,r}function ru(e){let t,u,r=e[4]("filters_label",e[5],e[6])+"",s,l,a=Object.entries(e[1]),n=[];for(let i=0;ie.toLocaleUpperCase(),iu=e=>e.toLowerCase();function kl(e,t,u){let{available_filters:r=null}=t,{show_empty_filters:s=!0}=t,{open_filters:l=[]}=t,{translate:a=()=>""}=t,{automatic_translations:n={}}=t,{translations:i={}}=t,{selected_filters:d={}}=t,_=!1,h=!1;function m(f,c){d[`${f}:${c}`]=this.checked,u(0,d)}return e.$$set=f=>{"available_filters"in f&&u(1,r=f.available_filters),"show_empty_filters"in f&&u(2,s=f.show_empty_filters),"open_filters"in f&&u(3,l=f.open_filters),"translate"in f&&u(4,a=f.translate),"automatic_translations"in f&&u(5,n=f.automatic_translations),"translations"in f&&u(6,i=f.translations),"selected_filters"in f&&u(0,d=f.selected_filters)},e.$$.update=()=>{if(e.$$.dirty&258&&r&&!_){u(8,_=!0);let f=Object.entries(r||{});f.length===1&&Object.entries(f[0][1])?.length<=6&&u(7,h=!0)}},[d,r,s,l,a,n,i,h,_,m]}var Fl=class extends me{constructor(e){super(),he(this,e,kl,Tl,fe,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},bl=Fl,Bu={};k(Bu,{comments:()=>pu,default:()=>Ml,direction:()=>vu,strings:()=>Tu,thanks_to:()=>Au});var Au="Jan Claasen ",pu="",vu="ltr",Tu={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},Ml={thanks_to:Au,comments:pu,direction:vu,strings:Tu},ku={};k(ku,{comments:()=>bu,default:()=>Sl,direction:()=>Mu,strings:()=>Su,thanks_to:()=>Fu});var Fu="Maruf Alom ",bu="",Mu="ltr",Su={placeholder:"অনুসন্ধান করুন",clear_search:"মুছে ফেলুন",load_more:"আরো ফলাফল দেখুন",search_label:"এই ওয়েবসাইটে অনুসন্ধান করুন",filters_label:"ফিল্টার",zero_results:"[SEARCH_TERM] এর জন্য কিছু খুঁজে পাওয়া যায়নি",many_results:"[COUNT]-টি ফলাফল পাওয়া গিয়েছে [SEARCH_TERM] এর জন্য",one_result:"[COUNT]-টি ফলাফল পাওয়া গিয়েছে [SEARCH_TERM] এর জন্য",alt_search:"কোন কিছু খুঁজে পাওয়া যায়নি [SEARCH_TERM] এর জন্য. পরিবর্তে [DIFFERENT_TERM] এর জন্য দেখানো হচ্ছে",search_suggestion:"কোন কিছু খুঁজে পাওয়া যায়নি [SEARCH_TERM] এর বিষয়ে. নিন্মের বিষয়বস্তু খুঁজে দেখুন:",searching:"অনুসন্ধান চলছে [SEARCH_TERM]..."},Sl={thanks_to:Fu,comments:bu,direction:Mu,strings:Su},Du={};k(Du,{comments:()=>wu,default:()=>Dl,direction:()=>yu,strings:()=>Nu,thanks_to:()=>Hu});var Hu="Pablo Villaverde ",wu="",yu="ltr",Nu={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure mées resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques següents:",searching:"Cercant [SEARCH_TERM]..."},Dl={thanks_to:Hu,comments:wu,direction:yu,strings:Nu},zu={};k(zu,{comments:()=>Ou,default:()=>Hl,direction:()=>Uu,strings:()=>Iu,thanks_to:()=>ju});var ju="Dalibor Hon ",Ou="",Uu="ltr",Iu={placeholder:"Hledat",clear_search:"Smazat",load_more:"Načíst další výsledky",search_label:"Prohledat tuto stránku",filters_label:"Filtry",zero_results:"Žádné výsledky pro [SEARCH_TERM]",many_results:"[COUNT] výsledků pro [SEARCH_TERM]",one_result:"[COUNT] výsledek pro [SEARCH_TERM]",alt_search:"Žádné výsledky pro [SEARCH_TERM]. Zobrazují se výsledky pro [DIFFERENT_TERM]",search_suggestion:"Žádné výsledky pro [SEARCH_TERM]. Související výsledky hledání:",searching:"Hledám [SEARCH_TERM]..."},Hl={thanks_to:ju,comments:Ou,direction:Uu,strings:Iu},Pu={};k(Pu,{comments:()=>xu,default:()=>wl,direction:()=>qu,strings:()=>Vu,thanks_to:()=>Lu});var Lu="Jonas Smedegaard ",xu="",qu="ltr",Vu={placeholder:"Søg",clear_search:"Nulstil",load_more:"Indlæs flere resultater",search_label:"Søg på dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Prøv et af disse søgeord i stedet:",searching:"Søger efter [SEARCH_TERM]..."},wl={thanks_to:Lu,comments:xu,direction:qu,strings:Vu},Ku={};k(Ku,{comments:()=>Ju,default:()=>yl,direction:()=>Wu,strings:()=>Zu,thanks_to:()=>Gu});var Gu="Jan Claasen ",Ju="",Wu="ltr",Zu={placeholder:"Suche",clear_search:"Löschen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse für [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse für [SEARCH_TERM]",one_result:"[COUNT] Ergebnis für [SEARCH_TERM]",alt_search:"Keine Ergebnisse für [SEARCH_TERM]. Stattdessen werden Ergebnisse für [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse für [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche für [SEARCH_TERM]"},yl={thanks_to:Gu,comments:Ju,direction:Wu,strings:Zu},Yu={};k(Yu,{comments:()=>Qu,default:()=>Nl,direction:()=>$u,strings:()=>et,thanks_to:()=>Xu});var Xu="Liam Bigelow ",Qu="",$u="ltr",et={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},Nl={thanks_to:Xu,comments:Qu,direction:$u,strings:et},ut={};k(ut,{comments:()=>rt,default:()=>zl,direction:()=>st,strings:()=>lt,thanks_to:()=>tt});var tt="Pablo Villaverde ",rt="",st="ltr",lt={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver más resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes búsquedas:",searching:"Buscando [SEARCH_TERM]..."},zl={thanks_to:tt,comments:rt,direction:st,strings:lt},at={};k(at,{comments:()=>it,default:()=>jl,direction:()=>ot,strings:()=>_t,thanks_to:()=>nt});var nt="Valtteri Laitinen ",it="",ot="ltr",_t={placeholder:"Haku",clear_search:"Tyhjennä",load_more:"Lataa lisää tuloksia",search_label:"Hae tältä sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. Näytetään tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]..."},jl={thanks_to:nt,comments:it,direction:ot,strings:_t},ct={};k(ct,{comments:()=>Et,default:()=>Ol,direction:()=>dt,strings:()=>ht,thanks_to:()=>ft});var ft="Nicolas Friedli ",Et="",dt="ltr",ht={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de résultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de résultat pour [SEARCH_TERM]",many_results:"[COUNT] résultats pour [SEARCH_TERM]",one_result:"[COUNT] résultat pour [SEARCH_TERM]",alt_search:"Pas de résultat pour [SEARCH_TERM]. Montre les résultats pour [DIFFERENT_TERM] à la place",search_suggestion:"Pas de résultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},Ol={thanks_to:ft,comments:Et,direction:dt,strings:ht},mt={};k(mt,{comments:()=>gt,default:()=>Ul,direction:()=>Rt,strings:()=>Bt,thanks_to:()=>Ct});var Ct="Pablo Villaverde ",gt="",Rt="ltr",Bt={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver máis resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},Ul={thanks_to:Ct,comments:gt,direction:Rt,strings:Bt},At={};k(At,{comments:()=>vt,default:()=>Il,direction:()=>Tt,strings:()=>kt,thanks_to:()=>pt});var pt="Amit Yadav ",vt="",Tt="ltr",kt={placeholder:"खोजें",clear_search:"साफ करें",load_more:"और अधिक परिणाम लोड करें",search_label:"इस साइट में खोजें",filters_label:"फ़िल्टर",zero_results:"कोई परिणाम [SEARCH_TERM] के लिए नहीं मिला",many_results:"[COUNT] परिणाम [SEARCH_TERM] के लिए मिले",one_result:"[COUNT] परिणाम [SEARCH_TERM] के लिए मिला",alt_search:"[SEARCH_TERM] के लिए कोई परिणाम नहीं मिला। इसके बजाय [DIFFERENT_TERM] के लिए परिणाम दिखा रहा है",search_suggestion:"[SEARCH_TERM] के लिए कोई परिणाम नहीं मिला। निम्नलिखित खोजों में से कोई एक आज़माएं:",searching:"[SEARCH_TERM] की खोज की जा रही है..."},Il={thanks_to:pt,comments:vt,direction:Tt,strings:kt},Ft={};k(Ft,{comments:()=>Mt,default:()=>Pl,direction:()=>St,strings:()=>Dt,thanks_to:()=>bt});var bt="Diomed ",Mt="",St="ltr",Dt={placeholder:"Traži",clear_search:"Očisti",load_more:"Učitaj više rezultata",search_label:"Pretraži ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Pokušaj s jednom od ovih pretraga:",searching:"Pretražujem [SEARCH_TERM]..."},Pl={thanks_to:bt,comments:Mt,direction:St,strings:Dt},Ht={};k(Ht,{comments:()=>yt,default:()=>Ll,direction:()=>Nt,strings:()=>zt,thanks_to:()=>wt});var wt="Adam Laki ",yt="",Nt="ltr",zt={placeholder:"Keresés",clear_search:"Törlés",load_more:"További találatok betöltése",search_label:"Keresés az oldalon",filters_label:"Szűrés",zero_results:"Nincs találat a(z) [SEARCH_TERM] kifejezésre",many_results:"[COUNT] db találat a(z) [SEARCH_TERM] kifejezésre",one_result:"[COUNT] db találat a(z) [SEARCH_TERM] kifejezésre",alt_search:"Nincs találat a(z) [SEARCH_TERM] kifejezésre. Találatok mutatása inkább a(z) [DIFFERENT_TERM] kifejezésre",search_suggestion:"Nincs találat a(z) [SEARCH_TERM] kifejezésre. Próbáld meg a következő keresések egyikét:",searching:"Keresés a(z) [SEARCH_TERM] kifejezésre..."},Ll={thanks_to:wt,comments:yt,direction:Nt,strings:zt},jt={};k(jt,{comments:()=>Ut,default:()=>xl,direction:()=>It,strings:()=>Pt,thanks_to:()=>Ot});var Ot="Nixentric",Ut="",It="ltr",Pt={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]..."},xl={thanks_to:Ot,comments:Ut,direction:It,strings:Pt},Lt={};k(Lt,{comments:()=>qt,default:()=>ql,direction:()=>Vt,strings:()=>Kt,thanks_to:()=>xt});var xt="Cosette Bruhns Alonso, Andrew Janco ",qt="",Vt="ltr",Kt={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra più risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]..."},ql={thanks_to:xt,comments:qt,direction:Vt,strings:Kt},Gt={};k(Gt,{comments:()=>Wt,default:()=>Vl,direction:()=>Zt,strings:()=>Yt,thanks_to:()=>Jt});var Jt="Tate",Wt="",Zt="ltr",Yt={placeholder:"検索",clear_search:"クリア",load_more:"次を読み込む",search_label:"このサイトを検索",filters_label:"フィルタ",zero_results:"[SEARCH_TERM]の検索に一致する情報はありませんでした",many_results:"[SEARCH_TERM]の[COUNT]件の検索結果",one_result:"[SEARCH_TERM]の[COUNT]件の検索結果",alt_search:"[SEARCH_TERM]の検索に一致する情報はありませんでした。[DIFFERENT_TERM]の検索結果を表示しています",search_suggestion:"[SEARCH_TERM]の検索に一致する情報はありませんでした。次のいずれかの検索を試してください",searching:"[SEARCH_TERM]を検索しています"},Vl={thanks_to:Jt,comments:Wt,direction:Zt,strings:Yt},Xt={};k(Xt,{comments:()=>$t,default:()=>Kl,direction:()=>er,strings:()=>ur,thanks_to:()=>Qt});var Qt="Seokho Son ",$t="",er="ltr",ur={placeholder:"검색어",clear_search:"비우기",load_more:"검색 결과 더 보기",search_label:"사이트 검색",filters_label:"필터",zero_results:"[SEARCH_TERM]에 대한 결과 없음",many_results:"[SEARCH_TERM]에 대한 결과 [COUNT]건",one_result:"[SEARCH_TERM]에 대한 결과 [COUNT]건",alt_search:"[SEARCH_TERM]에 대한 결과 없음. [DIFFERENT_TERM]에 대한 결과",search_suggestion:"[SEARCH_TERM]에 대한 결과 없음. 추천 검색어: ",searching:"[SEARCH_TERM] 검색 중..."},Kl={thanks_to:Qt,comments:$t,direction:er,strings:ur},tr={};k(tr,{comments:()=>sr,default:()=>Gl,direction:()=>lr,strings:()=>ar,thanks_to:()=>rr});var rr="",sr="",lr="ltr",ar={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta ētahi otinga kē",search_label:"Rapu",filters_label:"Tātari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga kē ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakamātau ki ngā mea atu:",searching:"Rapu ki [SEARCH_TERM]..."},Gl={thanks_to:rr,comments:sr,direction:lr,strings:ar},nr={};k(nr,{comments:()=>or,default:()=>Jl,direction:()=>_r,strings:()=>cr,thanks_to:()=>ir});var ir="Paul van Brouwershaven",or="",_r="ltr",cr={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},Jl={thanks_to:ir,comments:or,direction:_r,strings:cr},fr={};k(fr,{comments:()=>dr,default:()=>Wl,direction:()=>hr,strings:()=>mr,thanks_to:()=>Er});var Er="Christopher Wingate",dr="",hr="ltr",mr={placeholder:"Søk",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"Søk på denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Prøv en av disse søkeordene i stedet:",searching:"Søker etter [SEARCH_TERM]"},Wl={thanks_to:Er,comments:dr,direction:hr,strings:mr},Cr={};k(Cr,{comments:()=>Rr,default:()=>Zl,direction:()=>Br,strings:()=>Ar,thanks_to:()=>gr});var gr="",Rr="",Br="ltr",Ar={placeholder:"Szukaj",clear_search:"Wyczyść",load_more:"Załaduj więcej",search_label:"Przeszukaj tę stronę",filters_label:"Filtry",zero_results:"Brak wyników dla [SEARCH_TERM]",many_results:"[COUNT] wyników dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",alt_search:"Brak wyników dla [SEARCH_TERM]. Wyświetlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wyników dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]..."},Zl={thanks_to:gr,comments:Rr,direction:Br,strings:Ar},pr={};k(pr,{comments:()=>Tr,default:()=>Yl,direction:()=>kr,strings:()=>Fr,thanks_to:()=>vr});var vr="Jonatah",Tr="",kr="ltr",Fr={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},Yl={thanks_to:vr,comments:Tr,direction:kr,strings:Fr},br={};k(br,{comments:()=>Sr,default:()=>Xl,direction:()=>Dr,strings:()=>Hr,thanks_to:()=>Mr});var Mr="Bogdan Mateescu ",Sr="",Dr="ltr",Hr={placeholder:"Căutare",clear_search:"Ştergeţi",load_more:"Încărcați mai multe rezultate",search_label:"Căutați în acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afișează în schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. Încercați una dintre următoarele căutări:",searching:"Se caută după: [SEARCH_TERM]..."},Xl={thanks_to:Mr,comments:Sr,direction:Dr,strings:Hr},wr={};k(wr,{comments:()=>Nr,default:()=>Ql,direction:()=>zr,strings:()=>jr,thanks_to:()=>yr});var yr="Aleksandr Gordeev",Nr="",zr="ltr",jr={placeholder:"Поиск",clear_search:"Очистить поле",load_more:"Загрузить еще",search_label:"Поиск по сайту",filters_label:"Фильтры",zero_results:"Ничего не найдено по запросу: [SEARCH_TERM]",many_results:"[COUNT] результатов по запросу: [SEARCH_TERM]",one_result:"[COUNT] результат по запросу: [SEARCH_TERM]",alt_search:"Ничего не найдено по запросу: [SEARCH_TERM]. Показаны результаты по запросу: [DIFFERENT_TERM]",search_suggestion:"Ничего не найдено по запросу: [SEARCH_TERM]. Попробуйте один из следующих вариантов",searching:"Поиск по запросу: [SEARCH_TERM]"},Ql={thanks_to:yr,comments:Nr,direction:zr,strings:jr},Or={};k(Or,{comments:()=>Ir,default:()=>$l,direction:()=>Pr,strings:()=>Lr,thanks_to:()=>Ur});var Ur="Andrija Sagicc",Ir="",Pr="ltr",Lr={placeholder:"Претрага",clear_search:"Брисање",load_more:"Приказ више резултата",search_label:"Претрага сајта",filters_label:"Филтери",zero_results:"Нема резултата за [SEARCH_TERM]",many_results:"[COUNT] резултата за [SEARCH_TERM]",one_result:"[COUNT] резултата за [SEARCH_TERM]",alt_search:"Нема резултата за [SEARCH_TERM]. Приказ додатник резултата за [DIFFERENT_TERM]",search_suggestion:"Нема резултата за [SEARCH_TERM]. Покушајте са неком од следећих претрага:",searching:"Претрага термина [SEARCH_TERM]..."},$l={thanks_to:Ur,comments:Ir,direction:Pr,strings:Lr},xr={};k(xr,{comments:()=>Vr,default:()=>ea,direction:()=>Kr,strings:()=>Gr,thanks_to:()=>qr});var qr="Montazar Al-Jaber ",Vr="",Kr="ltr",Gr={placeholder:"Sök",clear_search:"Rensa",load_more:"Visa fler träffar",search_label:"Sök på denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga träffar",many_results:"[SEARCH_TERM] gav [COUNT] träffar",one_result:"[SEARCH_TERM] gav [COUNT] träff",alt_search:"[SEARCH_TERM] gav inga träffar. Visar resultat för [DIFFERENT_TERM] istället",search_suggestion:"[SEARCH_TERM] gav inga träffar. Försök igen med en av följande sökord:",searching:"Söker efter [SEARCH_TERM]..."},ea={thanks_to:qr,comments:Vr,direction:Kr,strings:Gr},Jr={};k(Jr,{comments:()=>Zr,default:()=>ua,direction:()=>Yr,strings:()=>Xr,thanks_to:()=>Wr});var Wr="Anonymous",Zr="",Yr="ltr",Xr={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]..."},ua={thanks_to:Wr,comments:Zr,direction:Yr,strings:Xr},Qr={};k(Qr,{comments:()=>es,default:()=>ta,direction:()=>us,strings:()=>ts,thanks_to:()=>$r});var $r="",es="",us="ltr",ts={placeholder:"தேடுக",clear_search:"அழிக்குக",load_more:"மேலும் முடிவுகளைக் காட்டுக",search_label:"இந்த தளத்தில் தேடுக",filters_label:"வடிகட்டல்கள்",zero_results:"[SEARCH_TERM] க்கான முடிவுகள் இல்லை",many_results:"[SEARCH_TERM] க்கான [COUNT] முடிவுகள்",one_result:"[SEARCH_TERM] க்கான முடிவு",alt_search:"[SEARCH_TERM] இத்தேடலுக்கான முடிவுகள் இல்லை, இந்த தேடல்களுக்கான ஒத்த முடிவுகள் [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] இத் தேடலுக்கான முடிவுகள் இல்லை.இதற்கு பதிலீடான தேடல்களை தேடுக:",searching:"[SEARCH_TERM] தேடப்படுகின்றது"},ta={thanks_to:$r,comments:es,direction:us,strings:ts},rs={};k(rs,{comments:()=>ls,default:()=>ra,direction:()=>as,strings:()=>ns,thanks_to:()=>ss});var ss="Taylan Özgür Bildik",ls="",as="ltr",ns={placeholder:"Araştır",clear_search:"Temizle",load_more:"Daha fazla sonuç",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] için sonuç yok",many_results:"[SEARCH_TERM] için [COUNT] sonuç bulundu",one_result:"[SEARCH_TERM] için [COUNT] sonuç bulundu",alt_search:"[SEARCH_TERM] için sonuç yok. Bunun yerine [DIFFERENT_TERM] için sonuçlar gösteriliyor",search_suggestion:"[SEARCH_TERM] için sonuç yok. Alternatif olarak aşağıdaki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] araştırılıyor..."},ra={thanks_to:ss,comments:ls,direction:as,strings:ns},is={};k(is,{comments:()=>_s,default:()=>sa,direction:()=>cs,strings:()=>fs,thanks_to:()=>os});var os="Vladyslav Lyshenko ",_s="",cs="ltr",fs={placeholder:"Пошук",clear_search:"Очистити поле",load_more:"Завантажити ще",search_label:"Пошук по сайту",filters_label:"Фільтри",zero_results:"Нічого не знайдено за запитом: [SEARCH_TERM]",many_results:"[COUNT] результатів на запит: [SEARCH_TERM]",one_result:"[COUNT] результат за запитом: [SEARCH_TERM]",alt_search:"Нічого не знайдено на запит: [SEARCH_TERM]. Показано результати на запит: [DIFFERENT_TERM]",search_suggestion:"Нічого не знайдено на запит: [SEARCH_TERM]. Спробуйте один із таких варіантів",searching:"Пошук за запитом: [SEARCH_TERM]"},sa={thanks_to:os,comments:_s,direction:cs,strings:fs},Es={};k(Es,{comments:()=>hs,default:()=>la,direction:()=>ms,strings:()=>Cs,thanks_to:()=>ds});var ds="Long Nhat Nguyen",hs="",ms="ltr",Cs={placeholder:"Tìm kiếm",clear_search:"Xóa",load_more:"Nhiều kết quả hơn",search_label:"Tìm kiếm trong trang này",filters_label:"Bộ lọc",zero_results:"Không tìm thấy kết quả cho [SEARCH_TERM]",many_results:"[COUNT] kết quả cho [SEARCH_TERM]",one_result:"[COUNT] kết quả cho [SEARCH_TERM]",alt_search:"Không tìm thấy kết quả cho [SEARCH_TERM]. Kiểm thị kết quả thay thế với [DIFFERENT_TERM]",search_suggestion:"Không tìm thấy kết quả cho [SEARCH_TERM]. Thử một trong các tìm kiếm:",searching:"Đang tìm kiếm cho [SEARCH_TERM]..."},la={thanks_to:ds,comments:hs,direction:ms,strings:Cs},gs={};k(gs,{comments:()=>Bs,default:()=>aa,direction:()=>As,strings:()=>ps,thanks_to:()=>Rs});var Rs="Amber Song",Bs="",As="ltr",ps={placeholder:"搜索",clear_search:"清除",load_more:"加载更多结果",search_label:"站内搜索",filters_label:"筛选",zero_results:"未找到 [SEARCH_TERM] 的相关结果",many_results:"找到 [COUNT] 个 [SEARCH_TERM] 的相关结果",one_result:"找到 [COUNT] 个 [SEARCH_TERM] 的相关结果",alt_search:"未找到 [SEARCH_TERM] 的相关结果。改为显示 [DIFFERENT_TERM] 的相关结果",search_suggestion:"未找到 [SEARCH_TERM] 的相关结果。请尝试以下搜索。",searching:"正在搜索 [SEARCH_TERM]..."},aa={thanks_to:Rs,comments:Bs,direction:As,strings:ps},vs={};k(vs,{comments:()=>ks,default:()=>na,direction:()=>Fs,strings:()=>bs,thanks_to:()=>Ts});var Ts="Amber Song",ks="",Fs="ltr",bs={placeholder:"搜索",clear_search:"清除",load_more:"加載更多結果",search_label:"站內搜索",filters_label:"篩選",zero_results:"未找到 [SEARCH_TERM] 的相關結果",many_results:"找到 [COUNT] 個 [SEARCH_TERM] 的相關結果",one_result:"找到 [COUNT] 個 [SEARCH_TERM] 的相關結果",alt_search:"未找到 [SEARCH_TERM] 的相關結果。改為顯示 [DIFFERENT_TERM] 的相關結果",search_suggestion:"未找到 [SEARCH_TERM] 的相關結果。請嘗試以下搜索。",searching:"正在搜索 [SEARCH_TERM]..."},na={thanks_to:Ts,comments:ks,direction:Fs,strings:bs},Ms={};k(Ms,{comments:()=>Ds,default:()=>ia,direction:()=>Hs,strings:()=>ws,thanks_to:()=>Ss});var Ss="Amber Song",Ds="",Hs="ltr",ws={placeholder:"搜索",clear_search:"清除",load_more:"加载更多结果",search_label:"站内搜索",filters_label:"筛选",zero_results:"未找到 [SEARCH_TERM] 的相关结果",many_results:"找到 [COUNT] 个 [SEARCH_TERM] 的相关结果",one_result:"找到 [COUNT] 个 [SEARCH_TERM] 的相关结果",alt_search:"未找到 [SEARCH_TERM] 的相关结果。改为显示 [DIFFERENT_TERM] 的相关结果",search_suggestion:"未找到 [SEARCH_TERM] 的相关结果。请尝试以下搜索。",searching:"正在搜索 [SEARCH_TERM]..."},ia={thanks_to:Ss,comments:Ds,direction:Hs,strings:ws},oa=[Bu,ku,Du,zu,Pu,Ku,Yu,ut,at,ct,mt,At,Ft,Ht,jt,Lt,Gt,Xt,tr,nr,fr,Cr,pr,br,wr,Or,xr,Jr,Qr,rs,is,Es,gs,vs,Ms],_a=oa,ca=["../../translations/af.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/nl.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function ou(e,t,u){const r=e.slice();return r[51]=t[u],r}function _u(e){let t,u,r;function s(a){e[37](a)}let l={show_empty_filters:e[5],open_filters:e[6],available_filters:e[18],translate:e[20],automatic_translations:e[19],translations:e[7]};return e[0]!==void 0&&(l.selected_filters=e[0]),t=new bl({props:l}),le.push(()=>il(t,"selected_filters",s)),{c(){Fe(t.$$.fragment)},m(a,n){Ee(t,a,n),r=!0},p(a,n){const i={};n[0]&32&&(i.show_empty_filters=a[5]),n[0]&64&&(i.open_filters=a[6]),n[0]&262144&&(i.available_filters=a[18]),n[0]&524288&&(i.automatic_translations=a[19]),n[0]&128&&(i.translations=a[7]),!u&&n[0]&1&&(u=!0,i.selected_filters=a[0],rl(()=>u=!1)),t.$set(i)},i(a){r||(z(t.$$.fragment,a),r=!0)},o(a){U(t.$$.fragment,a),r=!1},d(a){de(t,a)}}}function cu(e){let t,u,r,s;const l=[Ea,fa],a=[];function n(i,d){return i[14]?0:1}return u=n(e),r=a[u]=l[u](e),{c(){t=p("div"),r.c(),g(t,"class","pagefind-ui__results-area svelte-e9gkc3")},m(i,d){T(i,t,d),a[u].m(t,null),s=!0},p(i,d){let _=u;u=n(i),u===_?a[u].p(i,d):(ae(),U(a[_],1,1,()=>{a[_]=null}),ne(),r=a[u],r?r.p(i,d):(r=a[u]=l[u](i),r.c()),z(r,1),r.m(t,null))},i(i){s||(z(r),s=!0)},o(i){U(r),s=!1},d(i){i&&v(t),a[u].d()}}}function fa(e){let t,u,r,s=[],l=new Map,a,n,i;function d(o,E){return o[13].results.length===0?ma:o[13].results.length===1?ha:da}let _=d(e),h=_(e),m=e[13].results.slice(0,e[17]);const f=o=>o[51].id;for(let o=0;oe[17]&&Eu(e);return{c(){t=p("p"),h.c(),u=M(),r=p("ol");for(let o=0;oo[17]?c?c.p(o,E):(c=Eu(o),c.c(),c.m(n.parentNode,n)):c&&(c.d(1),c=null)},i(o){if(!i){for(let E=0;E{i[m]=null}),ne(),s=i[r],s?s.p(t,h):(s=i[r]=n[r](t),s.c()),z(s,1),s.m(l.parentNode,l))},i(_){a||(z(s),a=!0)},o(_){U(s),a=!1},d(_){_&&v(u),i[r].d(_),_&&v(l)}}}function Eu(e){let t,u=e[20]("load_more",e[19],e[7])+"",r,s,l;return{c(){t=p("button"),r=S(u),g(t,"type","button"),g(t,"class","pagefind-ui__button svelte-e9gkc3")},m(a,n){T(a,t,n),A(t,r),s||(l=G(t,"click",e[22]),s=!0)},p(a,n){n[0]&524416&&u!==(u=a[20]("load_more",a[19],a[7])+"")&&j(r,u)},d(a){a&&v(t),s=!1,l()}}}function du(e){let t,u=e[20]("searching",e[19],e[7]).replace(/\[SEARCH_TERM\]/,e[16])+"",r;return{c(){t=p("p"),r=S(u),g(t,"class","pagefind-ui__message svelte-e9gkc3")},m(s,l){T(s,t,l),A(t,r)},p(s,l){l[0]&589952&&u!==(u=s[20]("searching",s[19],s[7]).replace(/\[SEARCH_TERM\]/,s[16])+"")&&j(r,u)},d(s){s&&v(t)}}}function Ra(e){let t,u,r,s,l,a,n=e[20]("clear_search",e[19],e[7])+"",i,d,_,h,m,f,c,o,E=e[12]&&_u(e),B=e[15]&&cu(e);return{c(){t=p("div"),u=p("form"),r=p("input"),l=M(),a=p("button"),i=S(n),d=M(),_=p("div"),E&&E.c(),h=M(),B&&B.c(),g(r,"class","pagefind-ui__search-input svelte-e9gkc3"),g(r,"type","text"),g(r,"placeholder",s=e[20]("placeholder",e[19],e[7])),g(r,"autocapitalize","none"),g(r,"enterkeyhint","search"),r.autofocus=e[8],g(a,"class","pagefind-ui__search-clear svelte-e9gkc3"),K(a,"pagefind-ui__suppressed",!e[9]),g(_,"class","pagefind-ui__drawer svelte-e9gkc3"),K(_,"pagefind-ui__hidden",!e[15]),g(u,"class","pagefind-ui__form svelte-e9gkc3"),g(u,"role","search"),g(u,"aria-label",m=e[20]("search_label",e[19],e[7])),g(u,"action","javascript:void(0);"),g(t,"class","pagefind-ui svelte-e9gkc3"),K(t,"pagefind-ui--reset",e[1])},m(R,F){T(R,t,F),A(t,u),A(u,r),ze(r,e[9]),e[34](r),A(u,l),A(u,a),A(a,i),e[35](a),A(u,d),A(u,_),E&&E.m(_,null),A(_,h),B&&B.m(_,null),f=!0,e[8]&&r.focus(),c||(o=[G(r,"focus",e[21]),G(r,"keydown",e[32]),G(r,"input",e[33]),G(a,"click",e[36]),G(u,"submit",Ba)],c=!0)},p(R,F){(!f||F[0]&524416&&s!==(s=R[20]("placeholder",R[19],R[7])))&&g(r,"placeholder",s),(!f||F[0]&256)&&(r.autofocus=R[8]),F[0]&512&&r.value!==R[9]&&ze(r,R[9]),(!f||F[0]&524416)&&n!==(n=R[20]("clear_search",R[19],R[7])+"")&&j(i,n),(!f||F[0]&512)&&K(a,"pagefind-ui__suppressed",!R[9]),R[12]?E?(E.p(R,F),F[0]&4096&&z(E,1)):(E=_u(R),E.c(),z(E,1),E.m(_,h)):E&&(ae(),U(E,1,1,()=>{E=null}),ne()),R[15]?B?(B.p(R,F),F[0]&32768&&z(B,1)):(B=cu(R),B.c(),z(B,1),B.m(_,null)):B&&(ae(),U(B,1,1,()=>{B=null}),ne()),(!f||F[0]&32768)&&K(_,"pagefind-ui__hidden",!R[15]),(!f||F[0]&524416&&m!==(m=R[20]("search_label",R[19],R[7])))&&g(u,"aria-label",m),(!f||F[0]&2)&&K(t,"pagefind-ui--reset",R[1])},i(R){f||(z(E),z(B),f=!0)},o(R){U(E),U(B),f=!1},d(R){R&&v(t),e[34](null),e[35](null),E&&E.d(),B&&B.d(),c=!1,W(o)}}}var Ba=e=>e.preventDefault();function Aa(e,t,u){const r={},s=ca.map(C=>C.match(/([^\/]+)\.json$/)[1]);for(let C=0;Cy[C]??H[C]??"";$s(()=>{let C=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",H=Ru(C.toLocaleLowerCase());u(19,He=r[`${H.language}-${H.script}-${H.region}`]||r[`${H.language}-${H.region}`]||r[`${H.language}`]||r.en)}),el(()=>{D?.destroy?.(),D=null});const we=async()=>{if(!Ce&&(u(12,Ce=!0),!D)){let C;try{C=await Js(()=>import(`${l}pagefind.js`),[])}catch(y){console.error(y),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` -`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}_||u(24,_=d?12:30);let H={...E||{},excerptLength:_};await C.options(H);for(const y of B){if(!y.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");const I=y.bundlePath;delete y.bundlePath,await C.mergeIndex(I,y)}D=C,zs()}},zs=async()=>{D&&(De=await D.filters(),(!ue||!Object.keys(ue).length)&&u(18,ue=De))},js=C=>{let H={};return Object.entries(C).filter(([,y])=>y).forEach(([y])=>{let[I,Z]=y.split(/:(.*)$/);H[I]=H[I]||[],H[I].push(Z)}),H};let te;const Os=async(C,H)=>{if(!C){u(15,Re=!1),te&&clearTimeout(te);return}const y=js(H),I=()=>Us(C,y);o>0&&C?(te&&clearTimeout(te),te=setTimeout(I,o),await ye(),D.preload(C,{filters:y})):I(),Is()},ye=async()=>{for(;!D;)we(),await new Promise(C=>setTimeout(C,50))},Us=async(C,H)=>{u(16,Se=C||""),typeof m=="function"&&(C=m(C)),u(14,ge=!0),u(15,Re=!0),await ye();const y=++Me,I={filters:H};q&&typeof q=="object"&&(I.sort=q);const Z=await D.search(C,I);Me===y&&(Z.filters&&Object.keys(Z.filters)?.length&&u(18,ue=Z.filters),u(13,be=Z),u(14,ge=!1),u(17,Be=a))},Is=()=>{const C=x.offsetWidth;C!=ys&&u(10,w.style.paddingRight=`${C+2}px`,w)},Ps=C=>{C?.preventDefault(),u(17,Be+=a)},Ls=C=>{C.key==="Escape"&&(u(9,b=""),w.blur()),C.key==="Enter"&&C.preventDefault()};function xs(){b=this.value,u(9,b),u(23,R)}function qs(C){le[C?"unshift":"push"](()=>{w=C,u(10,w)})}function Vs(C){le[C?"unshift":"push"](()=>{x=C,u(11,x)})}const Ks=()=>{u(9,b=""),w.blur()};function Gs(C){L=C,u(0,L)}return e.$$set=C=>{"base_path"in C&&u(25,l=C.base_path),"page_size"in C&&u(26,a=C.page_size),"reset_styles"in C&&u(1,n=C.reset_styles),"show_images"in C&&u(2,i=C.show_images),"show_sub_results"in C&&u(3,d=C.show_sub_results),"excerpt_length"in C&&u(24,_=C.excerpt_length),"process_result"in C&&u(4,h=C.process_result),"process_term"in C&&u(27,m=C.process_term),"show_empty_filters"in C&&u(5,f=C.show_empty_filters),"open_filters"in C&&u(6,c=C.open_filters),"debounce_timeout_ms"in C&&u(28,o=C.debounce_timeout_ms),"pagefind_options"in C&&u(29,E=C.pagefind_options),"merge_index"in C&&u(30,B=C.merge_index),"trigger_search_term"in C&&u(23,R=C.trigger_search_term),"translations"in C&&u(7,F=C.translations),"autofocus"in C&&u(8,N=C.autofocus),"sort"in C&&u(31,q=C.sort),"selected_filters"in C&&u(0,L=C.selected_filters)},e.$$.update=()=>{e.$$.dirty[0]&8388608&&R&&(u(9,b=R),u(23,R="")),e.$$.dirty[0]&513&&Os(b,L)},[L,n,i,d,h,f,c,F,N,b,w,x,Ce,be,ge,Re,Se,Be,ue,He,Ns,we,Ps,R,_,l,a,m,o,E,B,q,Ls,xs,qs,Vs,Ks,Gs]}var pa=class extends me{constructor(e){super(),he(this,e,Aa,Ra,fe,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,sort:31,selected_filters:0},null,[-1,-1])}},va=pa,ke;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(ke=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{ke="/pagefind/"}var Fa=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",u=e.bundlePath??ke,r=e.pageSize??5,s=e.resetStyles??!0,l=e.showImages??!0,a=e.showSubResults??!1,n=e.excerptLength??0,i=e.processResult??null,d=e.processTerm??null,_=e.showEmptyFilters??!0,h=e.openFilters??[],m=e.debounceTimeoutMs??300,f=e.mergeIndex??[],c=e.translations??[],o=e.autofocus??!1,E=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.sort;const B=t instanceof HTMLElement?t:document.querySelector(t);B?this._pfs=new va({target:B,props:{base_path:u,page_size:r,reset_styles:s,show_images:l,show_sub_results:a,excerpt_length:n,process_result:i,process_term:d,show_empty_filters:_,open_filters:h,debounce_timeout_ms:m,merge_index:f,translations:c,autofocus:o,sort:E,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[u,r]of Object.entries(e))if(Array.isArray(r))for(let s of r)t[`${u}:${s}`]=!0;else t[`${u}:${r}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};export{Fa as PagefindUI}; diff --git a/pr-preview/pr-1220/completion/index.html b/pr-preview/pr-1220/completion/index.html deleted file mode 100644 index 7f59ab8af..000000000 --- a/pr-preview/pr-1220/completion/index.html +++ /dev/null @@ -1,93 +0,0 @@ - Command-line completion | Grafana Tanka - - Skip to content

Command-line completion

Tanka supports CLI completion for bash, zsh and fish.

-
Terminal window
# Install
tk complete
-
# Uninstall
tk complete --remove
-

As tanka is its own completion handler, it needs to hook into your shell’s -configuration file (.bashrc, etc).

-

When using other shells than bash, Tanka relies on a Bash compatibility -mode. It enables this automatically when installing, but please make sure no -other completion (e.g. OhMyZsh) interferes with this, or your completion might -not work properly.
-It sometimes depends on the order the completions are being loaded, so try -putting Tanka before or after the others.

\ No newline at end of file diff --git a/pr-preview/pr-1220/config/index.html b/pr-preview/pr-1220/config/index.html deleted file mode 100644 index 477a22be1..000000000 --- a/pr-preview/pr-1220/config/index.html +++ /dev/null @@ -1,96 +0,0 @@ - Configuration Reference | Grafana Tanka - - Skip to content

Configuration Reference

Tanka’s behavior can be customized per Environment using a file called spec.json

-

File format

-
{
// Config format revision. Currently only "v1alpha1"
"apiVersion": "v1alpha1",
// Always "Environment". Reserved for future use
"kind": "Environment",
-
// Descriptive fields
"metadata": {
// Name of the Environment. Automatically set to the relative
// path from the project root
"name": "<string>",
-
// Arbitrary key:value string pairs. Not parsed by Tanka
"labels": { "<string>": "<string>" }
},
-
// Properties influencing Tanka's behavior
"spec": {
// The Kubernetes cluster to use.
// Must be the full URL, e.g. https://cluster.fqdn:6443
"apiServer": "<url>",
-
// The Kubernetes context name(s) to use.
// This field supports regular expressions and is mutually exclusive with apiServer field.
"contextNames": ["<string>"],
-
// Default namespace for objects that don't explicitely specify one
"namespace": "<string>" | default = "default",
-
// diffStrategy to use. Automatically chosen by default based on
// the availability of "kubectl diff".
// - native: uses "kubectl diff". Recommended
// - validate: uses "kubectl diff --server-side". Safest, but slower than "native"
// - subset: fallback for k8s versions below 1.13.0
"diffStrategy": "[native, validate, subset]" | default = "auto",
-
// Whether to add a "tanka.dev/environment" label to each created resource.
// Required for garbage collection ("tk prune").
"injectLabels": <boolean> | default = false
}
}
-

Jsonnet access

-

It is possible to access above data from Jsonnet:

-
local tk = import "tk";
-
{
// The cluster IP
cluster: tk.env.spec.apiServer,
// The labels of your Environment
labels: tk.env.metadata.labels,
}
\ No newline at end of file diff --git a/pr-preview/pr-1220/diff-strategy/index.html b/pr-preview/pr-1220/diff-strategy/index.html deleted file mode 100644 index b32486530..000000000 --- a/pr-preview/pr-1220/diff-strategy/index.html +++ /dev/null @@ -1,131 +0,0 @@ - Diff strategies | Grafana Tanka - - Skip to content

Diff strategies

Tanka supports two different ways of computing differences between the local -configuration and the live cluster state: Either native kubectl diff -f - -is used, which gives the best possible results, but is only possible for -clusters with -server-side diff -support (Kubernetes 1.13+).

-

When this is not available, Tanka falls back to subset mode.

-

You can specify the diff-strategy to use on the command line as well:

-
Terminal window
# native
tk diff --diff-strategy=native .
-
# validate: Like native but with a server-side validation
tk diff --diff-strategy=validate .
-
# server-side
tk diff --diff-strategy=server .
-
# subset
tk diff --diff-strategy=subset .
-

Native

-

The native diff mode is recommended, because it uses kubectl diff underneath, -which sends the objects to the Kubernetes API server and computes the -differences over there.

-

This has the huge benefit that all possible changes by webhooks and other -internal components of Kubernetes can be encountered as well.

-

However, this is a fairly new feature and only available on Kubernetes 1.13 or -later. Only the API server (master nodes) needs to have that -version, worker nodes do not matter.

-

There is a -known issue -with kubectl diff, which affects ports configured to use both TCP and UDP.

-

Server-side diffs

-

There are two additional modes which extend native: validate and server. -While all kubectl diff commands are sent to the API server, these two -methods take advantage of an additional server-side diff mode (which uses the -kubectl diff --server-side flag, complementing the -server-side apply mode).

-

Since a plain server diff often produces cruft, and wouldn’t be representative -of a client-side apply, the validate method allows the server-side diff to -check that all models are valid server-side, but still displays the native -diff output to the user.

-

Subset

-

If native diffing is not supported by your cluster, Tanka provides subset diff -as a fallback method.

-

Subset diff only compares fields present in the local configuration and -ignores all other fields. When you remove a field locally, you will see no -differences.

-

This is required, because Kubernetes adds dynamic fields to the state during -runtime, which we cannot know of on the client side. To produce a somewhat -usable output, we can effectively only compare what we already know about.

-

If this is a problem for you, consider switching to native mode.

-

External diff utilities

-

You can use external diff utilities by setting the environment variable -KUBECTL_EXTERNAL_DIFF. If you want to use a GUI or interactive diff utility -you must also set KUBECTL_INTERACTIVE_DIFF=1 to prevent Tanka from capturing -stdout.

\ No newline at end of file diff --git a/pr-preview/pr-1220/directory-structure/index.html b/pr-preview/pr-1220/directory-structure/index.html deleted file mode 100644 index 0e9db84dc..000000000 --- a/pr-preview/pr-1220/directory-structure/index.html +++ /dev/null @@ -1,159 +0,0 @@ - Directory structure | Grafana Tanka - - Skip to content

Directory structure

Tanka uses the following directories and special files:

-
  • Directory. the project (<rootDir>) -
    • Directoryenvironments -
      • Directorydefault default environment -
        • main.jsonnet main file
        • spec.json environment’s config
    • jsonnetfile.json direct dependencies
    • jsonnetfile.lock.json all dependencies with exact versions
    • Directorylib libraries for this project only -
      • k.libsonnet alias file for vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet
    • Directoryvendor external libraries installed using jb -
      • Directorygithub.com -
        • Directorygrafana -
          • Directoryjsonnet-libs -
            • Directoryksonnet-util Grafana Labs’ usability extensions to k.libsonnet -
              • kausal.libsonnet
        • Directoryjsonnet-libs -
          • Directoryk8s-libsonnet -
            • Directory1.21 kubernetes library -
              • main.libsonnet
      • Directory1.21/ -> github.com/jsonnet-libs/k8s-libsonnet/1.21
      • Directoryksonnet-util/ -> github.com/grafana/jsonnet-libs/ksonnet-util
-

Environments

-

Tanka organizes configuration in environments. For the rationale behind this, -see the section in the tutorial.

-

An environment consists of at least two files:

-

spec.json

-

This file configures environment properties such as cluster connection -(spec.apiServer), default namespace (spec.namespace), etc.

-

For the full set of options, see the Golang source -code.

-

main.jsonnet

-

Like other programming languages, Jsonnet needs an entrypoint into the -evaluation, something to begin with. main.jsonnet is exactly this: The very -first file being evaluated, importing or directly specifying everything required -for this specific environment.

-

Root and Base

-

When talking about directories, Tanka uses the following terms:

- - - - - - - - - - - - - - - - - - - - -
TermDescriptionIdentifier file
rootDirThe root of your projectjsonnetfile.json or tkrc.yaml
baseDirThe directory of the current environmentmain.jsonnet
-

Regardless what subdirectory of the project you are in, Tanka will always be -able to identify both directories, by searching for the identifier files in the -parent directories.
-Tanka needs these for correctly setting up the import paths.

-

This is similar to how git always works, by looking for the .git directory.

-

Libraries

-

Tanka relies heavily on code-reuse, so libraries are a natural thing. Roughly -spoken, they can be imported from two paths:

-
    -
  • /lib: Project local libraries
  • -
  • /vendor External libraries
  • -
-

For more details consider the import paths.

-

jsonnetfile.json and the lock

-

jb records all external packages installed in a file called -jsonnetfile.json. This file is the source of truth about what should be -included in vendor/. However, it should only include what is really directly -required, all recursive dependencies will be handled just fine.

-

jsonnetfile.lock.json is generated on every run of jsonnet-bundler, including -a list of packages that must be included in vendor/, along with the exact -version and a sha256 hash of the package contents.

-

Both files should be checked into source control: The jsonnetfile.json -specifies what you need and the jsonnetfile.lock.json is important to make -sure that subsequent jb install invocations always do the exact same thing.

-
\ No newline at end of file diff --git a/pr-preview/pr-1220/env-vars/index.html b/pr-preview/pr-1220/env-vars/index.html deleted file mode 100644 index cccde7c84..000000000 --- a/pr-preview/pr-1220/env-vars/index.html +++ /dev/null @@ -1,103 +0,0 @@ - Environment variables | Grafana Tanka - - Skip to content

Environment variables

TANKA_JB_PATH

-

Description: Path to the jb tool executable
-Default: $PATH/jb

-

TANKA_KUBECTL_PATH

-

Description: Path to the kubectl tool executable
-Default: $PATH/kubectl

-

TANKA_KUBECTL_TRACE

-

Description: Print all calls to kubectl
-Default: false

-

TANKA_HELM_PATH

-

Description: Path to the helm executable
-Default: $PATH/helm

-

TANKA_KUSTOMIZE_PATH

-

Description: Path to the kustomize executable
-Default: $PATH/kustomize

-

TANKA_PAGER

-

Description: Pager to use when displaying output. Set to an empty string to disable paging. -Default: $PAGER

-

PAGER

-

Description: Pager to use when displaying output. Only used if TANKA_PAGER is not set. Set to an empty string to disable paging. -Default: less --RAW-CONTROL-CHARS --quit-if-one-screen --no-init

\ No newline at end of file diff --git a/pr-preview/pr-1220/exporting/index.html b/pr-preview/pr-1220/exporting/index.html deleted file mode 100644 index 1949a9df9..000000000 --- a/pr-preview/pr-1220/exporting/index.html +++ /dev/null @@ -1,156 +0,0 @@ - Exporting as YAML | Grafana Tanka - - Skip to content

Exporting as YAML

Tanka provides you with a day-to-day workflow for working with Kubernetes clusters:

-
    -
  • tk show for quickly checking the YAML representation looks good
  • -
  • tk diff to ensure your changes will behave like they should
  • -
  • tk apply makes it happen
  • -
-

However sometimes it can be required to integrate with other tooling that does -only support .yaml files.

-

For that case, tk export can be used:

-
Terminal window
# <outputDir> <environment>
tk export promtail/ environments/promtail
- -

This will create a separate .yaml file for each Kubernetes resource included in your Jsonnet.

-

Filenames

-

Tanka by default uses the following pattern:

-
Terminal window
${apiVersion}.${kind}-${metadata.name}.yaml
-
# examples:
apps-v1.Deployment-distributor.yaml
v1.ConfigMap-loki.yaml
v1.Service-ingester.yaml
-

If that does not fit your need, you can provide your own pattern using the --format flag:

-
Terminal window
tk export promtail environments/promtail --format='{{.metadata.labels.app}}-{{.metadata.name}}-{{.kind}}'
-
-

The syntax is Go text/template. See https://pkg.go.dev/text/template -for reference.

-
-

This would include the label named app, the name and kind of the resource:

-
loki-distributor-Deployment
loki-loki-ConfigMap
loki-ingester-Service
-

You can optionally use the template function lower for lower-casing fields, e.g. in the above example

-
Terminal window
... --format='{{.metadata.labels.app}}-{{.metadata.name}}-{{.kind | lower}}'
-

would yield

-
loki-distributor-deployment
-

etc.

-

You can also use a different file extension by providing --extension='yml', for example.

-

Multiple environments

-

Tanka can also export multiple inline environments, as showcased in Use case: consistent inline -environments. This follows the same -principles as describe before with the addition that you can also refer to Environment specific data through the env -keyword.

-

For example an export might refer to data from the Environment spec:

-
Terminal window
# Format based on environment {{env.<...>}}
tk export exportDir environments/dev/ \
--format '{{env.metadata.labels.cluster}}/{{env.spec.namespace}}//{{.kind}}-{{.metadata.name}}'
-

Even more advanced use cases allow you to export multiple environments in a single execution:

-
Terminal window
# Export multiple environments
tk export exportDir environments/dev/ environments/qa/
# Recursive export
tk export exportDir environments/ --recursive
# Recursive export with labelSelector
tk export exportDir environments/ -r -l team=infra
-

Performance features

-

When exporting a large amount of environments, jsonnet evaluation can become a bottleneck. To speed up the process, Tanka provides a few optional features.

-

Partial export (in a GitOps context)

-

Given multiple environments, one may want to only export the environments that were modified since the last export. This is enabled by passing both the --merge-strategy=replace-envs flags.

-

When these flags are passed, Tanka will:

-
    -
  1. Delete the manifests that were previously exported by the environments that are being exported. This is done by looking at the manifest.json file that is generated by Tanka when exporting. The related entries are also removed from the manifest.json file.
  2. -
  3. Generate the manifests for the targeted environments into the output directory.
  4. -
  5. Add in the new manifests entries into the manifest.json file and re-export it.
  6. -
-

Finding out which environments to export

-

Tanka provides the tk tool importers command to figure out which main.jsonnet need to be re-exported based on what files were modified in a workspace.

-

If, for example, the lib/my-lib/main.libsonnet file was modified, you could run the command like this to find which files to export:

-
Terminal window
# Find out which envs to re-export
tk tool importers lib/my-lib/main.libsonnet
> my-repo-path/jsonnet/environments/my-env/main.jsonnet
-
# Re-export the envs
tk export myoutputdir my-repo-path/jsonnet/environments/my-env/main.jsonnet --merge-strategy=replace-envs
-

Note that deleted environments need special consideration when doing this. -The tk tool importers utility only works with existing files so deleting an environment will result in stale manifest.json entries and moving an environment will result in manifest conflicts. -In order to correctly handle deleted environments, they need to be passed to the export command:

-
Terminal window
tk export myoutputdir my-repo-path/jsonnet/environments/my-new-env-path/main.jsonnet --merge-strategy=replace-envs \
--merge-deleted-envs my-repo-path/jsonnet/environments/my-old-env-path/main.jsonnet \
--merge-deleted-envs my-repo-path/jsonnet/environments/other-deleted-env-path/main.jsonnet
-

Using a memory ballast

-

Read this blog post for more information about memory ballasts.

-

For large environments that load lots of data into memory on evaluation, a memory ballast can dramatically improve performance. This feature is exposed through the --mem-ballast-size-bytes flag on the export command.

-

Anecdotally (Grafana Labs), environments that took around a minute to load were able to load in around 45 secs with a ballast of 5GB (--mem-ballast-size-bytes=5368709120). Decreasing the ballast size resulted in negative impact on performance, and increasing it more did not result in any noticeable impact.

-

Caching

-

Tanka can also cache the results of the export. This is useful if you often export the same files and want to avoid recomputing them. The cache key is calculated from the main file and all of its transitive imports, so any change to any file possibly used in an environment will invalidate the cache.

-

This is configured by two flags:

-
    -
  • --cache-path: The local filesystem path where the cache will be stored. The cache is a flat directory of json files (one per environment).
  • -
  • --cache-envs: If exporting multiple environments, this flag can be used to specify, with regexes, which environments to cache. If not specified, all environments are cached.
  • -
-

Notes:

-
    -
  • Using the cache might be slower than evaluating jsonnet directy. It is only recommended for environments that are very CPU intensive to evaluate.
  • -
  • To use object storage, you can point the --cache-path to a FUSE mount, such as s3fs
  • -
\ No newline at end of file diff --git a/pr-preview/pr-1220/faq/index.html b/pr-preview/pr-1220/faq/index.html deleted file mode 100644 index 318e02239..000000000 --- a/pr-preview/pr-1220/faq/index.html +++ /dev/null @@ -1,119 +0,0 @@ - Frequently asked questions | Grafana Tanka - - Skip to content

Frequently asked questions

What is Jsonnet?

-

Jsonnet is a data templating language, originally created by Google.

-

It is a superset of JSON, which adds common structures from full programming -languages to data modeling. Because it being a superset of JSON and ultimately -always compiling to JSON, it is guaranteed that the output will be valid JSON -(or YAML).

-

By allowing functions and imports, rich abstraction is possible, even across -project boundaries.

-

For more, refer to the official documentation: https://jsonnet.org/

-

How is this different from ksonnet?

-

Tanka aims to be a fully compatible, drop-in replacement for the main workflow -of ksonnet (show, diff, apply).

-

In general, both tools are very similar when it comes to how they handle Jsonnet -and apply to a Kubernetes cluster.

-

However, ksonnet included a rich code generator for establishing a CLI based -workflow for editing Kubernetes objects. It also used to manage dependencies -itself and had a lot of concepts for different levels of abstractions. When -designing Tanka, we felt these add more complexity for the user than they -provide additional value. To keep Tanka as minimal as possible, these are not -available and are not likely to be ever added.

-

What about kubecfg ?

-

Tanka development has started at the time when kubecfg was a part of -already-deprecated ksonnet project. Although these projects are similar, Tanka -aims to provide continuity for ksonnet users, whereas kubecfg is (according -to the project’s README.md) -really just a thin Kubernetes-specific wrapper around jsonnet evaluation.

-

Why not Helm?

-

Helm relies heavily on string templating .yaml files. We feel this is the -wrong way to approach the absence of abstractions inside of yaml, because the -templating part of the application has no idea of the structure and syntax of -yaml.

-

This makes debugging very hard. Furthermore, helm is not able to provide an -adequate solution for edge cases. If I wanted to set some parameters that are -not already implemented by the Chart, I have no choice but to modify the Chart -first.

-

Jsonnet on the other hand got you covered by supporting mixing (patching, -deep-merging) objects on top of the libraries output if required.

\ No newline at end of file diff --git a/pr-preview/pr-1220/favicon.svg b/pr-preview/pr-1220/favicon.svg deleted file mode 100644 index 1997f7a0f..000000000 --- a/pr-preview/pr-1220/favicon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/pr-preview/pr-1220/formatting/index.html b/pr-preview/pr-1220/formatting/index.html deleted file mode 100644 index 7677b9d93..000000000 --- a/pr-preview/pr-1220/formatting/index.html +++ /dev/null @@ -1,89 +0,0 @@ - Formatting | Grafana Tanka - - Skip to content

Formatting

File Formatting

-

Tanka supports formatting for all jsonnet and libsonnet files using the tk fmt command.

-

By default, the command excludes all vendor directories.

-
Terminal window
# Run for current and child directories. Run this in the root of the project to format all your files.
tk fmt .
-
# Format a single file (myFile.jsonnet)
tk fmt myFile.jsonnet
-
# Use the `-t` tag to test (Dry run).
tk fmt -t myFile.jsonnet
-
# Format using verbose mode.
tk fmt -v .
\ No newline at end of file diff --git a/pr-preview/pr-1220/garbage-collection/index.html b/pr-preview/pr-1220/garbage-collection/index.html deleted file mode 100644 index bc861e515..000000000 --- a/pr-preview/pr-1220/garbage-collection/index.html +++ /dev/null @@ -1,96 +0,0 @@ - Garbage collection | Grafana Tanka - - Skip to content

Garbage collection

Tanka can automatically delete resources from your cluster once you remove them -from Jsonnet.

- -

To accomplish this, it appends the tanka.dev/environment: <hash> label to each created -resource. This is used to identify those which are missing from the local state in the -future.

- -

Because the label causes a diff for every single object in your cluster and -not everybody wants this, it needs to be explicitly enabled. To do so, add the -following field to your spec.json:

-
{
"spec": {
"injectLabels": true,
}
}
-

Once added, run a tk apply, make sure the label is actually added and confirm -by typing yes.

-

From now on, you can use tk prune to remove old resources from your cluster.

\ No newline at end of file diff --git a/pr-preview/pr-1220/helm/index.html b/pr-preview/pr-1220/helm/index.html deleted file mode 100644 index f1ce5a81b..000000000 --- a/pr-preview/pr-1220/helm/index.html +++ /dev/null @@ -1,197 +0,0 @@ - Helm support | Grafana Tanka - - Skip to content

Helm support

The Helm project is the biggest ecosystem of high quality, -well maintained application definitions for Kubernetes.

-

Even though Grafana Tanka uses the Jsonnet language for -resource definition, you can still consume Helm resources, as described below.

-

Consuming Helm Charts from Jsonnet

-

Helm support is provided using the -github.com/grafana/jsonnet-libs/tanka-util -library. Install it with:

-
Terminal window
jb install github.com/grafana/jsonnet-libs/tanka-util
-

The following example shows how to extract the individual resources of the -grafana Helm Chart:

-
local tanka = import "github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet";
local helm = tanka.helm.new(std.thisFile);
-
{
grafana: helm.template("grafana", "./charts/grafana", {
namespace: "monitoring",
values: {
persistence: { enabled: true }
}
})
}
-

The Chart itself is required to be vendored at a relative -path, in this case ./charts/grafana.

- -

Once invoked, the $.grafana key holds the individual resources of Helm Chart as -a regular Jsonnet object that looks roughly like so:

-
{
cluster_role_binding_grafana_clusterrolebinding: {/* ... */},
cluster_role_grafana_clusterrole: {/* ... */},
config_map_grafana: {/* ... */},
config_map_grafana_test: {/* ... */},
deployment_grafana: {/* ... */},
// ...
}
-

Above can be manipulated in the same way as any other Jsonnet data.

-

Under the hood, this feature invokes the -helm template CLI command. -The following options control how the command is invoked:

-
...
-
{
grafana: helm.template("grafana", "./charts/grafana", {
namespace: "monitoring",
values: {
persistence: { enabled: true }
},
// Equivalent to: --api-versions v1 --api-versions apps/v1
apiVersions: ['v1', 'apps/v1']
// Equivalent to: --kube-version v1.20.0
kubeVersion: 'v1.20.0'
// Equivalent to: --no-hooks
noHooks: true,
}
-

Tanka will install Custom Resource Definitions (CRDs) automatically, if the -Helm Chart requires them and ships them in crds/. This is equivalent to helm template --include-crds. This can be disabled using includeCrds: false:

-
{
grafana: helm.template("grafana", "./charts/grafana", {
includeCrds: false
})
}
-

Vendoring Helm Charts

-

Tanka, like Jsonnet, is hermetic. It always yields the same -resources when the project is -strictly self-contained.

-

Helm however keeps Charts and repository configuration somewhere around -~/.config/helm, which violates above requirement.

-

To comply with this requirement, Tanka expects Helm Charts to be found inside the -bounds of a project. This means, you MUST put your Charts somewhere next to -the file that calls helm.template(), so that it can be referred to using a -relative path.

-

Vendor Location

-

Where to actually put them inside the project is up to you, but keep in mind you -need to refer to them using relative paths.

-

We recommend always writing libraries that wrap the actual Helm Chart, so the -consumer does not need to be aware of it. Whether you put these into your local lib/ directory or -publish and vendor them into the vendor/ directory is up to you.

-

A library usually looks like this:

-
  • Directory/ -
    • jsonnetfile.json
    • main.libsonnet
-

When adopting Helm inside it, we recommend vendoring at the top level, as such:

-
  • Directory/ -
    • jsonnetfile.json
    • main.libsonnet
  • Directorycharts
    • <someChart>
-

This way, you can refer to the charts as ./charts/<someChart> from inside -main.libsonnet. By keeping the chart as close to the consumer as possible, the -library is kept portable.

-

Charttool

-

Helm does not make vendoring incredibly easy by itself. helm pull provides the -required plumbing, but it does not record its actions in a reproducible manner.

-

Therefore, Tanka ships a special utility at tk tool charts, which automates -helm pull:

-
Terminal window
# Create a chartfile.yaml in the current directory, e.g. in lib/myLibrary
tk tool charts init
-
# Install the MySQL chart at version 1.6.7 from the stable repository
tk tool charts add stable/mysql@1.6.7
-

Adding charts

-

To add a chart, use the following:

-
Terminal window
tk tool charts add <repo>/<name>@<version>
-

This will also call tk tool charts vendor, so that the charts/ directory is updated.

-

Adding repositories

-

By default, the stable repository is automatically set up for you. If you wish -to add another repository, you can use the add-repo command:

-
Terminal window
# Add the official Grafana repository
tk tool charts add-repo grafana https://grafana.github.io/helm-charts
-

Another way is to modify chartfile.yaml directly:

-
chartfile.yaml
version: 1
repositories:
- name: stable
url: https://charts.helm.sh/stable
- name: grafana
url: https://grafana.github.io/helm-charts
-

Installing multiple versions of the same chart

-

If you wish to install multiple versions of the same chart, you can write them to a specific directory.
-You can do so with a :<directory> suffix in the add command, or by modifying the chartfile manually.

-
Terminal window
tk tool charts add stable/mysql@1.6.7:1.6.7
tk tool charts add stable/mysql@1.6.8:1.6.8
-

The resulting chartfile will look like this:

-
version: 1
directory: charts
repositories:
- name: stable
url: https://charts.helm.sh/stable
requires:
- chart: stable/mysql
directory: 1.6.7
version: 1.6.7
- chart: stable/mysql
directory: 1.6.8
version: 1.6.8
-

Install charts from chartfile

-

To install charts from an existing chartfile, use the following:

-
Terminal window
tk tool charts vendor
-

Optionally, you can also pass the --prune flag to remove vendored charts that are no longer in the chartfile.

-

OCI Registry Support

-

Tanka supports pulling charts from OCI registries. To use one, the chart name must be split into two parts: the registry and the chart name.

-

As example, if you wanted to pull the oci://public.ecr.aws/karpenter/karpenter:v0.27.3 image, your chartfile would look like this:

-
version: 1
directory: charts
repositories:
- name: karpenter
url: oci://public.ecr.aws/karpenter
requires:
- chart: karpenter/karpenter
directory: v0.27.3
version: v0.27.3
-

Registry login is not supported yet.

-

Troubleshooting

-

Helm executable missing

-

Helm support in Tanka requires the helm binary installed on your system and -available on the $PATH. If Helm is not installed, you will see this error message:

-
evaluating jsonnet: RUNTIME ERROR: Expanding Helm Chart: exec: "helm": executable file not found in $PATH
-

To solve this, you need to install Helm. -If you cannot install it system-wide, you can point Tanka at your executable -using TANKA_HELM_PATH

-

opts.calledFrom unset

-

This occurs, when Tanka was not told where it helm.template() was invoked -from. This most likely means you didn’t call new(std.thisFile) when importing tanka-util:

-
local tanka = import "github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet";
local helm = tanka.helm.new(std.thisFile);
↑ This is important
-

Failed to find Chart

-
helmTemplate: Failed to find a Chart at 'stable/grafana': No such file or directory.
helmTemplate: Failed to find a Chart at '/home/user/stuff/tanka/environments/default/grafana': No such file or directory.
-

Tanka failed to locate your Helm chart on the filesystem. It looked at the -relative path you provided in helm.template(), starting from the directory of -the file you called helm.template() from.

-

Please check there is actually a valid Helm chart at this place. Referring to -charts as <repo>/<name> is disallowed by design.

-

Two resources share the same name

-

To make customization easier, helm.template() returns the resources not as the -list it receives from Helm, but instead converts this into an object.

-

For the indexing key it uses kind_name by default. In some rare cases, this -might not be enough to distinguish between two resources, namely when the same -resource exists in two namespaces.

-

To handle this, pass a custom name format, e.g. to also include the namespace:

-
custom: helm.template('foo', './charts/foo', {
nameFormat: '{{ print .metadata.namespace "_" .kind "_" .metadata.name | snakecase }}'
})
-

The literal default format used is {{ print .kind "_" .metadata.name | snakecase }}

\ No newline at end of file diff --git a/pr-preview/pr-1220/index.html b/pr-preview/pr-1220/index.html deleted file mode 100644 index 6687cb5eb..000000000 --- a/pr-preview/pr-1220/index.html +++ /dev/null @@ -1,89 +0,0 @@ - Grafana Tanka - - Skip to content
main.libsonnet
local k = import "k.libsonnet";
-
{
grafana: k.apps.v1.deployment.new(
name="grafana",
replicas=1,
containers=[k.core.v1.container.new(
name="grafana",
image="grafana/grafana",
)]
)
}
-Kubernetes Deployment. That's all it takes. -

Define. Reuse. Override.

Grafana Tanka is the robust configuration utility for your Kubernetes cluster, powered by the unique Jsonnet language

Why Grafana Tanka?

-

Clean

The Jsonnet language expresses your Kubernetes apps more clearly than YAML -ever did

Reusable

Build application libraries, import them anywhere and even share them on -GitHub!

Concise

Using the Kubernetes library, you will never see boilerplate again!

Reliable

Stop guessing and use powerful diff to know the exact changes in advance

Production ready

Tanka deploys Grafana Cloud and many more production setups

Open Source

Just like the popular Grafana and Loki projects, Tanka is fully open-source

\ No newline at end of file diff --git a/pr-preview/pr-1220/inline-environments/index.html b/pr-preview/pr-1220/inline-environments/index.html deleted file mode 100644 index 4b6cc3dd6..000000000 --- a/pr-preview/pr-1220/inline-environments/index.html +++ /dev/null @@ -1,140 +0,0 @@ - Inline environments | Grafana Tanka - - Skip to content

Inline environments

Inline environments is the practice of defining the environment’s config inline -for evaluation at runtime as opposed to configuring it statically in -spec.json.

-

The general take away is:

-
    -
  • spec.json will no longer be used
  • -
  • main.jsonnet is expected to render a tanka.dev/Environment object
  • -
  • this object is expected to hold Kubernetes objects at .data
  • -
-

Converting to an inline environment

-

Converting a traditional spec.json environment into an inline environment is quite -straight forward. Based on the example from Using Jsonnet:

-

The directory structure:

-
  • Directoryenvironments -
    • Directorydefault # default environment -
      • main.jsonnet # main file
      • spec.json # environment’s config
    • jsonnetfile.json
    • Directorylib/ # libraries
    • Directoryvendor/ # external libraries
-

The original files look like this:

-
main.jsonnet
{
some_deployment: {/* ... */ },
some_service: {/* ... */ },
}
-
spec.json
{
"apiVersion": "tanka.dev/v1alpha1",
"kind": "Environment",
"metadata": {
"name": "default"
},
"spec": {
"apiServer": "https://127.0.0.1:6443",
"namespace": "monitoring"
}
}
-

Converting is as simple as bringing in the spec.json into main.jsonnet and -moving the original main.jsonnet scope into the data: element.

-
main.jsonnet
{
apiVersion: 'tanka.dev/v1alpha1',
kind: 'Environment',
metadata: {
name: 'default',
},
spec: {
apiServer: 'https://127.0.0.1:6443',
namespace: 'monitoring',
},
data: { // original main.jsonnet data
some_deployment: {/* ... */ },
some_service: {/* ... */ },
},
}
-

Use case: variable apiServer

-

Even though the apiServer directive is originally meant to prevent that the -manifests don’t get accidentally applied to the wrong Kubernetes cluster, there -is a valid use case for making the apiServer variable: Local test clusters.

-

Instead of modifying spec.json each time, with inline environments it is -possible to leverage powerful jsonnet concepts, for example with top level -arguments:

-
environments/minikube-test-setup/main.jsonnet
function(apiServer) {
apiVersion: 'tanka.dev/v1alpha1',
kind: 'Environment',
metadata: {
name: 'minikube-test-setup',
},
spec: {
apiServer: apiServer,
namespace: 'monitoring',
},
data: { /* ... */ },
}
-

Applying this to a local Kubernetes cluster can be done like this:

-
Terminal window
tk apply --tla-str apiServer=https://127.0.0.1:4758 environments/minikube-test-setup
-

Similarly this can be used to configure any part of the Environment object, like -namespace:, metadata.labels, …

-

Use case: consistent inline environments

-

It is possible to define multiple inline environments in a single jsonnet. This -enables an operator to generate consistent Tanka environments for multiple -Kubernetes clusters.

-

We can define a Tanka environment once and then repeat that for a set of -clusters as shown in this example:

-
environments/monitoring-stack/main.jsonnet
{
environment(cluster):: {
apiVersion: 'tanka.dev/v1alpha1',
kind: 'Environment',
metadata: {
name: 'environment/%s' % cluster.name,
},
spec: {
apiServer: cluster.apiServer,
namespace: 'monitoring',
},
data: { /* ... */ },
},
-
clusters:: [
{ name: 'us-central1', apiServer: 'https://127.0.0.1:6433' },
{ name: 'europe-west2', apiServer: 'https://127.0.0.2:6433' },
],
-
envs: {
[cluster.name]: $.environment(cluster)
for cluster in $.clusters
},
}
-

In the workflow you now have to use --name to select the environment you want -to deploy:

-
Terminal window
tk apply --name environment/us-central1 environments/monitoring-stack/main.jsonnet
tk diff --name environment/europe-west2 environments/monitoring-stack/main.jsonnet
-
# Partial matches also work (if they match a single environment)
tk apply --name us-central1 environments/monitoring-stack/main.jsonnet
tk diff --name west2 environments/monitoring-stack/main.jsonnet
-

For export, it is possible to use the same --name selector or you can do a -recursive export while using the --format option:

-
Terminal window
tk export outputDir/ environments/monitoring-stack/main.jsonnet --recursive \
--format '{{env.metadata.name}}/{{.metadata.namespace}}/{{.kind}}-{{.metadata.name}}'
-

Caveats

-

import "tk"

-

Inline environments cannot use import "tk" anymore as -this information was populated before jsonnet evaluation by the existence of -spec.json.

-

tk env

-

The different tk env subcommands are heavily based on the spec.json -approach. tk env list will continue to work as expected, tk env (add|remove|set) will only work for spec.json based environments.

\ No newline at end of file diff --git a/pr-preview/pr-1220/install/index.html b/pr-preview/pr-1220/install/index.html deleted file mode 100644 index 887ed08a4..000000000 --- a/pr-preview/pr-1220/install/index.html +++ /dev/null @@ -1,133 +0,0 @@ - Installation | Grafana Tanka - - Skip to content

Installation

Tanka is distributed as a single binary called tk. It already includes the Jsonnet compiler, but requires some tools to be available:

-
    -
  • kubectl: Tanka -uses kubectl to communicate to your cluster. This means kubectl must be -available somewhere on your $PATH. If you ever have worked with Kubernetes -before, this should be the case anyways.
  • -
  • diff: To compute differences, standard UNIX diff(1) is required.
  • -
  • (recommended) jb: #Jsonnet Bundler, the Jsonnet package -manager
  • -
  • (recommended) helm: Helm, required for Helm -support
  • -
-

Tanka

-

On macOS, Tanka is best installed using brew:

Terminal window
brew install tanka

This downloads the most recent version of Tanka and installs it. -Also, Tanka is automatically kept up to date as part of brew upgrade.

-

Jsonnet Bundler

-

The Jsonnet Bundler project creates a package manager for Jsonnet -to share and reuse code across the internet, similar to npm or go mod.

-

Tanka uses this tool by default, so it’s recommended to install it as well:

-

On macOS, Jsonnet Bundler is best installed using brew:

Terminal window
brew install jsonnet-bundler

This downloads the most recent version of Jsonnet Bundler and installs it.
-Also, Jsonnet Bundler is automatically kept up to date as part of brew upgrade.

\ No newline at end of file diff --git a/pr-preview/pr-1220/internal/releasing/index.html b/pr-preview/pr-1220/internal/releasing/index.html deleted file mode 100644 index c34eb7055..000000000 --- a/pr-preview/pr-1220/internal/releasing/index.html +++ /dev/null @@ -1,97 +0,0 @@ - Releasing a new version | Grafana Tanka - - Skip to content

Releasing a new version

Releasing a new version of Tanka requires a couple of manual and automated steps. -This guide will give you a runbook on how to do them in the right order.

-

1. Create a release tag

-
    -
  1. Pull the latest changes from the main branch to your local clone.
  2. -
  3. Create a new tag with the prefix v (e.g. v0.28.0).
  4. -
  5. Push that tag back to GitHub.
  6. -
-

This starts multiple GitHub workflows that will produce binaries, a Docker image, and also a new GitHub release that is marked as draft.

-

2. Add changelog to the release notes

-

Once all these actions have finished, go to https://github.com/grafana/tanka/releases and you should see the new draft release. -Click the pencil icon (“edit”) at the top-right and go to the last line of the text body. -Now hit the “Generate release notes” button to add a changelog to the end of the release notes.

-

3. Publish the release notes

-

Once you’ve check that the release looks fine (e.g. no broken links, no missing version numbers in the download paths) click the “Publish release” button.

\ No newline at end of file diff --git a/pr-preview/pr-1220/jsonnet/injecting-values/index.html b/pr-preview/pr-1220/jsonnet/injecting-values/index.html deleted file mode 100644 index 4e164b9b5..000000000 --- a/pr-preview/pr-1220/jsonnet/injecting-values/index.html +++ /dev/null @@ -1,122 +0,0 @@ - Injecting Values | Grafana Tanka - - Skip to content

Injecting Values

Sometimes it might be required to pass externally acquired data into Jsonnet.

-

There are three ways of doing so:

-
    -
  1. JSON files
  2. -
  3. External variables
  4. -
  5. Top level arguments
  6. -
-

Also check out the official Jsonnet docs on this -topic.

-

JSON files

-

Jsonnet is a superset of JSON, it treats any JSON as valid Jsonnet. Because many -systems can be told to output their data in JSON format, this provides a pretty -good interface between those.

-

For example, your build tooling like make could acquire secrets from systems such as -Vault, etc. and write that into secrets.json.

-
local secrets = import "secrets.json";
-
{
foo: secrets.myPassword,
}
- -

External variables

-

Another way of passing values from the outside are external variables, which are specified like so:

-
Terminal window
# strings
tk show . --ext-str hello=world
-
# any Jsonnet snippet
tk show . --ext-code foo=4 --ext-code bar='[ 1, 3 ]'
-

They can be accessed using std.extVar and the name given to them on the command line:

-
{
foo: std.extVar('foo'), // 4, integer
bar: std.extVar('bar'), // [ 1, 3 ], array
}
- -

Top Level Arguments

-

Usually with Tanka, your main.jsonnet holds an object at the top level (most -outer type in the generated JSON):

-
main.jsonnet
{
/* your resources */
}
-

Another type of Jsonnet that naturally accepts parameters is the function. -When the Jsonnet compiler finds a function at the top level, it invokes it and -allows passing parameter values from the command line:

-
// Actual output (object) returned by function, which is taking parameters and default values
function(who, msg="Hello %s!") {
hello: msg % who
}
-

Here, who needs a value while msg has a default. This can be invoked like so:

-
Terminal window
tk show . --tla-str who=John
\ No newline at end of file diff --git a/pr-preview/pr-1220/jsonnet/main/index.html b/pr-preview/pr-1220/jsonnet/main/index.html deleted file mode 100644 index 7f03d496e..000000000 --- a/pr-preview/pr-1220/jsonnet/main/index.html +++ /dev/null @@ -1,117 +0,0 @@ - main.jsonnet | Grafana Tanka - - Skip to content

main.jsonnet

The most important file is called main.jsonnet, because this is where Tanka -invokes the Jsonnet compiler. Every single line of Jsonnet, including -imports, functions and whatnot is then evaluated until a single, very big JSON -object is left.
-This object is returned to Tanka and includes all of your Kubernetes manifests -somewhere in it, most probably deeply nested.

-

But as kubectl expects a yaml stream, and not a nested tree, Tanka needs to -extract your objects first. To do this, it traverses the tree until it finds -something that looks like a Kubernetes manifest. An object is considered valid -when it has both, kind and apiVersion set.

-

To ensure Tanka can find your manifests, the output of your Jsonnet needs to -have one of the following structures:

- -

Most commonly used is a single big object that includes all manifests as -leaf-nodes.

-

How deeply encapsulated the actual object is does not matter, Tanka will -traverse down until it finds something that is valid.

-
{
"prometheus": {
"service": {
// Service nested one level
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "promSvc"
}
},
"deployment": {
"apiVersion": "apps/v1", // apiVersion ..
"kind": "Deployment", // .. and kind are required to identify an object.
"metadata": {
"name": "prom"
}
}
},
"web": {
"nginx": {
"deployment": {
// Deployment nested two levels
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "nginx"
}
}
}
}
}
-

Using this technique has the big benefit that it is self-documenting, as the -nesting of keys can be used to logically group related manifests, for example by -application.

-

An encapsulation level of zero is also possible, which means nothing else than -regular object like it could be obtained from kubectl show -o json:

-
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "foo"
}
}
-

Array

-

Using an array of objects is also fine:

-
[
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "promSvc"
}
},
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "prom"
}
}
]
-

List type

-

Users of kubectl might have had contact with a type called List. It is not -part of the official Kubernetes API but rather a pseudo-type introduced by -kubectl for dealing with multiple objects at once. Thus, Tanka does not -support it out of the box.

-

To take full advantage of Tankas features, you can manually flatten it:

-
local list = {
apiVersion: "v1",
kind: "List",
items: [
{
apiVersion: "v1",
kind: "Service",
/* ... */
}
/* ... */
]
};
-
# expose the `items` array on the top level:
list.items
\ No newline at end of file diff --git a/pr-preview/pr-1220/jsonnet/native/index.html b/pr-preview/pr-1220/jsonnet/native/index.html deleted file mode 100644 index 4142eb756..000000000 --- a/pr-preview/pr-1220/jsonnet/native/index.html +++ /dev/null @@ -1,155 +0,0 @@ - Native Functions | Grafana Tanka - - Skip to content

Native Functions

Tanka extends Jsonnet using native functions, offering additional functionality not yet available in the standard library.

-

To use them in your code, you need to access them using std.native from the standard library:

-
{
someField: std.native('<name>')(<arguments>),
}
-

std.native takes the native function’s name as a string argument and returns a function, which is called using the second set of parentheses.

-

sha256

-

Signature

-
sha256(string str) string
-

sha256 computes the SHA256 sum of the given string.

-

Examples

-
{
sum: std.native('sha256')('Hello, World!'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"sum": "dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f"
}
-

parseJson

-

Signature

-
parseJson(string json) Object
-

parseJson parses a json string and returns the respective Jsonnet type (Object, Array, etc).

-

Examples

-
{
array: std.native('parseJson')('[0, 1, 2]'),
object: std.native('parseJson')('{ "foo": "bar" }'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"array": [0, 1, 2],
"object": {
"foo": "bar"
}
}
-

parseYaml

-

Signature

-
parseYaml(string yaml) []Object
-

parseYaml wraps yaml.Unmarshal to convert a string of yaml document(s) into -a set of dicts. If yaml only contains a single document, a single value array -will be returned.

-

Examples

-
{
yaml: std.native('parseYaml')(|||
---
foo: bar
---
bar: baz
|||),
}
-

Evaluating with Tanka results in the JSON:

-
{
"yaml": [
{
"foo": "bar"
},
{
"bar": "baz"
}
]
}
-

manifestJsonFromJson

-

Signature

-
manifestJsonFromJson(string json, int indent) string
-

manifestJsonFromJson reserializes JSON and allows to change the indentation.

-

Examples

-
{
indentWithEightSpaces: std.native('manifestJsonFromJson')('{ "foo": { "bar": "baz" } }', 8),
}
-

Evaluating with Tanka results in the JSON:

-
{
"indentWithEightSpaces": "{\n \"foo\": {\n \"bar\": \"baz\"\n }\n}\n"
}
-

manifestYamlFromJson

-

Signature

-
manifestYamlFromJson(string json) string
-

manifestYamlFromJson serializes a JSON string as a YAML document.

-

Examples

-
{
yaml: std.native('manifestYamlFromJson')('{ "foo": { "bar": "baz" } }'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"yaml": "foo:\n bar: baz\n"
}
-

escapeStringRegex

-

Signature

-
escapeStringRegex(string s) string
-

escapeStringRegex escapes all regular expression metacharacters and returns a -regular expression that matches the literal text.

-

Examples

-
{
escaped: std.native('escapeStringRegex')('"([0-9]+"'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"escaped": "\"\\(\\[0-9\\]\\+\""
}
-

regexMatch

-

Signature

-
regexMatch(string regex, string s) boolean
-

regexMatch returns whether the given string is matched by the given -RE2 regular expression.

-

Examples

-
{
matched: std.native('regexMatch')('.', 'a'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"matched": true
}
-

regexSubst

-

Signature

-
regexSubst(string regex, string src, string repl) string
-

regexSubst replaces all matches of the re2 regular expression with the -replacement string.

-

Examples

-
{
substituted: std.native('regexSubst')('p[^m]*', 'pm', 'poe'),
}
-

Evaluating with Tanka results in the JSON:

-
{
"substituted": "poem"
}
\ No newline at end of file diff --git a/pr-preview/pr-1220/jsonnet/overview/index.html b/pr-preview/pr-1220/jsonnet/overview/index.html deleted file mode 100644 index c232ef123..000000000 --- a/pr-preview/pr-1220/jsonnet/overview/index.html +++ /dev/null @@ -1,148 +0,0 @@ - Syntax overview | Grafana Tanka - - Skip to content

Syntax overview

Jsonnet is the data templating language Tanka uses for -expressing what shall be deployed to your Kubernetes cluster. Understanding -Jsonnet is crucial to using Tanka effectively.

-

This page covers the Jsonnet language itself. For more information on how to -use Jsonnet with Kubernetes, see the tutorial. There’s -also the official Jsonnet tutorial -that provides a more detailed review of language features.

-

Syntax

-

Being a superset of JSON, the syntax is very similar:

-
// Line comment
/* Block comment */
-
// a local variable (not exported)
local greeting = "hello world!";
-
// the exported/returned object
{
foo: "bar", // string
bar: 5, // int
baz: false, // bool
list: [1,2,3], // array
// object
dict: {
nested: greeting, // using the local
},
hidden:: "incognito!" // an unexported field
}
-

Abstraction

-

Jsonnet has rich abstraction features, which makes it interesting for -configuring Kubernetes, as it allows to keep configurations concise, yet -readable.

- -

Imports

-

Just as other languages, Jsonnet allows code to be imported from other files:

-
local secret = import "./secret.libsonnet";
-

The exported object (the only non-local one) of secret.libsonnet is now -available as a local variable called secret.

-

When using Tanka, it is also possible to directly import .json files, as if -they were a .libsonnet.

-

Make sure to also take a look at the libraries documentation to learn how to use import and re-use code. -The documentation on Tanka import paths and vendoring are useful to understand how imports work in Tanka’s context.

-

Merging

-

Deep merging allows you to change parts of an object without touching all of it. -Consider the following example:

-
local secret = {
kind: Secret,
metadata: {
name: "mySecret",
namespace: "default", // need to change that
},
data: {
foo: std.base64("foo")
}
};
-

To change the namespace only, we can use the special merge key +: like so:

-
// define the patch:
local patch = {
metadata+: {
namespace: "myApp"
}
}
-

The difference between : and +: is that the former replaces the original -data at that key, while the latter applies the new object as a patch on top, -meaning that values will be updated if possible but all other stay like they -are.
-To merge those two, just add (+) the patch to the original:

-
secret + patch
-

The output of this is the following JSON object:

-
{
"kind": "Secret",
"metadata": {
"name": "mySecret",
"namespace": "myApp"
},
"data": {
"foo": "Zm9vCg=="
}
}
-

Functions

-

Jsonnet supports functions, similar to how Python does. They can be defined in -two different ways:

-
local add(x,y) = x + y;
local mul = (function(x, y) x * y);
-

Objects can have methods:

-
{
greet(who): "hello " + who,
}
-

Default values, keyword-args and more examples can be found at -jsonnet.org.

-

Standard library

-

The Jsonnet standard library includes many helper methods ranging from object -and array mutation, over string utils to computation helpers.

-

Documentation is available at -jsonnet.org.

-

Conditionals

-

Jsonnet supports a conditionals in a fashion similar to a ternary operator:

-
local tag = if prod then "v1.0" else "latest";
-

More on jsonnet.org.

-

References

-

Jsonnet has multiple options to refer to parts of an object:

-
{ // this is $
junk: "foo",
nested: { // this is self
app: "Tanka",
msg: self.app + " rocks!" // "Tanka rocks!"
},
children: { // this is also self
baz: "bar",
junk: $.junk + self.baz, // "foobar"
}
}
-

For more information take a look at -jsonnet.org

\ No newline at end of file diff --git a/pr-preview/pr-1220/known-issues/index.html b/pr-preview/pr-1220/known-issues/index.html deleted file mode 100644 index cc5eb5225..000000000 --- a/pr-preview/pr-1220/known-issues/index.html +++ /dev/null @@ -1,112 +0,0 @@ - Known issues | Grafana Tanka - - Skip to content

Known issues

Below is a list of common errors and how to address them.

-

Evaluating jsonnet: RUNTIME ERROR: Undefined external variable: __ksonnet/components

-

When migrating from ksonnet, this error might occur, because Tanka does not -provide the global __ksonnet variable, nor does it strictly have the concept -of components. -You will need to use the plain Jsonnet import feature instead. Note that this -requires your code to be inside of one of the -import paths.

-

Evaluating jsonnet: RUNTIME ERROR: couldn't open import "k.libsonnet": no match locally or in the Jsonnet library paths

-

This error can occur when the k8s-libsonnet kubernetes libraries are missing in the -import paths. While k8s-libsonnet used to magically include them, Tanka follows a -more explicit approach and requires you to install them using jb:

-
Terminal window
jb install github.com/jsonnet-libs/k8s-libsonnet/1.21@main
echo "import 'github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet'" > lib/k.libsonnet
-

This does 2 things:

-
    -
  1. -

    It installs the k8s-libsonnet library (in vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/). -You can replace the 1.21 matching the Kubernetes version you want to run against.

    -
  2. -
  3. -

    It makes an alias for libraries importing k.libsonnet directly. See -Aliasing for the alias rationale.

    -
  4. -
-

Unexpected diff if the same port number is used for UDP and TCP

-

A long-standing bug in kubectl -results in an incorrect diff output if the same port number is used multiple -times in differently named ports, which commonly happens if a port is specified -using both protocols, tcp and udp. Nevertheless, tk apply will still work -correctly.

\ No newline at end of file diff --git a/pr-preview/pr-1220/kustomize/index.html b/pr-preview/pr-1220/kustomize/index.html deleted file mode 100644 index 22d11fcea..000000000 --- a/pr-preview/pr-1220/kustomize/index.html +++ /dev/null @@ -1,138 +0,0 @@ - Kustomize support | Grafana Tanka - - Skip to content

Kustomize support

Kustomize provides a solution for customizing Kubernetes -manifests in YAML.

-

Even though Grafana Tanka uses the Jsonnet language for -resource definition, you can still consume kustomizations, as described below.

- -

Consuming a Kustomization from Jsonnet

-

Kustomize support is provided using the -github.com/grafana/jsonnet-libs/tanka-util -library. Install it with:

-
Terminal window
jb install github.com/grafana/jsonnet-libs/tanka-util
-

The following example shows how to extract the individual resources of the -flux2/source-controller -kustomization:

-
local tanka = import 'github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet';
local kustomize = tanka.kustomize.new(std.thisFile);
-
{
source_controller: kustomize.build(path='flux2')
}
-

Kustomize takes a kustomization manifest as input. Go on an create this file -flux2/kustomization.yaml relative to above jsonnet:

-
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- https://github.com/fluxcd/flux2/archive/v0.4.3.zip//flux2-0.4.3/manifests/bases/source-controller
- -

Once invoked, the $.source_controller key holds the individual resources of -the kustomization as a regular Jsonnet object that looks roughly like so:

-
{
'custom_resource_definition_buckets.source.toolkit.fluxcd.io': {/* ... */ },
'custom_resource_definition_gitrepositories.source.toolkit.fluxcd.io': {/* ... */ },
'custom_resource_definition_helmcharts.source.toolkit.fluxcd.io': {/* ... */ },
'custom_resource_definition_helmrepositories.source.toolkit.fluxcd.io': {/* ... */ },
deployment_source_controller: {/* ... */ },
service_source_controller: {/* ... */ },
}
-

Above can be manipulated in the same way as -any other Jsonnet data.

-

Working with Kustomize

-

Tanka, like Jsonnet, is hermetic. It always yields the same resources when -the project is strictly self-contained.

-

Kustomize however has the ability to pull -resources -from different sources at runtime, which violates above requirement. This is -also apparent in the example above.

- -

Troubleshooting

-

Kustomize executable missing

-

Kustomize support in Tanka requires the kustomize binary installed on your -system and available on the $PATH. If Kustomize is not installed, you will see -this error message:

-
evaluating jsonnet: RUNTIME ERROR: Expanding Kustomize: exec: "kustomize": executable file not found in $PATH
-

To solve this, you need to -install Kustomize. -If you cannot install it system-wide, you can point Tanka at your executable -using TANKA_KUSTOMIZE_PATH

-

opts.calledFrom unset

-

This occurs, when Tanka was not told where it kustomize.build() was invoked -from. This most likely means you didn’t call new(std.thisFile) when importing tanka-util:

-
local tanka = import "github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet";
local kustomize = tanka.kustomize.new(std.thisFile);
↑ This is important
-

Failed to find kustomization

-
Error: unable to find one of 'kustomization.yaml', 'kustomization.yml' or 'Kustomization' in directory '/home/user/stuff/tanka/environments/default/flux2'
-

Tanka failed to locate your kustomization on the filesystem. It looked at the -relative path you provided in kustomize.build(), starting from the directory -of the file you called kustomize.build() from.

-

Please check there is actually a valid kustomization at this place.

\ No newline at end of file diff --git a/pr-preview/pr-1220/libraries/import-paths/index.html b/pr-preview/pr-1220/libraries/import-paths/index.html deleted file mode 100644 index 3eb8a2925..000000000 --- a/pr-preview/pr-1220/libraries/import-paths/index.html +++ /dev/null @@ -1,119 +0,0 @@ - Import paths | Grafana Tanka - - Skip to content

Import paths

When using import or importstr, Tanka considers the following directories to -find a suitable file for that specific import:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RankPathPurpose
4<baseDir>The directory of your environment, e.g. /environments/default.
Put things that belong to this very environment here.
3/libProject-global libraries, that are used in multiple environments, but are specific to this project.
2<baseDir>/vendorPer-environment vendor, can be used for vendor overriding
1/vendorGlobal vendor, holds external libraries installed using jb.
-
\ No newline at end of file diff --git a/pr-preview/pr-1220/libraries/install-publish/index.html b/pr-preview/pr-1220/libraries/install-publish/index.html deleted file mode 100644 index 6bcc6e9f0..000000000 --- a/pr-preview/pr-1220/libraries/install-publish/index.html +++ /dev/null @@ -1,95 +0,0 @@ - Installing and publishing | Grafana Tanka - - Skip to content

Installing and publishing

The tool for dealing with libraries is -jsonnet-bundler. It can -install packages from any git source using ssh and GitHub over https.

-

Install a library

-

To install a library from GitHub, use one of the following:

-
Terminal window
jb install github.com/<user>/<repo>
jb install github.com/<user>/<repo>/<subdir>
jb install github.com/<user>/<repo>/<subdir>@<version>
-

Otherwise, use the ssh syntax:

-
Terminal window
jb install git+ssh://git@mycode.server:<path-to-repo>.git
jb install git+ssh://git@mycode.server:<path-to-repo>.git/<subdir>
jb install git+ssh://git@mycode.server:<path-to-repo>.git/<subdir>@<version>
- -

Publish to Git(Hub)

-

Publishing is as easy as committing and pushing to a git remote. -GitHub is recommended, as it is most common and supports -faster installing using http archives.

\ No newline at end of file diff --git a/pr-preview/pr-1220/libraries/overriding/index.html b/pr-preview/pr-1220/libraries/overriding/index.html deleted file mode 100644 index 5a1f6e49c..000000000 --- a/pr-preview/pr-1220/libraries/overriding/index.html +++ /dev/null @@ -1,127 +0,0 @@ - Overriding vendor | Grafana Tanka - - Skip to content

Overriding vendor

The vendor directory is immutable in its nature. You can’t and should never -modify any files inside of it, jb will revert those changes on the next run anyway.

-

Nevertheless, it can sometimes become required to add changes there, e.g. if an -upstream library contains a bug that needs to be fixed immediately, without -waiting for the upstream maintainer to review it.

-

Shadowing

-

Because import paths are ranked in Tanka, you can use -a technique called shadowing: By putting a file with the exact same name in a -higher ranked path, Tanka will prefer that file instead of the original in -vendor, which has the lowest possible rank of 1.

-

For example, if /vendor/foo/bar.libsonnet contained an error, you could create -/lib/foo/bar.libsonnet and fix it there.

- - -

Per environment

-

Another common case is overriding the entire vendor bundle per environment.

-

This is handy, when you for example want to test a change of an upstream -library which is used in many environments (including prod) in a single one, -without affecting all the others.

-

For this, Tanka lets you have a separate vendor, jsonnetfile.json and -jsonnetfile.lock.json per environment. To do so:

-

Create tkrc.yaml

-

Tanka normally uses the jsonnetfile.json from your project to find its root. -As we are going to create another one of that down the tree in the next step, we -need another marker for <rootDir>.

-

For that, create an empty file called tkrc.yaml in your project’s root, -alongside the original jsonnetfile.json.

- -

Add a vendor to your environment

-

In your environments folder (e.g. /environments/default):

-
Terminal window
# init jsonnet bundler (creates jsonnetfile.json)
jb init
-
# install the updated dependency
jb install github.com/foo/bar@v2
-
\ No newline at end of file diff --git a/pr-preview/pr-1220/namespaces/index.html b/pr-preview/pr-1220/namespaces/index.html deleted file mode 100644 index 19d493b4f..000000000 --- a/pr-preview/pr-1220/namespaces/index.html +++ /dev/null @@ -1,127 +0,0 @@ - Namespaces | Grafana Tanka - - Skip to content

Namespaces

When using Tanka, namespaces are handled slightly different compared to -kubectl, because environments offer more granular control than contexts used -by kubectl.

-

Default namespaces

-

In the spec.json of each environment, you can set the -spec.namespace field, which is the default namespace. The default namespace is -set for every resource that does not have a namespace set from Jsonnet.

- - - - - - - - - - - - - - - - - - - - -
ScenarioAction
1.Your resource lacks namespace information (metadata.namespace) unset or ""Tanka sets metadata.namespace to the value of spec.namespace in spec.json
2.Your resource already has namespace informationTanka does nothing, accepting the explicit namespace
-

While we recommend keeping environments limited to a single namespace, there are -legit cases where it’s handy to have them span multiple namespaces, for example:

-
    -
  • Some other piece of software (Operators, etc) require resources to be in a specific namespace
  • -
  • A rarely changing “base” environment holding resources deployed for many clusters in the same way
  • -
  • etc.
  • -
-

Cluster-wide resources

-

Some resources in Kubernetes are cluster-wide, meaning they don’t belong to a single namespace at all.

-

Tanka will make an attempt to not add namespaces to known cluster-wide types. -It does this with a short list of types in the source code.

-

Tanka cannot feasibly maintain this list for all known custom resource types. In those cases, resources will have namespaces added to their manifests, -and kubectl should happily apply them as non-namespaced resources.

-

If this presents a problem for your workflow, you can override this behavior -per-resource, by setting the tanka.dev/namespaced annotation to "false" -(must be of string type):

-
thing: clusterRole.new("myClusterRole")
+ clusterRole.mixin.metadata.withAnnotationsMixin({ "tanka.dev/namespaced": "false" })
\ No newline at end of file diff --git a/pr-preview/pr-1220/output-filtering/index.html b/pr-preview/pr-1220/output-filtering/index.html deleted file mode 100644 index 58593d5b6..000000000 --- a/pr-preview/pr-1220/output-filtering/index.html +++ /dev/null @@ -1,118 +0,0 @@ - Output filtering | Grafana Tanka - - Skip to content

Output filtering

When a project becomes bigger over time and includes a lot of Kubernetes -objects, it may become required to operate on only a subset of them (e.g. apply -only a part of an application).

-

Tanka helps you with this, by allowing you to limit the used objects on the -command line using the --target flag. Say you are deploying an nginx -instance with a special nginx.conf and want to apply the ConfigMap first:

-
Terminal window
# show the ConfigMap
tk show -t configmap/nginx .
-
# all good? apply!
tk apply -t configmap/nginx .
-
# and apply everything else:
tk apply .
-

The syntax of the --target / -t flag is --target=<kind>/<name>. If -multiple objects match this pattern, all of them are used.

-

The --target / -t flag can be specified multiple times, to work with -multiple objects.

-

Regular Expressions

-

The argument passed to the --target flag is interpreted as a -RE2 regular expression.

-

This allows you to use all sorts of wildcards and other advanced matching -functionality to select Kubernetes objects:

-
Terminal window
# show all deployments
tk show . -t 'deployment/.*'
-
# show all objects named "loki"
tk show . -t '.*/loki'
-

Gotchas

-

When using regular expressions, there are some things to watch out for:

-

Line Anchors

-

Tanka automatically surrounds your regular expression with line anchors:

-
^<your expression>$
-

For example, --target 'deployment/.*' becomes ^deployment/.*$.

-

Quoting

-

Regular expressions may consist of characters that have special meanings in -shell. Always make sure to properly quote your regular expression using single -quotes.

-
Terminal window
# shell attempts to match the wildcard itself:
zsh-5.4.2$ tk show . -t deployment/.*
zsh: no matches found: deployment/.*
-
# properly quoted:
zsh-5.4.2$ tk show . -t 'deployment/.*'
---
apiVersion: apps/v1
kind: Deployment
# ...
-

Excluding

-

Sometimes it may be desirably to exclude a single object, instead of including all others.

-

To do so, prepend the regular expression with an exclamation mark (!), like so:

-
Terminal window
# filter out all Deployments
tk show . -t '!deployment/.*'
\ No newline at end of file diff --git a/pr-preview/pr-1220/pagefind/fragment/en_2623aee.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_2623aee.pf_fragment deleted file mode 100644 index e9a467cff..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_2623aee.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_3088548.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_3088548.pf_fragment deleted file mode 100644 index 3c73820dd..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_3088548.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_31de4d6.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_31de4d6.pf_fragment deleted file mode 100644 index d13f07255..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_31de4d6.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_386156c.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_386156c.pf_fragment deleted file mode 100644 index 3b6b88203..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_386156c.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_3a2eabd.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_3a2eabd.pf_fragment deleted file mode 100644 index 68e14bcfb..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_3a2eabd.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_3ae7828.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_3ae7828.pf_fragment deleted file mode 100644 index 16df914f6..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_3ae7828.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_3c3d4b3.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_3c3d4b3.pf_fragment deleted file mode 100644 index 6c972206e..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_3c3d4b3.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_56f8363.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_56f8363.pf_fragment deleted file mode 100644 index 8af8f5d65..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_56f8363.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_594236a.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_594236a.pf_fragment deleted file mode 100644 index 0544ee868..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_594236a.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_5e18fa1.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_5e18fa1.pf_fragment deleted file mode 100644 index f280a3c86..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_5e18fa1.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_63a9427.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_63a9427.pf_fragment deleted file mode 100644 index 1ea4dc60b..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_63a9427.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_6fa2666.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_6fa2666.pf_fragment deleted file mode 100644 index 88110a6c6..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_6fa2666.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_7098b8a.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_7098b8a.pf_fragment deleted file mode 100644 index 04ae432e5..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_7098b8a.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_75cf752.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_75cf752.pf_fragment deleted file mode 100644 index 5f1104c8e..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_75cf752.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_817ca38.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_817ca38.pf_fragment deleted file mode 100644 index 7515bcbe7..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_817ca38.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_823cd89.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_823cd89.pf_fragment deleted file mode 100644 index 366645107..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_823cd89.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_874ae6c.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_874ae6c.pf_fragment deleted file mode 100644 index 63418057d..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_874ae6c.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_96737f1.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_96737f1.pf_fragment deleted file mode 100644 index 2d5999e33..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_96737f1.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_a1f6a0a.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_a1f6a0a.pf_fragment deleted file mode 100644 index cd4ebd3d0..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_a1f6a0a.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_a4ed2df.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_a4ed2df.pf_fragment deleted file mode 100644 index 8fec0e9fb..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_a4ed2df.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_a6c9c36.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_a6c9c36.pf_fragment deleted file mode 100644 index c147d782f..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_a6c9c36.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_a771159.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_a771159.pf_fragment deleted file mode 100644 index 63c851c53..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_a771159.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_aac9ce8.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_aac9ce8.pf_fragment deleted file mode 100644 index 4e51df739..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_aac9ce8.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_ae35d97.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_ae35d97.pf_fragment deleted file mode 100644 index e87da3439..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_ae35d97.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_af299fc.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_af299fc.pf_fragment deleted file mode 100644 index 119caceeb..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_af299fc.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_bbc3b44.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_bbc3b44.pf_fragment deleted file mode 100644 index 8fbbd1d56..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_bbc3b44.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_bdaaefd.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_bdaaefd.pf_fragment deleted file mode 100644 index 1d30773c2..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_bdaaefd.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_bf5aafb.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_bf5aafb.pf_fragment deleted file mode 100644 index 77ac0604a..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_bf5aafb.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_c2bf668.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_c2bf668.pf_fragment deleted file mode 100644 index c122e4edf..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_c2bf668.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_c9ec2c5.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_c9ec2c5.pf_fragment deleted file mode 100644 index 37394d162..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_c9ec2c5.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_cb3c689.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_cb3c689.pf_fragment deleted file mode 100644 index 95541423f..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_cb3c689.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_e139ecf.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_e139ecf.pf_fragment deleted file mode 100644 index aecc06ab4..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_e139ecf.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/fragment/en_ee40eab.pf_fragment b/pr-preview/pr-1220/pagefind/fragment/en_ee40eab.pf_fragment deleted file mode 100644 index e3a146590..000000000 Binary files a/pr-preview/pr-1220/pagefind/fragment/en_ee40eab.pf_fragment and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/index/en_1491343.pf_index b/pr-preview/pr-1220/pagefind/index/en_1491343.pf_index deleted file mode 100644 index 630777513..000000000 Binary files a/pr-preview/pr-1220/pagefind/index/en_1491343.pf_index and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/index/en_cf22872.pf_index b/pr-preview/pr-1220/pagefind/index/en_cf22872.pf_index deleted file mode 100644 index bd2611cfe..000000000 Binary files a/pr-preview/pr-1220/pagefind/index/en_cf22872.pf_index and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/pagefind-entry.json b/pr-preview/pr-1220/pagefind/pagefind-entry.json deleted file mode 100644 index 18b6fb411..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-entry.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.1.1","languages":{"en":{"hash":"en_efb9a6be9b","wasm":"en","page_count":33}}} \ No newline at end of file diff --git a/pr-preview/pr-1220/pagefind/pagefind-highlight.js b/pr-preview/pr-1220/pagefind/pagefind-highlight.js deleted file mode 100644 index c823fbfe7..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-highlight.js +++ /dev/null @@ -1,1069 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node_modules/mark.js/dist/mark.js -var require_mark = __commonJS({ - "node_modules/mark.js/dist/mark.js"(exports, module) { - (function(global, factory) { - typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory(); - })(exports, function() { - "use strict"; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - var classCallCheck = function(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - var createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - if (protoProps) - defineProperties(Constructor.prototype, protoProps); - if (staticProps) - defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; - }; - var DOMIterator = function() { - function DOMIterator2(ctx) { - var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; - var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; - var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3; - classCallCheck(this, DOMIterator2); - this.ctx = ctx; - this.iframes = iframes; - this.exclude = exclude; - this.iframesTimeout = iframesTimeout; - } - createClass(DOMIterator2, [{ - key: "getContexts", - value: function getContexts() { - var ctx = void 0, filteredCtx = []; - if (typeof this.ctx === "undefined" || !this.ctx) { - ctx = []; - } else if (NodeList.prototype.isPrototypeOf(this.ctx)) { - ctx = Array.prototype.slice.call(this.ctx); - } else if (Array.isArray(this.ctx)) { - ctx = this.ctx; - } else if (typeof this.ctx === "string") { - ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); - } else { - ctx = [this.ctx]; - } - ctx.forEach(function(ctx2) { - var isDescendant = filteredCtx.filter(function(contexts) { - return contexts.contains(ctx2); - }).length > 0; - if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) { - filteredCtx.push(ctx2); - } - }); - return filteredCtx; - } - }, { - key: "getIframeContents", - value: function getIframeContents(ifr, successFn) { - var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() { - }; - var doc = void 0; - try { - var ifrWin = ifr.contentWindow; - doc = ifrWin.document; - if (!ifrWin || !doc) { - throw new Error("iframe inaccessible"); - } - } catch (e) { - errorFn(); - } - if (doc) { - successFn(doc); - } - } - }, { - key: "isIframeBlank", - value: function isIframeBlank(ifr) { - var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href; - return href === bl && src !== bl && src; - } - }, { - key: "observeIframeLoad", - value: function observeIframeLoad(ifr, successFn, errorFn) { - var _this = this; - var called = false, tout = null; - var listener = function listener2() { - if (called) { - return; - } - called = true; - clearTimeout(tout); - try { - if (!_this.isIframeBlank(ifr)) { - ifr.removeEventListener("load", listener2); - _this.getIframeContents(ifr, successFn, errorFn); - } - } catch (e) { - errorFn(); - } - }; - ifr.addEventListener("load", listener); - tout = setTimeout(listener, this.iframesTimeout); - } - }, { - key: "onIframeReady", - value: function onIframeReady(ifr, successFn, errorFn) { - try { - if (ifr.contentWindow.document.readyState === "complete") { - if (this.isIframeBlank(ifr)) { - this.observeIframeLoad(ifr, successFn, errorFn); - } else { - this.getIframeContents(ifr, successFn, errorFn); - } - } else { - this.observeIframeLoad(ifr, successFn, errorFn); - } - } catch (e) { - errorFn(); - } - } - }, { - key: "waitForIframes", - value: function waitForIframes(ctx, done) { - var _this2 = this; - var eachCalled = 0; - this.forEachIframe(ctx, function() { - return true; - }, function(ifr) { - eachCalled++; - _this2.waitForIframes(ifr.querySelector("html"), function() { - if (!--eachCalled) { - done(); - } - }); - }, function(handled) { - if (!handled) { - done(); - } - }); - } - }, { - key: "forEachIframe", - value: function forEachIframe(ctx, filter, each) { - var _this3 = this; - var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { - }; - var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0; - ifr = Array.prototype.slice.call(ifr); - var checkEnd = function checkEnd2() { - if (--open <= 0) { - end(handled); - } - }; - if (!open) { - checkEnd(); - } - ifr.forEach(function(ifr2) { - if (DOMIterator2.matches(ifr2, _this3.exclude)) { - checkEnd(); - } else { - _this3.onIframeReady(ifr2, function(con) { - if (filter(ifr2)) { - handled++; - each(con); - } - checkEnd(); - }, checkEnd); - } - }); - } - }, { - key: "createIterator", - value: function createIterator(ctx, whatToShow, filter) { - return document.createNodeIterator(ctx, whatToShow, filter, false); - } - }, { - key: "createInstanceOnIframe", - value: function createInstanceOnIframe(contents) { - return new DOMIterator2(contents.querySelector("html"), this.iframes); - } - }, { - key: "compareNodeIframe", - value: function compareNodeIframe(node, prevNode, ifr) { - var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING; - if (compCurr & prev) { - if (prevNode !== null) { - var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING; - if (compPrev & after) { - return true; - } - } else { - return true; - } - } - return false; - } - }, { - key: "getIteratorNode", - value: function getIteratorNode(itr) { - var prevNode = itr.previousNode(); - var node = void 0; - if (prevNode === null) { - node = itr.nextNode(); - } else { - node = itr.nextNode() && itr.nextNode(); - } - return { - prevNode, - node - }; - } - }, { - key: "checkIframeFilter", - value: function checkIframeFilter(node, prevNode, currIfr, ifr) { - var key = false, handled = false; - ifr.forEach(function(ifrDict, i) { - if (ifrDict.val === currIfr) { - key = i; - handled = ifrDict.handled; - } - }); - if (this.compareNodeIframe(node, prevNode, currIfr)) { - if (key === false && !handled) { - ifr.push({ - val: currIfr, - handled: true - }); - } else if (key !== false && !handled) { - ifr[key].handled = true; - } - return true; - } - if (key === false) { - ifr.push({ - val: currIfr, - handled: false - }); - } - return false; - } - }, { - key: "handleOpenIframes", - value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { - var _this4 = this; - ifr.forEach(function(ifrDict) { - if (!ifrDict.handled) { - _this4.getIframeContents(ifrDict.val, function(con) { - _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); - }); - } - }); - } - }, { - key: "iterateThroughNodes", - value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { - var _this5 = this; - var itr = this.createIterator(ctx, whatToShow, filterCb); - var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() { - var _getIteratorNode = _this5.getIteratorNode(itr); - prevNode = _getIteratorNode.prevNode; - node = _getIteratorNode.node; - return node; - }; - while (retrieveNodes()) { - if (this.iframes) { - this.forEachIframe(ctx, function(currIfr) { - return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); - }, function(con) { - _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) { - return elements.push(ifrNode); - }, filterCb); - }); - } - elements.push(node); - } - elements.forEach(function(node2) { - eachCb(node2); - }); - if (this.iframes) { - this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); - } - doneCb(); - } - }, { - key: "forEachNode", - value: function forEachNode(whatToShow, each, filter) { - var _this6 = this; - var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { - }; - var contexts = this.getContexts(); - var open = contexts.length; - if (!open) { - done(); - } - contexts.forEach(function(ctx) { - var ready = function ready2() { - _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() { - if (--open <= 0) { - done(); - } - }); - }; - if (_this6.iframes) { - _this6.waitForIframes(ctx, ready); - } else { - ready(); - } - }); - } - }], [{ - key: "matches", - value: function matches(element, selector) { - var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector; - if (fn) { - var match = false; - selectors.every(function(sel) { - if (fn.call(element, sel)) { - match = true; - return false; - } - return true; - }); - return match; - } else { - return false; - } - } - }]); - return DOMIterator2; - }(); - var Mark$1 = function() { - function Mark3(ctx) { - classCallCheck(this, Mark3); - this.ctx = ctx; - this.ie = false; - var ua = window.navigator.userAgent; - if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) { - this.ie = true; - } - } - createClass(Mark3, [{ - key: "log", - value: function log(msg) { - var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug"; - var log2 = this.opt.log; - if (!this.opt.debug) { - return; - } - if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") { - log2[level]("mark.js: " + msg); - } - } - }, { - key: "escapeStr", - value: function escapeStr(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - }, { - key: "createRegExp", - value: function createRegExp(str) { - if (this.opt.wildcards !== "disabled") { - str = this.setupWildcardsRegExp(str); - } - str = this.escapeStr(str); - if (Object.keys(this.opt.synonyms).length) { - str = this.createSynonymsRegExp(str); - } - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.setupIgnoreJoinersRegExp(str); - } - if (this.opt.diacritics) { - str = this.createDiacriticsRegExp(str); - } - str = this.createMergedBlanksRegExp(str); - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.createJoinersRegExp(str); - } - if (this.opt.wildcards !== "disabled") { - str = this.createWildcardsRegExp(str); - } - str = this.createAccuracyRegExp(str); - return str; - } - }, { - key: "createSynonymsRegExp", - value: function createSynonymsRegExp(str) { - var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : ""; - for (var index in syn) { - if (syn.hasOwnProperty(index)) { - var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value); - if (k1 !== "" && k2 !== "") { - str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder); - } - } - } - return str; - } - }, { - key: "processSynomyms", - value: function processSynomyms(str) { - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.setupIgnoreJoinersRegExp(str); - } - return str; - } - }, { - key: "setupWildcardsRegExp", - value: function setupWildcardsRegExp(str) { - str = str.replace(/(?:\\)*\?/g, function(val) { - return val.charAt(0) === "\\" ? "?" : ""; - }); - return str.replace(/(?:\\)*\*/g, function(val) { - return val.charAt(0) === "\\" ? "*" : ""; - }); - } - }, { - key: "createWildcardsRegExp", - value: function createWildcardsRegExp(str) { - var spaces = this.opt.wildcards === "withSpaces"; - return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*"); - } - }, { - key: "setupIgnoreJoinersRegExp", - value: function setupIgnoreJoinersRegExp(str) { - return str.replace(/[^(|)\\]/g, function(val, indx, original) { - var nextChar = original.charAt(indx + 1); - if (/[(|)\\]/.test(nextChar) || nextChar === "") { - return val; - } else { - return val + "\0"; - } - }); - } - }, { - key: "createJoinersRegExp", - value: function createJoinersRegExp(str) { - var joiner = []; - var ignorePunctuation = this.opt.ignorePunctuation; - if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { - joiner.push(this.escapeStr(ignorePunctuation.join(""))); - } - if (this.opt.ignoreJoiners) { - joiner.push("\\u00ad\\u200b\\u200c\\u200d"); - } - return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str; - } - }, { - key: "createDiacriticsRegExp", - value: function createDiacriticsRegExp(str) { - var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", "E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B", "I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142", "L\u0141", "n\xF1\u0148\u0144", "N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D", "O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159", "R\u0158", "s\u0161\u015B\u0219\u015F", "S\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163", "T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B", "U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF", "Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017A", "Z\u017D\u017B\u0179"] : ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010DC\xC7\u0106\u010C", "d\u0111\u010FD\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142L\u0141", "n\xF1\u0148\u0144N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159R\u0158", "s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017AZ\u017D\u017B\u0179"]; - var handled = []; - str.split("").forEach(function(ch) { - dct.every(function(dct2) { - if (dct2.indexOf(ch) !== -1) { - if (handled.indexOf(dct2) > -1) { - return false; - } - str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]"); - handled.push(dct2); - } - return true; - }); - }); - return str; - } - }, { - key: "createMergedBlanksRegExp", - value: function createMergedBlanksRegExp(str) { - return str.replace(/[\s]+/gmi, "[\\s]+"); - } - }, { - key: "createAccuracyRegExp", - value: function createAccuracyRegExp(str) { - var _this = this; - var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF"; - var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = ""; - ls.forEach(function(limiter) { - lsJoin += "|" + _this.escapeStr(limiter); - }); - switch (val) { - case "partially": - default: - return "()(" + str + ")"; - case "complementary": - lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars)); - return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)"; - case "exactly": - return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")"; - } - } - }, { - key: "getSeparatedKeywords", - value: function getSeparatedKeywords(sv) { - var _this2 = this; - var stack = []; - sv.forEach(function(kw) { - if (!_this2.opt.separateWordSearch) { - if (kw.trim() && stack.indexOf(kw) === -1) { - stack.push(kw); - } - } else { - kw.split(" ").forEach(function(kwSplitted) { - if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { - stack.push(kwSplitted); - } - }); - } - }); - return { - "keywords": stack.sort(function(a, b) { - return b.length - a.length; - }), - "length": stack.length - }; - } - }, { - key: "isNumeric", - value: function isNumeric(value) { - return Number(parseFloat(value)) == value; - } - }, { - key: "checkRanges", - value: function checkRanges(array) { - var _this3 = this; - if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") { - this.log("markRanges() will only accept an array of objects"); - this.opt.noMatch(array); - return []; - } - var stack = []; - var last = 0; - array.sort(function(a, b) { - return a.start - b.start; - }).forEach(function(item) { - var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid; - if (valid) { - item.start = start; - item.length = end - start; - stack.push(item); - last = end; - } - }); - return stack; - } - }, { - key: "callNoMatchOnInvalidRanges", - value: function callNoMatchOnInvalidRanges(range, last) { - var start = void 0, end = void 0, valid = false; - if (range && typeof range.start !== "undefined") { - start = parseInt(range.start, 10); - end = start + parseInt(range.length, 10); - if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) { - valid = true; - } else { - this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range))); - this.opt.noMatch(range); - } - } else { - this.log("Ignoring invalid range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } - return { - start, - end, - valid - }; - } - }, { - key: "checkWhitespaceRanges", - value: function checkWhitespaceRanges(range, originalLength, string) { - var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset; - start = start > max ? max : start; - end = start + parseInt(range.length, 10); - if (end > max) { - end = max; - this.log("End range automatically set to the max value of " + max); - } - if (start < 0 || end - start < 0 || start > max || end > max) { - valid = false; - this.log("Invalid range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } else if (string.substring(start, end).replace(/\s+/g, "") === "") { - valid = false; - this.log("Skipping whitespace only range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } - return { - start, - end, - valid - }; - } - }, { - key: "getTextNodes", - value: function getTextNodes(cb) { - var _this4 = this; - var val = "", nodes = []; - this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) { - nodes.push({ - start: val.length, - end: (val += node.textContent).length, - node - }); - }, function(node) { - if (_this4.matchesExclude(node.parentNode)) { - return NodeFilter.FILTER_REJECT; - } else { - return NodeFilter.FILTER_ACCEPT; - } - }, function() { - cb({ - value: val, - nodes - }); - }); - } - }, { - key: "matchesExclude", - value: function matchesExclude(el) { - return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"])); - } - }, { - key: "wrapRangeInTextNode", - value: function wrapRangeInTextNode(node, start, end) { - var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start); - var repl = document.createElement(hEl); - repl.setAttribute("data-markjs", "true"); - if (this.opt.className) { - repl.setAttribute("class", this.opt.className); - } - repl.textContent = startNode.textContent; - startNode.parentNode.replaceChild(repl, startNode); - return ret; - } - }, { - key: "wrapRangeInMappedTextNode", - value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { - var _this5 = this; - dict.nodes.every(function(n, i) { - var sibl = dict.nodes[i + 1]; - if (typeof sibl === "undefined" || sibl.start > start) { - if (!filterCb(n.node)) { - return false; - } - var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start); - n.node = _this5.wrapRangeInTextNode(n.node, s, e); - dict.value = startStr + endStr; - dict.nodes.forEach(function(k, j) { - if (j >= i) { - if (dict.nodes[j].start > 0 && j !== i) { - dict.nodes[j].start -= e; - } - dict.nodes[j].end -= e; - } - }); - end -= e; - eachCb(n.node.previousSibling, n.start); - if (end > n.end) { - start = n.end; - } else { - return false; - } - } - return true; - }); - } - }, { - key: "wrapMatches", - value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { - var _this6 = this; - var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; - this.getTextNodes(function(dict) { - dict.nodes.forEach(function(node) { - node = node.node; - var match = void 0; - while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") { - if (!filterCb(match[matchIdx], node)) { - continue; - } - var pos = match.index; - if (matchIdx !== 0) { - for (var i = 1; i < matchIdx; i++) { - pos += match[i].length; - } - } - node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); - eachCb(node.previousSibling); - regex.lastIndex = 0; - } - }); - endCb(); - }); - } - }, { - key: "wrapMatchesAcrossElements", - value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { - var _this7 = this; - var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; - this.getTextNodes(function(dict) { - var match = void 0; - while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") { - var start = match.index; - if (matchIdx !== 0) { - for (var i = 1; i < matchIdx; i++) { - start += match[i].length; - } - } - var end = start + match[matchIdx].length; - _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) { - return filterCb(match[matchIdx], node); - }, function(node, lastIndex) { - regex.lastIndex = lastIndex; - eachCb(node); - }); - } - endCb(); - }); - } - }, { - key: "wrapRangeFromIndex", - value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { - var _this8 = this; - this.getTextNodes(function(dict) { - var originalLength = dict.value.length; - ranges.forEach(function(range, counter) { - var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid; - if (valid) { - _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) { - return filterCb(node, range, dict.value.substring(start, end), counter); - }, function(node) { - eachCb(node, range); - }); - } - }); - endCb(); - }); - } - }, { - key: "unwrapMatches", - value: function unwrapMatches(node) { - var parent = node.parentNode; - var docFrag = document.createDocumentFragment(); - while (node.firstChild) { - docFrag.appendChild(node.removeChild(node.firstChild)); - } - parent.replaceChild(docFrag, node); - if (!this.ie) { - parent.normalize(); - } else { - this.normalizeTextNode(parent); - } - } - }, { - key: "normalizeTextNode", - value: function normalizeTextNode(node) { - if (!node) { - return; - } - if (node.nodeType === 3) { - while (node.nextSibling && node.nextSibling.nodeType === 3) { - node.nodeValue += node.nextSibling.nodeValue; - node.parentNode.removeChild(node.nextSibling); - } - } else { - this.normalizeTextNode(node.firstChild); - } - this.normalizeTextNode(node.nextSibling); - } - }, { - key: "markRegExp", - value: function markRegExp(regexp, opt) { - var _this9 = this; - this.opt = opt; - this.log('Searching with expression "' + regexp + '"'); - var totalMatches = 0, fn = "wrapMatches"; - var eachCb = function eachCb2(element) { - totalMatches++; - _this9.opt.each(element); - }; - if (this.opt.acrossElements) { - fn = "wrapMatchesAcrossElements"; - } - this[fn](regexp, this.opt.ignoreGroups, function(match, node) { - return _this9.opt.filter(node, match, totalMatches); - }, eachCb, function() { - if (totalMatches === 0) { - _this9.opt.noMatch(regexp); - } - _this9.opt.done(totalMatches); - }); - } - }, { - key: "mark", - value: function mark(sv, opt) { - var _this10 = this; - this.opt = opt; - var totalMatches = 0, fn = "wrapMatches"; - var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) { - var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0; - _this10.log('Searching with expression "' + regex + '"'); - _this10[fn](regex, 1, function(term, node) { - return _this10.opt.filter(node, kw, totalMatches, matches); - }, function(element) { - matches++; - totalMatches++; - _this10.opt.each(element); - }, function() { - if (matches === 0) { - _this10.opt.noMatch(kw); - } - if (kwArr[kwArrLen - 1] === kw) { - _this10.opt.done(totalMatches); - } else { - handler2(kwArr[kwArr.indexOf(kw) + 1]); - } - }); - }; - if (this.opt.acrossElements) { - fn = "wrapMatchesAcrossElements"; - } - if (kwArrLen === 0) { - this.opt.done(totalMatches); - } else { - handler(kwArr[0]); - } - } - }, { - key: "markRanges", - value: function markRanges(rawRanges, opt) { - var _this11 = this; - this.opt = opt; - var totalMatches = 0, ranges = this.checkRanges(rawRanges); - if (ranges && ranges.length) { - this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges)); - this.wrapRangeFromIndex(ranges, function(node, range, match, counter) { - return _this11.opt.filter(node, range, match, counter); - }, function(element, range) { - totalMatches++; - _this11.opt.each(element, range); - }, function() { - _this11.opt.done(totalMatches); - }); - } else { - this.opt.done(totalMatches); - } - } - }, { - key: "unmark", - value: function unmark(opt) { - var _this12 = this; - this.opt = opt; - var sel = this.opt.element ? this.opt.element : "*"; - sel += "[data-markjs]"; - if (this.opt.className) { - sel += "." + this.opt.className; - } - this.log('Removal selector "' + sel + '"'); - this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) { - _this12.unwrapMatches(node); - }, function(node) { - var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node); - if (!matchesSel || matchesExclude) { - return NodeFilter.FILTER_REJECT; - } else { - return NodeFilter.FILTER_ACCEPT; - } - }, this.opt.done); - } - }, { - key: "opt", - set: function set$$1(val) { - this._opt = _extends({}, { - "element": "", - "className": "", - "exclude": [], - "iframes": false, - "iframesTimeout": 5e3, - "separateWordSearch": true, - "diacritics": true, - "synonyms": {}, - "accuracy": "partially", - "acrossElements": false, - "caseSensitive": false, - "ignoreJoiners": false, - "ignoreGroups": 0, - "ignorePunctuation": [], - "wildcards": "disabled", - "each": function each() { - }, - "noMatch": function noMatch() { - }, - "filter": function filter() { - return true; - }, - "done": function done() { - }, - "debug": false, - "log": window.console - }, val); - }, - get: function get$$1() { - return this._opt; - } - }, { - key: "iterator", - get: function get$$1() { - return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); - } - }]); - return Mark3; - }(); - function Mark2(ctx) { - var _this = this; - var instance = new Mark$1(ctx); - this.mark = function(sv, opt) { - instance.mark(sv, opt); - return _this; - }; - this.markRegExp = function(sv, opt) { - instance.markRegExp(sv, opt); - return _this; - }; - this.markRanges = function(sv, opt) { - instance.markRanges(sv, opt); - return _this; - }; - this.unmark = function(opt) { - instance.unmark(opt); - return _this; - }; - return this; - } - return Mark2; - }); - } -}); - -// lib/highlight.ts -var import_mark = __toESM(require_mark(), 1); -var PagefindHighlight = class { - constructor(options = { - markContext: null, - highlightParam: "pagefind-highlight", - markOptions: { - className: "pagefind-highlight", - exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] - }, - addStyles: true - }) { - var _a, _b; - const { highlightParam, markContext, markOptions, addStyles } = options; - this.highlightParam = highlightParam ?? "pagefind-highlight"; - this.addStyles = addStyles ?? true; - this.markContext = markContext !== void 0 ? markContext : null; - this.markOptions = markOptions !== void 0 ? markOptions : { - className: "pagefind-highlight", - exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] - }; - (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight"); - (_b = this.markOptions).exclude ?? (_b.exclude = [ - "[data-pagefind-ignore]", - "[data-pagefind-ignore] *" - ]); - this.markOptions.separateWordSearch = false; - this.highlight(); - } - getHighlightParams(paramName) { - const urlParams = new URLSearchParams(window.location.search); - return urlParams.getAll(paramName); - } - // Inline styles might be too hard to override - addHighlightStyles(className) { - if (!className) - return; - const styleElement = document.createElement("style"); - styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`; - document.head.appendChild(styleElement); - } - createMarkInstance() { - if (this.markContext) { - return new import_mark.default(this.markContext); - } - const pagefindBody = document.querySelectorAll("[data-pagefind-body]"); - if (pagefindBody.length !== 0) { - return new import_mark.default(pagefindBody); - } else { - return new import_mark.default(document.body); - } - } - markText(instance, text) { - instance.mark(text, this.markOptions); - } - highlight() { - const params = this.getHighlightParams(this.highlightParam); - if (!params || params.length === 0) - return; - this.addStyles && this.addHighlightStyles(this.markOptions.className); - const markInstance = this.createMarkInstance(); - this.markText(markInstance, params); - } -}; -window.PagefindHighlight = PagefindHighlight; -export { - PagefindHighlight as default -}; -/*! Bundled license information: - -mark.js/dist/mark.js: - (*!*************************************************** - * mark.js v8.11.1 - * https://markjs.io/ - * Copyright (c) 2014–2018, Julian Kühnel - * Released under the MIT license https://git.io/vwTVl - *****************************************************) -*/ diff --git a/pr-preview/pr-1220/pagefind/pagefind-modular-ui.css b/pr-preview/pr-1220/pagefind/pagefind-modular-ui.css deleted file mode 100644 index 9c6793ed2..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-modular-ui.css +++ /dev/null @@ -1,214 +0,0 @@ -:root { - --pagefind-ui-scale: 0.8; - --pagefind-ui-primary: #034AD8; - --pagefind-ui-fade: #707070; - --pagefind-ui-text: #393939; - --pagefind-ui-background: #ffffff; - --pagefind-ui-border: #eeeeee; - --pagefind-ui-tag: #eeeeee; - --pagefind-ui-border-width: 2px; - --pagefind-ui-border-radius: 8px; - --pagefind-ui-image-border-radius: 8px; - --pagefind-ui-image-box-ratio: 3 / 2; - --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", - "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", - "Lucida Grande", sans-serif; -} - -[data-pfmod-hidden] { - display: none !important; -} - -[data-pfmod-suppressed] { - opacity: 0 !important; - pointer-events: none !important; -} - -[data-pfmod-sr-hidden] { - -webkit-clip: rect(0 0 0 0) !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - height: 1px !important; - overflow: hidden !important; - overflow: clip !important; - position: absolute !important; - white-space: nowrap !important; - width: 1px !important; -} - -[data-pfmod-loading] { - color: var(--pagefind-ui-text); - background-color: var(--pagefind-ui-text); - border-radius: var(--pagefind-ui-border-radius); - opacity: 0.1; - pointer-events: none; -} - -/* Input */ - -.pagefind-modular-input-wrapper { - position: relative; -} - -.pagefind-modular-input-wrapper::before { - background-color: var(--pagefind-ui-text); - width: calc(18px * var(--pagefind-ui-scale)); - height: calc(18px * var(--pagefind-ui-scale)); - top: calc(23px * var(--pagefind-ui-scale)); - left: calc(20px * var(--pagefind-ui-scale)); - content: ""; - position: absolute; - display: block; - opacity: 0.7; - -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); - mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); - -webkit-mask-size: 100%; - mask-size: 100%; - z-index: 9; - pointer-events: none; -} - -.pagefind-modular-input { - height: calc(64px * var(--pagefind-ui-scale)); - padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); - background-color: var(--pagefind-ui-background); - border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); - border-radius: var(--pagefind-ui-border-radius); - font-size: calc(21px * var(--pagefind-ui-scale)); - position: relative; - appearance: none; - -webkit-appearance: none; - display: flex; - width: 100%; - box-sizing: border-box; - font-weight: 700; -} - -.pagefind-modular-input::placeholder { - opacity: 0.2; -} - -.pagefind-modular-input-clear { - position: absolute; - top: calc(2px * var(--pagefind-ui-scale)); - right: calc(2px * var(--pagefind-ui-scale)); - height: calc(60px * var(--pagefind-ui-scale)); - border-radius: var(--pagefind-ui-border-radius); - padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); - color: var(--pagefind-ui-text); - font-size: calc(14px * var(--pagefind-ui-scale)); - cursor: pointer; - background-color: var(--pagefind-ui-background); - border: none; - appearance: none; -} - -/* ResultList */ - -.pagefind-modular-list-result { - list-style-type: none; - display: flex; - align-items: flex-start; - gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); - padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); - border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); -} - -.pagefind-modular-list-result:last-of-type { - border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); -} - -.pagefind-modular-list-thumb { - width: min(30%, - calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); - max-width: calc(120px * var(--pagefind-ui-scale)); - margin-top: calc(10px * var(--pagefind-ui-scale)); - aspect-ratio: var(--pagefind-ui-image-box-ratio); - position: relative; -} - -.pagefind-modular-list-image { - display: block; - position: absolute; - left: 50%; - transform: translateX(-50%); - font-size: 0; - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; - border-radius: var(--pagefind-ui-image-border-radius); -} - -.pagefind-modular-list-inner { - flex: 1; - display: flex; - flex-direction: column; - align-items: flex-start; - margin-top: calc(10px * var(--pagefind-ui-scale)); -} - -.pagefind-modular-list-title { - display: inline-block; - font-weight: 700; - font-size: calc(21px * var(--pagefind-ui-scale)); - margin-top: 0; - margin-bottom: 0; -} - -.pagefind-modular-list-link { - color: var(--pagefind-ui-text); - text-decoration: none; -} - -.pagefind-modular-list-link:hover { - text-decoration: underline; -} - -.pagefind-modular-list-excerpt { - display: inline-block; - font-weight: 400; - font-size: calc(16px * var(--pagefind-ui-scale)); - margin-top: calc(4px * var(--pagefind-ui-scale)); - margin-bottom: 0; - min-width: calc(250px * var(--pagefind-ui-scale)); -} - -/* FilterPills */ - -.pagefind-modular-filter-pills-wrapper { - overflow-x: scroll; - padding: 15px 0; -} - -.pagefind-modular-filter-pills { - display: flex; - gap: 6px; -} - -.pagefind-modular-filter-pill { - display: flex; - justify-content: center; - align-items: center; - border: none; - appearance: none; - padding: 0 calc(24px * var(--pagefind-ui-scale)); - background-color: var(--pagefind-ui-background); - color: var(--pagefind-ui-fade); - border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); - border-radius: calc(25px * var(--pagefind-ui-scale)); - font-size: calc(18px * var(--pagefind-ui-scale)); - height: calc(50px * var(--pagefind-ui-scale)); - cursor: pointer; - white-space: nowrap; -} - -.pagefind-modular-filter-pill:hover { - border-color: var(--pagefind-ui-primary); -} - -.pagefind-modular-filter-pill[aria-pressed="true"] { - border-color: var(--pagefind-ui-primary); - color: var(--pagefind-ui-primary); -} \ No newline at end of file diff --git a/pr-preview/pr-1220/pagefind/pagefind-modular-ui.js b/pr-preview/pr-1220/pagefind/pagefind-modular-ui.js deleted file mode 100644 index 43f738f01..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-modular-ui.js +++ /dev/null @@ -1,8 +0,0 @@ -(()=>{var b=Object.defineProperty;var w=(i,e)=>{for(var t in e)b(i,t,{get:e[t],enumerable:!0})};var f={};w(f,{FilterPills:()=>h,Input:()=>l,Instance:()=>p,ResultList:()=>a,Summary:()=>o});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof i?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),l=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=0;for(;document.querySelector(`#pfmod-input-${s}`);)s+=1;let n=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});new r("label").attrs({for:`pfmod-input-${s}`,"data-pfmod-sr-hidden":"true"}).text("Search this site").addTo(n),this.inputEl=new r("input").id(`pfmod-input-${s}`).class("pagefind-modular-input").attrs({autocapitalize:"none",enterkeyhint:"search"}).addTo(n),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(n),n.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • -
    -
    -

    ${i(30)}

    -

    ${i(40)}

    -
    -
  • `},y=i=>{let e=new r("li").class("pagefind-modular-list-result"),t=new r("div").class("pagefind-modular-list-thumb").addTo(e);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(t);let s=new r("div").class("pagefind-modular-list-inner").addTo(e),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),e.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},d=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},a=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new d({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var o=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var h=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,c)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(c[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,c)=>n[0].localeCompare(c[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var P=async(i=50)=>await new Promise(e=>setTimeout(e,i)),u;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(u=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1])}catch{u="/pagefind/"}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??u,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await P(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e;try{e=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindComposable Instance"].join(` -`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/pr-preview/pr-1220/pagefind/pagefind-ui.css b/pr-preview/pr-1220/pagefind/pagefind-ui.css deleted file mode 100644 index d7984a98a..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-ui.css +++ /dev/null @@ -1 +0,0 @@ -.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"\2937 ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable="true"]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/pr-preview/pr-1220/pagefind/pagefind-ui.js b/pr-preview/pr-1220/pagefind/pagefind-ui.js deleted file mode 100644 index b637f554b..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind-ui.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{var bs=Object.defineProperty;var S=(n,e)=>{for(var t in e)bs(n,t,{get:e[t],enumerable:!0})};function z(){}function ft(n){return n()}function _n(){return Object.create(null)}function G(n){n.forEach(ft)}function $e(n){return typeof n=="function"}function K(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}var Qe;function ie(n,e){return Qe||(Qe=document.createElement("a")),Qe.href=e,n===Qe.href}function fn(n){return Object.keys(n).length===0}var dn=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global,de=class{constructor(e){this.options=e,this._listeners="WeakMap"in dn?new WeakMap:void 0}observe(e,t){return this._listeners.set(e,t),this._getObserver().observe(e,this.options),()=>{this._listeners.delete(e),this._observer.unobserve(e)}}_getObserver(){var e;return(e=this._observer)!==null&&e!==void 0?e:this._observer=new ResizeObserver(t=>{var s;for(let r of t)de.entries.set(r.target,r),(s=this._listeners.get(r.target))===null||s===void 0||s(r)})}};de.entries="WeakMap"in dn?new WeakMap:void 0;var hn=!1;function Ts(){hn=!0}function Cs(){hn=!1}function b(n,e){n.appendChild(e)}function y(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode&&n.parentNode.removeChild(n)}function Q(n,e){for(let t=0;tn.removeEventListener(e,t,s)}function E(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function ys(n){return Array.from(n.childNodes)}function N(n,e){e=""+e,n.data!==e&&(n.data=e)}function dt(n,e){n.value=e??""}function B(n,e,t){n.classList[t?"add":"remove"](e)}var et=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,s=null){this.e||(this.is_svg?this.e=ks(t.nodeName):this.e=C(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(s)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;tn.indexOf(s)===-1?e.push(s):t.push(s)),t.forEach(s=>s()),re=e}var xe=new Set,ee;function ae(){ee={r:0,c:[],p:ee}}function oe(){ee.r||G(ee.c),ee=ee.p}function D(n,e){n&&n.i&&(xe.delete(n),n.i(e))}function P(n,e,t,s){if(n&&n.o){if(xe.has(n))return;xe.add(n),ee.c.push(()=>{xe.delete(n),s&&(t&&n.d(1),s())}),n.o(e)}else s&&s()}function En(n,e){P(n,1,1,()=>{e.delete(n.key)})}function Rn(n,e,t,s,r,l,i,a,o,h,c,m){let p=n.length,d=l.length,_=p,u={};for(;_--;)u[n[_].key]=_;let f=[],T=new Map,R=new Map,M=[];for(_=d;_--;){let v=m(r,l,_),H=t(v),O=i.get(H);O?s&&M.push(()=>O.p(v,e)):(O=h(H,v),O.c()),T.set(H,f[_]=O),H in u&&R.set(H,Math.abs(_-u[H]))}let U=new Set,X=new Set;function V(v){D(v,1),v.m(a,c),i.set(v.key,v),c=v.first,d--}for(;p&&d;){let v=f[d-1],H=n[p-1],O=v.key,W=H.key;v===H?(c=v.first,p--,d--):T.has(W)?!i.has(O)||U.has(O)?V(v):X.has(W)?p--:R.get(O)>R.get(W)?(X.add(O),V(v)):(U.add(W),p--):(o(H,i),p--)}for(;p--;){let v=n[p];T.has(v.key)||o(v,i)}for(;d;)V(f[d-1]);return G(M),f}var ws=["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"],ma=new Set([...ws]);function bn(n,e,t){let s=n.$$.props[e];s!==void 0&&(n.$$.bound[s]=t,t(n.$$.ctx[s]))}function tt(n){n&&n.c()}function me(n,e,t,s){let{fragment:r,after_update:l}=n.$$;r&&r.m(e,t),s||_t(()=>{let i=n.$$.on_mount.map(ft).filter($e);n.$$.on_destroy?n.$$.on_destroy.push(...i):G(i),n.$$.on_mount=[]}),l.forEach(_t)}function ue(n,e){let t=n.$$;t.fragment!==null&&(vs(t.after_update),G(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Hs(n,e){n.$$.dirty[0]===-1&&(se.push(n),Ms(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{let _=d.length?d[0]:p;return h.ctx&&r(h.ctx[m],h.ctx[m]=_)&&(!h.skip_bound&&h.bound[m]&&h.bound[m](_),c&&Hs(n,m)),p}):[],h.update(),c=!0,G(h.before_update),h.fragment=s?s(h.ctx):!1,e.target){if(e.hydrate){Ts();let m=ys(e.target);h.fragment&&h.fragment.l(m),m.forEach(k)}else h.fragment&&h.fragment.c();e.intro&&D(n.$$.fragment),me(n,e.target,e.anchor,e.customElement),Cs(),gn()}fe(o)}var Fs;typeof HTMLElement=="function"&&(Fs=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:n}=this.$$;this.$$.on_disconnect=n.map(ft).filter($e);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(n,e,t){this[n]=t}disconnectedCallback(){G(this.$$.on_disconnect)}$destroy(){ue(this,1),this.$destroy=z}$on(n,e){if(!$e(e))return z;let t=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return t.push(e),()=>{let s=t.indexOf(e);s!==-1&&t.splice(s,1)}}$set(n){this.$$set&&!fn(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}});var q=class{$destroy(){ue(this,1),this.$destroy=z}$on(e,t){if(!$e(t))return z;let s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{let r=s.indexOf(t);r!==-1&&s.splice(r,1)}}$set(e){this.$$set&&!fn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function I(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=97&&e<=122||e>=65&&e<=90}function $(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=48&&e<=57}function Z(n){return I(n)||$(n)}var Tn=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var pt={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var Ns={}.hasOwnProperty;function nt(n,e={}){let t=Cn(),s=String(n),r=s.toLowerCase(),l=0;if(n==null)throw new Error("Expected string, got `"+n+"`");if(Ns.call(pt,r)){let a=pt[r];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof a=="string"?nt(a):(t[Tn.includes(r)?"regular":"irregular"]=s,t)}for(;I(r.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(t.language=s.slice(0,l),l<4){let a=0;for(;r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&!I(r.charCodeAt(l+4));){if(a>2)return i(l,3,"Too many extended language subtags, expected at most 3 subtags");t.extendedLanguageSubtags.push(s.slice(l+1,l+4)),l+=4,a++}}for(r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&I(r.charCodeAt(l+4))&&!I(r.charCodeAt(l+5))&&(t.script=s.slice(l+1,l+5),l+=5),r.charCodeAt(l)===45&&(I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&!I(r.charCodeAt(l+3))?(t.region=s.slice(l+1,l+3),l+=3):$(r.charCodeAt(l+1))&&$(r.charCodeAt(l+2))&&$(r.charCodeAt(l+3))&&!$(r.charCodeAt(l+4))&&(t.region=s.slice(l+1,l+4),l+=4));r.charCodeAt(l)===45;){let a=l+1,o=a;for(;Z(r.charCodeAt(o));){if(o-a>7)return i(o,1,"Too long variant, expected at most 8 characters");o++}if(o-a>4||o-a>3&&$(r.charCodeAt(a)))t.variants.push(s.slice(a,o)),l=o;else break}for(;r.charCodeAt(l)===45&&!(r.charCodeAt(l+1)===120||!Z(r.charCodeAt(l+1))||r.charCodeAt(l+2)!==45||!Z(r.charCodeAt(l+3)));){let a=l+2,o=0;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1))&&Z(r.charCodeAt(a+2));){let h=a+1;for(a=h+2,o++;Z(r.charCodeAt(a));){if(a-h>7)return i(a,2,"Too long extension, expected at most 8 characters");a++}}if(!o)return i(a,4,"Empty extension, extensions must have at least 2 characters of content");t.extensions.push({singleton:s.charAt(l+1),extensions:s.slice(l+3,a).split("-")}),l=a}}else l=0;if(l===0&&r.charCodeAt(l)===120||r.charCodeAt(l)===45&&r.charCodeAt(l+1)===120){l=l?l+2:1;let a=l;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1));){let o=l+1;for(a=o;Z(r.charCodeAt(a));){if(a-o>7)return i(a,5,"Too long private-use area, expected at most 8 characters");a++}t.privateuse.push(s.slice(l+1,a)),l=a}}if(l!==s.length)return i(l,6,"Found superfluous content after tag");return t;function i(a,o,h){return e.warning&&e.warning(h,o,a),e.forgiving?t:Cn()}}function Cn(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function kn(n,e,t){let s=n.slice();return s[8]=e[t][0],s[9]=e[t][1],s}function Os(n){let e,t,s,r,l,i=n[0]&&yn(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[3](30)}`,r=A(),l=C("p"),l.textContent=`${n[3](40)}`,E(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),E(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),E(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(a,o){i&&i.m(a,o),y(a,e,o),y(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=yn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function js(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,h,c=n[1].excerpt+"",m,p=n[0]&&Sn(n),d=n[2].length&&An(n);return{c(){p&&p.c(),e=A(),t=C("div"),s=C("p"),r=C("a"),i=w(l),o=A(),h=C("p"),m=A(),d&&d.c(),E(r,"class","pagefind-ui__result-link svelte-j9e30"),E(r,"href",a=n[1].meta?.url||n[1].url),E(s,"class","pagefind-ui__result-title svelte-j9e30"),E(h,"class","pagefind-ui__result-excerpt svelte-j9e30"),E(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(_,u){p&&p.m(_,u),y(_,e,u),y(_,t,u),b(t,s),b(s,r),b(r,i),b(t,o),b(t,h),h.innerHTML=c,b(t,m),d&&d.m(t,null)},p(_,u){_[0]?p?p.p(_,u):(p=Sn(_),p.c(),p.m(e.parentNode,e)):p&&(p.d(1),p=null),u&2&&l!==(l=_[1].meta?.title+"")&&N(i,l),u&2&&a!==(a=_[1].meta?.url||_[1].url)&&E(r,"href",a),u&2&&c!==(c=_[1].excerpt+"")&&(h.innerHTML=c),_[2].length?d?d.p(_,u):(d=An(_),d.c(),d.m(t,null)):d&&(d.d(1),d=null)},d(_){p&&p.d(_),_&&k(e),_&&k(t),d&&d.d()}}}function yn(n){let e;return{c(){e=C("div"),E(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(t,s){y(t,e,s)},d(t){t&&k(e)}}}function Sn(n){let e,t=n[1].meta.image&&Mn(n);return{c(){e=C("div"),t&&t.c(),E(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(s,r){y(s,e,r),t&&t.m(e,null)},p(s,r){s[1].meta.image?t?t.p(s,r):(t=Mn(s),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(s){s&&k(e),t&&t.d()}}}function Mn(n){let e,t,s;return{c(){e=C("img"),E(e,"class","pagefind-ui__result-image svelte-j9e30"),ie(e.src,t=n[1].meta?.image)||E(e,"src",t),E(e,"alt",s=n[1].meta?.image_alt||n[1].meta?.title)},m(r,l){y(r,e,l)},p(r,l){l&2&&!ie(e.src,t=r[1].meta?.image)&&E(e,"src",t),l&2&&s!==(s=r[1].meta?.image_alt||r[1].meta?.title)&&E(e,"alt",s)},d(r){r&&k(e)}}}function An(n){let e,t=n[2],s=[];for(let r=0;rn.toLocaleUpperCase();function Ds(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],h=async m=>{t(1,a=await m.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([p])=>!i.includes(p)))},c=(m=30)=>". ".repeat(Math.floor(10+Math.random()*m));return n.$$set=m=>{"show_images"in m&&t(0,s=m.show_images),"process_result"in m&&t(4,r=m.process_result),"result"in m&&t(5,l=m.result)},n.$$.update=()=>{if(n.$$.dirty&32)e:h(l)},[s,a,o,c,r,l]}var gt=class extends q{constructor(e){super(),Y(this,e,Ds,zs,K,{show_images:0,process_result:4,result:5})}},Hn=gt;function Fn(n,e,t){let s=n.slice();return s[11]=e[t][0],s[12]=e[t][1],s}function Nn(n,e,t){let s=n.slice();return s[15]=e[t],s}function Us(n){let e,t,s,r,l,i=n[0]&&On(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[5](30)}`,r=A(),l=C("p"),l.textContent=`${n[5](40)}`,E(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),E(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),E(t,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(a,o){i&&i.m(a,o),y(a,e,o),y(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=On(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Is(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,h,c,m=n[0]&&jn(n),p=n[4]&&Dn(n),d=n[3],_=[];for(let f=0;fn.toLocaleUpperCase();function Ls(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],h=[],c=!1,m=(_,u)=>{if(_.length<=u)return _;let f=[..._].sort((T,R)=>R.locations.length-T.locations.length).slice(0,3).map(T=>T.url);return _.filter(T=>f.includes(T.url))},p=async _=>{t(1,a=await _.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([u])=>!i.includes(u))),Array.isArray(a.sub_results)&&(t(4,c=a.sub_results?.[0]?.url===(a.meta?.url||a.url)),c?t(3,h=m(a.sub_results.slice(1),3)):t(3,h=m([...a.sub_results],3)))},d=(_=30)=>". ".repeat(Math.floor(10+Math.random()*_));return n.$$set=_=>{"show_images"in _&&t(0,s=_.show_images),"process_result"in _&&t(6,r=_.process_result),"result"in _&&t(7,l=_.result)},n.$$.update=()=>{if(n.$$.dirty&128)e:p(l)},[s,a,o,h,c,d,r,l]}var Et=class extends q{constructor(e){super(),Y(this,e,Ls,Ps,K,{show_images:0,process_result:6,result:7})}},qn=Et;function Bn(n,e,t){let s=n.slice();return s[10]=e[t][0],s[11]=e[t][1],s[12]=e,s[13]=t,s}function Vn(n,e,t){let s=n.slice();return s[14]=e[t][0],s[15]=e[t][1],s[16]=e,s[17]=t,s}function Wn(n){let e,t,s=n[4]("filters_label",n[5],n[6])+"",r,l,i=Object.entries(n[1]),a=[];for(let o=0;on.toLocaleUpperCase(),Zn=n=>n.toLowerCase();function Bs(n,e,t){let{available_filters:s=null}=e,{show_empty_filters:r=!0}=e,{open_filters:l=[]}=e,{translate:i=()=>""}=e,{automatic_translations:a={}}=e,{translations:o={}}=e,{selected_filters:h={}}=e,c=!1,m=!1;function p(d,_){h[`${d}:${_}`]=this.checked,t(0,h)}return n.$$set=d=>{"available_filters"in d&&t(1,s=d.available_filters),"show_empty_filters"in d&&t(2,r=d.show_empty_filters),"open_filters"in d&&t(3,l=d.open_filters),"translate"in d&&t(4,i=d.translate),"automatic_translations"in d&&t(5,a=d.automatic_translations),"translations"in d&&t(6,o=d.translations),"selected_filters"in d&&t(0,h=d.selected_filters)},n.$$.update=()=>{if(n.$$.dirty&258){e:if(s&&!c){t(8,c=!0);let d=Object.entries(s||{});d.length===1&&Object.entries(d[0][1])?.length<=6&&t(7,m=!0)}}},[h,s,r,l,i,a,o,m,c,p]}var Rt=class extends q{constructor(e){super(),Y(this,e,Bs,qs,K,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},Xn=Rt;var bt={};S(bt,{comments:()=>Ws,default:()=>Js,direction:()=>Gs,strings:()=>Ks,thanks_to:()=>Vs});var Vs="Jan Claasen ",Ws="",Gs="ltr",Ks={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},Js={thanks_to:Vs,comments:Ws,direction:Gs,strings:Ks};var Tt={};S(Tt,{comments:()=>Zs,default:()=>xs,direction:()=>Xs,strings:()=>Qs,thanks_to:()=>Ys});var Ys="Maruf Alom ",Zs="",Xs="ltr",Qs={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09DF\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09DF\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09DF\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]..."},xs={thanks_to:Ys,comments:Zs,direction:Xs,strings:Qs};var Ct={};S(Ct,{comments:()=>er,default:()=>sr,direction:()=>tr,strings:()=>nr,thanks_to:()=>$s});var $s="Pablo Villaverde ",er="",tr="ltr",nr={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9es resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]..."},sr={thanks_to:$s,comments:er,direction:tr,strings:nr};var kt={};S(kt,{comments:()=>lr,default:()=>or,direction:()=>ir,strings:()=>ar,thanks_to:()=>rr});var rr="Dalibor Hon ",lr="",ir="ltr",ar={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]..."},or={thanks_to:rr,comments:lr,direction:ir,strings:ar};var yt={};S(yt,{comments:()=>cr,default:()=>dr,direction:()=>_r,strings:()=>fr,thanks_to:()=>ur});var ur="Jonas Smedegaard ",cr="",_r="ltr",fr={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]..."},dr={thanks_to:ur,comments:cr,direction:_r,strings:fr};var St={};S(St,{comments:()=>mr,default:()=>Er,direction:()=>pr,strings:()=>gr,thanks_to:()=>hr});var hr="Jan Claasen ",mr="",pr="ltr",gr={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche f\xFCr [SEARCH_TERM]"},Er={thanks_to:hr,comments:mr,direction:pr,strings:gr};var Mt={};S(Mt,{comments:()=>br,default:()=>kr,direction:()=>Tr,strings:()=>Cr,thanks_to:()=>Rr});var Rr="Liam Bigelow ",br="",Tr="ltr",Cr={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},kr={thanks_to:Rr,comments:br,direction:Tr,strings:Cr};var At={};S(At,{comments:()=>Sr,default:()=>vr,direction:()=>Mr,strings:()=>Ar,thanks_to:()=>yr});var yr="Pablo Villaverde ",Sr="",Mr="ltr",Ar={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]..."},vr={thanks_to:yr,comments:Sr,direction:Mr,strings:Ar};var vt={};S(vt,{comments:()=>Hr,default:()=>Or,direction:()=>Fr,strings:()=>Nr,thanks_to:()=>wr});var wr="Valtteri Laitinen ",Hr="",Fr="ltr",Nr={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]..."},Or={thanks_to:wr,comments:Hr,direction:Fr,strings:Nr};var wt={};S(wt,{comments:()=>zr,default:()=>Ir,direction:()=>Dr,strings:()=>Ur,thanks_to:()=>jr});var jr="Nicolas Friedli ",zr="",Dr="ltr",Ur={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},Ir={thanks_to:jr,comments:zr,direction:Dr,strings:Ur};var Ht={};S(Ht,{comments:()=>Lr,default:()=>Vr,direction:()=>qr,strings:()=>Br,thanks_to:()=>Pr});var Pr="Pablo Villaverde ",Lr="",qr="ltr",Br={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},Vr={thanks_to:Pr,comments:Lr,direction:qr,strings:Br};var Ft={};S(Ft,{comments:()=>Gr,default:()=>Yr,direction:()=>Kr,strings:()=>Jr,thanks_to:()=>Wr});var Wr="Amit Yadav ",Gr="",Kr="ltr",Jr={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948..."},Yr={thanks_to:Wr,comments:Gr,direction:Kr,strings:Jr};var Nt={};S(Nt,{comments:()=>Xr,default:()=>$r,direction:()=>Qr,strings:()=>xr,thanks_to:()=>Zr});var Zr="Diomed ",Xr="",Qr="ltr",xr={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]..."},$r={thanks_to:Zr,comments:Xr,direction:Qr,strings:xr};var Ot={};S(Ot,{comments:()=>tl,default:()=>rl,direction:()=>nl,strings:()=>sl,thanks_to:()=>el});var el="Adam Laki ",tl="",nl="ltr",sl={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre..."},rl={thanks_to:el,comments:tl,direction:nl,strings:sl};var jt={};S(jt,{comments:()=>il,default:()=>ul,direction:()=>al,strings:()=>ol,thanks_to:()=>ll});var ll="Nixentric",il="",al="ltr",ol={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]..."},ul={thanks_to:ll,comments:il,direction:al,strings:ol};var zt={};S(zt,{comments:()=>_l,default:()=>hl,direction:()=>fl,strings:()=>dl,thanks_to:()=>cl});var cl="Cosette Bruhns Alonso, Andrew Janco ",_l="",fl="ltr",dl={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]..."},hl={thanks_to:cl,comments:_l,direction:fl,strings:dl};var Dt={};S(Dt,{comments:()=>pl,default:()=>Rl,direction:()=>gl,strings:()=>El,thanks_to:()=>ml});var ml="Tate",pl="",gl="ltr",El={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059"},Rl={thanks_to:ml,comments:pl,direction:gl,strings:El};var Ut={};S(Ut,{comments:()=>Tl,default:()=>yl,direction:()=>Cl,strings:()=>kl,thanks_to:()=>bl});var bl="Seokho Son ",Tl="",Cl="ltr",kl={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911..."},yl={thanks_to:bl,comments:Tl,direction:Cl,strings:kl};var It={};S(It,{comments:()=>Ml,default:()=>wl,direction:()=>Al,strings:()=>vl,thanks_to:()=>Sl});var Sl="",Ml="",Al="ltr",vl={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]..."},wl={thanks_to:Sl,comments:Ml,direction:Al,strings:vl};var Pt={};S(Pt,{comments:()=>Fl,default:()=>jl,direction:()=>Nl,strings:()=>Ol,thanks_to:()=>Hl});var Hl="Paul van Brouwershaven",Fl="",Nl="ltr",Ol={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},jl={thanks_to:Hl,comments:Fl,direction:Nl,strings:Ol};var Lt={};S(Lt,{comments:()=>Dl,default:()=>Pl,direction:()=>Ul,strings:()=>Il,thanks_to:()=>zl});var zl="Christopher Wingate",Dl="",Ul="ltr",Il={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},Pl={thanks_to:zl,comments:Dl,direction:Ul,strings:Il};var qt={};S(qt,{comments:()=>ql,default:()=>Wl,direction:()=>Bl,strings:()=>Vl,thanks_to:()=>Ll});var Ll="",ql="",Bl="ltr",Vl={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]..."},Wl={thanks_to:Ll,comments:ql,direction:Bl,strings:Vl};var Bt={};S(Bt,{comments:()=>Kl,default:()=>Zl,direction:()=>Jl,strings:()=>Yl,thanks_to:()=>Gl});var Gl="Jonatah",Kl="",Jl="ltr",Yl={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},Zl={thanks_to:Gl,comments:Kl,direction:Jl,strings:Yl};var Vt={};S(Vt,{comments:()=>Ql,default:()=>ei,direction:()=>xl,strings:()=>$l,thanks_to:()=>Xl});var Xl="Bogdan Mateescu ",Ql="",xl="ltr",$l={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]..."},ei={thanks_to:Xl,comments:Ql,direction:xl,strings:$l};var Wt={};S(Wt,{comments:()=>ni,default:()=>li,direction:()=>si,strings:()=>ri,thanks_to:()=>ti});var ti="Aleksandr Gordeev",ni="",si="ltr",ri={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]"},li={thanks_to:ti,comments:ni,direction:si,strings:ri};var Gt={};S(Gt,{comments:()=>ai,default:()=>ci,direction:()=>oi,strings:()=>ui,thanks_to:()=>ii});var ii="Andrija Sagicc",ai="",oi="ltr",ui={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]..."},ci={thanks_to:ii,comments:ai,direction:oi,strings:ui};var Kt={};S(Kt,{comments:()=>fi,default:()=>mi,direction:()=>di,strings:()=>hi,thanks_to:()=>_i});var _i="Montazar Al-Jaber ",fi="",di="ltr",hi={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]..."},mi={thanks_to:_i,comments:fi,direction:di,strings:hi};var Jt={};S(Jt,{comments:()=>gi,default:()=>bi,direction:()=>Ei,strings:()=>Ri,thanks_to:()=>pi});var pi="Anonymous",gi="",Ei="ltr",Ri={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]..."},bi={thanks_to:pi,comments:gi,direction:Ei,strings:Ri};var Yt={};S(Yt,{comments:()=>Ci,default:()=>Si,direction:()=>ki,strings:()=>yi,thanks_to:()=>Ti});var Ti="",Ci="",ki="ltr",yi={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1"},Si={thanks_to:Ti,comments:Ci,direction:ki,strings:yi};var Zt={};S(Zt,{comments:()=>Ai,default:()=>Hi,direction:()=>vi,strings:()=>wi,thanks_to:()=>Mi});var Mi="Taylan \xD6zg\xFCr Bildik",Ai="",vi="ltr",wi={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor..."},Hi={thanks_to:Mi,comments:Ai,direction:vi,strings:wi};var Xt={};S(Xt,{comments:()=>Ni,default:()=>zi,direction:()=>Oi,strings:()=>ji,thanks_to:()=>Fi});var Fi="Vladyslav Lyshenko ",Ni="",Oi="ltr",ji={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]"},zi={thanks_to:Fi,comments:Ni,direction:Oi,strings:ji};var Qt={};S(Qt,{comments:()=>Ui,default:()=>Li,direction:()=>Ii,strings:()=>Pi,thanks_to:()=>Di});var Di="Long Nhat Nguyen",Ui="",Ii="ltr",Pi={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]..."},Li={thanks_to:Di,comments:Ui,direction:Ii,strings:Pi};var xt={};S(xt,{comments:()=>Bi,default:()=>Gi,direction:()=>Vi,strings:()=>Wi,thanks_to:()=>qi});var qi="Amber Song",Bi="",Vi="ltr",Wi={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Gi={thanks_to:qi,comments:Bi,direction:Vi,strings:Wi};var $t={};S($t,{comments:()=>Ji,default:()=>Xi,direction:()=>Yi,strings:()=>Zi,thanks_to:()=>Ki});var Ki="Amber Song",Ji="",Yi="ltr",Zi={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F09\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u7D22",filters_label:"\u7BE9\u9078",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Xi={thanks_to:Ki,comments:Ji,direction:Yi,strings:Zi};var en={};S(en,{comments:()=>xi,default:()=>ta,direction:()=>$i,strings:()=>ea,thanks_to:()=>Qi});var Qi="Amber Song",xi="",$i="ltr",ea={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},ta={thanks_to:Qi,comments:xi,direction:$i,strings:ea};var na=[bt,Tt,Ct,kt,yt,St,Mt,At,vt,wt,Ht,Ft,Nt,Ot,jt,zt,Dt,Ut,It,Pt,Lt,qt,Bt,Vt,Wt,Gt,Kt,Jt,Yt,Zt,Xt,Qt,xt,$t,en],Qn=na,xn=["../../translations/af.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/nl.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function $n(n,e,t){let s=n.slice();return s[51]=e[t],s}function es(n){let e,t,s;function r(i){n[37](i)}let l={show_empty_filters:n[5],open_filters:n[6],available_filters:n[18],translate:n[20],automatic_translations:n[19],translations:n[7]};return n[0]!==void 0&&(l.selected_filters=n[0]),e=new Xn({props:l}),le.push(()=>bn(e,"selected_filters",r)),{c(){tt(e.$$.fragment)},m(i,a){me(e,i,a),s=!0},p(i,a){let o={};a[0]&32&&(o.show_empty_filters=i[5]),a[0]&64&&(o.open_filters=i[6]),a[0]&262144&&(o.available_filters=i[18]),a[0]&524288&&(o.automatic_translations=i[19]),a[0]&128&&(o.translations=i[7]),!t&&a[0]&1&&(t=!0,o.selected_filters=i[0],pn(()=>t=!1)),e.$set(o)},i(i){s||(D(e.$$.fragment,i),s=!0)},o(i){P(e.$$.fragment,i),s=!1},d(i){ue(e,i)}}}function ts(n){let e,t,s,r,l=[la,ra],i=[];function a(o,h){return o[14]?0:1}return t=a(n,[-1,-1]),s=i[t]=l[t](n),{c(){e=C("div"),s.c(),E(e,"class","pagefind-ui__results-area svelte-e9gkc3")},m(o,h){y(o,e,h),i[t].m(e,null),r=!0},p(o,h){let c=t;t=a(o,h),t===c?i[t].p(o,h):(ae(),P(i[c],1,1,()=>{i[c]=null}),oe(),s=i[t],s?s.p(o,h):(s=i[t]=l[t](o),s.c()),D(s,1),s.m(e,null))},i(o){r||(D(s),r=!0)},o(o){P(s),r=!1},d(o){o&&k(e),i[t].d()}}}function ra(n){let e,t,s,r=[],l=new Map,i,a,o;function h(u,f){return u[13].results.length===0?oa:u[13].results.length===1?aa:ia}let c=h(n,[-1,-1]),m=c(n),p=n[13].results.slice(0,n[17]),d=u=>u[51].id;for(let u=0;un[17]&&ss(n);return{c(){e=C("p"),m.c(),t=A(),s=C("ol");for(let u=0;uu[17]?_?_.p(u,f):(_=ss(u),_.c(),_.m(a.parentNode,a)):_&&(_.d(1),_=null)},i(u){if(!o){for(let f=0;f{o[p]=null}),oe(),r=o[s],r?r.p(e,m):(r=o[s]=a[s](e),r.c()),D(r,1),r.m(l.parentNode,l))},i(c){i||(D(r),i=!0)},o(c){P(r),i=!1},d(c){c&&k(t),o[s].d(c),c&&k(l)}}}function ss(n){let e,t=n[20]("load_more",n[19],n[7])+"",s,r,l;return{c(){e=C("button"),s=w(t),E(e,"type","button"),E(e,"class","pagefind-ui__button svelte-e9gkc3")},m(i,a){y(i,e,a),b(e,s),r||(l=J(e,"click",n[22]),r=!0)},p(i,a){a[0]&524416&&t!==(t=i[20]("load_more",i[19],i[7])+"")&&N(s,t)},d(i){i&&k(e),r=!1,l()}}}function rs(n){let e,t=n[20]("searching",n[19],n[7]).replace(/\[SEARCH_TERM\]/,n[16])+"",s;return{c(){e=C("p"),s=w(t),E(e,"class","pagefind-ui__message svelte-e9gkc3")},m(r,l){y(r,e,l),b(e,s)},p(r,l){l[0]&589952&&t!==(t=r[20]("searching",r[19],r[7]).replace(/\[SEARCH_TERM\]/,r[16])+"")&&N(s,t)},d(r){r&&k(e)}}}function _a(n){let e,t,s,r,l,i,a=n[20]("clear_search",n[19],n[7])+"",o,h,c,m,p,d,_,u,f=n[12]&&es(n),T=n[15]&&ts(n);return{c(){e=C("div"),t=C("form"),s=C("input"),l=A(),i=C("button"),o=w(a),h=A(),c=C("div"),f&&f.c(),m=A(),T&&T.c(),E(s,"class","pagefind-ui__search-input svelte-e9gkc3"),E(s,"type","text"),E(s,"placeholder",r=n[20]("placeholder",n[19],n[7])),E(s,"autocapitalize","none"),E(s,"enterkeyhint","search"),s.autofocus=n[8],E(i,"class","pagefind-ui__search-clear svelte-e9gkc3"),B(i,"pagefind-ui__suppressed",!n[9]),E(c,"class","pagefind-ui__drawer svelte-e9gkc3"),B(c,"pagefind-ui__hidden",!n[15]),E(t,"class","pagefind-ui__form svelte-e9gkc3"),E(t,"role","search"),E(t,"aria-label",p=n[20]("search_label",n[19],n[7])),E(t,"action","javascript:void(0);"),E(e,"class","pagefind-ui svelte-e9gkc3"),B(e,"pagefind-ui--reset",n[1])},m(R,M){y(R,e,M),b(e,t),b(t,s),dt(s,n[9]),n[34](s),b(t,l),b(t,i),b(i,o),n[35](i),b(t,h),b(t,c),f&&f.m(c,null),b(c,m),T&&T.m(c,null),d=!0,n[8]&&s.focus(),_||(u=[J(s,"focus",n[21]),J(s,"keydown",n[32]),J(s,"input",n[33]),J(i,"click",n[36]),J(t,"submit",fa)],_=!0)},p(R,M){(!d||M[0]&524416&&r!==(r=R[20]("placeholder",R[19],R[7])))&&E(s,"placeholder",r),(!d||M[0]&256)&&(s.autofocus=R[8]),M[0]&512&&s.value!==R[9]&&dt(s,R[9]),(!d||M[0]&524416)&&a!==(a=R[20]("clear_search",R[19],R[7])+"")&&N(o,a),(!d||M[0]&512)&&B(i,"pagefind-ui__suppressed",!R[9]),R[12]?f?(f.p(R,M),M[0]&4096&&D(f,1)):(f=es(R),f.c(),D(f,1),f.m(c,m)):f&&(ae(),P(f,1,1,()=>{f=null}),oe()),R[15]?T?(T.p(R,M),M[0]&32768&&D(T,1)):(T=ts(R),T.c(),D(T,1),T.m(c,null)):T&&(ae(),P(T,1,1,()=>{T=null}),oe()),(!d||M[0]&32768)&&B(c,"pagefind-ui__hidden",!R[15]),(!d||M[0]&524416&&p!==(p=R[20]("search_label",R[19],R[7])))&&E(t,"aria-label",p),(!d||M[0]&2)&&B(e,"pagefind-ui--reset",R[1])},i(R){d||(D(f),D(T),d=!0)},o(R){P(f),P(T),d=!1},d(R){R&&k(e),n[34](null),n[35](null),f&&f.d(),T&&T.d(),_=!1,G(u)}}}var fa=n=>n.preventDefault();function da(n,e,t){let s={},r=xn.map(g=>g.match(/([^\/]+)\.json$/)[1]);for(let g=0;gj[g]??F[g]??"";ht(()=>{let g=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",F=nt(g.toLocaleLowerCase());t(19,on=s[`${F.language}-${F.script}-${F.region}`]||s[`${F.language}-${F.region}`]||s[`${F.language}`]||s.en)}),mt(()=>{H?.destroy?.(),H=null});let un=async()=>{if(!rt&&(t(12,rt=!0),!H)){let g;try{g=await import(`${l}pagefind.js`)}catch(j){console.error(j),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` -`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}c||t(24,c=h?12:30);let F={...f||{},excerptLength:c};await g.options(F);for(let j of T){if(!j.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let L=j.bundlePath;delete j.bundlePath,await g.mergeIndex(L,j)}H=g,os()}},os=async()=>{H&&(an=await H.filters(),(!ce||!Object.keys(ce).length)&&t(18,ce=an))},us=g=>{let F={};return Object.entries(g).filter(([,j])=>j).forEach(([j])=>{let[L,te]=j.split(/:(.*)$/);F[L]=F[L]||[],F[L].push(te)}),F},_e,cs=async(g,F)=>{if(!g){t(15,it=!1),_e&&clearTimeout(_e);return}let j=us(F),L=()=>_s(g,j);u>0&&g?(_e&&clearTimeout(_e),_e=setTimeout(L,u),await cn(),H.preload(g,{filters:j})):L(),fs()},cn=async()=>{for(;!H;)un(),await new Promise(g=>setTimeout(g,50))},_s=async(g,F)=>{t(16,ln=g||""),typeof p=="function"&&(g=p(g)),t(14,lt=!0),t(15,it=!0),await cn();let j=++rn,L={filters:F};X&&typeof X=="object"&&(L.sort=X);let te=await H.search(g,L);rn===j&&(te.filters&&Object.keys(te.filters)?.length&&t(18,ce=te.filters),t(13,sn=te),t(14,lt=!1),t(17,at=i))},fs=()=>{let g=W.offsetWidth;g!=is&&t(10,O.style.paddingRight=`${g+2}px`,O)},ds=g=>{g?.preventDefault(),t(17,at+=i)},hs=g=>{g.key==="Escape"&&(t(9,v=""),O.blur()),g.key==="Enter"&&g.preventDefault()};function ms(){v=this.value,t(9,v),t(23,R)}function ps(g){le[g?"unshift":"push"](()=>{O=g,t(10,O)})}function gs(g){le[g?"unshift":"push"](()=>{W=g,t(11,W)})}let Es=()=>{t(9,v=""),O.blur()};function Rs(g){V=g,t(0,V)}return n.$$set=g=>{"base_path"in g&&t(25,l=g.base_path),"page_size"in g&&t(26,i=g.page_size),"reset_styles"in g&&t(1,a=g.reset_styles),"show_images"in g&&t(2,o=g.show_images),"show_sub_results"in g&&t(3,h=g.show_sub_results),"excerpt_length"in g&&t(24,c=g.excerpt_length),"process_result"in g&&t(4,m=g.process_result),"process_term"in g&&t(27,p=g.process_term),"show_empty_filters"in g&&t(5,d=g.show_empty_filters),"open_filters"in g&&t(6,_=g.open_filters),"debounce_timeout_ms"in g&&t(28,u=g.debounce_timeout_ms),"pagefind_options"in g&&t(29,f=g.pagefind_options),"merge_index"in g&&t(30,T=g.merge_index),"trigger_search_term"in g&&t(23,R=g.trigger_search_term),"translations"in g&&t(7,M=g.translations),"autofocus"in g&&t(8,U=g.autofocus),"sort"in g&&t(31,X=g.sort),"selected_filters"in g&&t(0,V=g.selected_filters)},n.$$.update=()=>{if(n.$$.dirty[0]&8388608)e:R&&(t(9,v=R),t(23,R=""));if(n.$$.dirty[0]&513)e:cs(v,V)},[V,a,o,h,m,d,_,M,U,v,O,W,rt,sn,lt,it,ln,at,ce,on,as,un,ds,R,c,l,i,p,u,f,T,X,hs,ms,ps,gs,Es,Rs]}var tn=class extends q{constructor(e){super(),Y(this,e,da,_a,K,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,sort:31,selected_filters:0},null,[-1,-1])}},ls=tn;var nn;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(nn=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{nn="/pagefind/"}var st=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",s=e.bundlePath??nn,r=e.pageSize??5,l=e.resetStyles??!0,i=e.showImages??!0,a=e.showSubResults??!1,o=e.excerptLength??0,h=e.processResult??null,c=e.processTerm??null,m=e.showEmptyFilters??!0,p=e.openFilters??[],d=e.debounceTimeoutMs??300,_=e.mergeIndex??[],u=e.translations??[],f=e.autofocus??!1,T=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.sort;let R=t instanceof HTMLElement?t:document.querySelector(t);R?this._pfs=new ls({target:R,props:{base_path:s,page_size:r,reset_styles:l,show_images:i,show_sub_results:a,excerpt_length:o,process_result:h,process_term:c,show_empty_filters:m,open_filters:p,debounce_timeout_ms:d,merge_index:_,translations:u,autofocus:f,sort:T,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[s,r]of Object.entries(e))if(Array.isArray(r))for(let l of r)t[`${s}:${l}`]=!0;else t[`${s}:${r}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};window.PagefindUI=st;})(); diff --git a/pr-preview/pr-1220/pagefind/pagefind.en_efb9a6be9b.pf_meta b/pr-preview/pr-1220/pagefind/pagefind.en_efb9a6be9b.pf_meta deleted file mode 100644 index 907c1401b..000000000 Binary files a/pr-preview/pr-1220/pagefind/pagefind.en_efb9a6be9b.pf_meta and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/pagefind.js b/pr-preview/pr-1220/pagefind/pagefind.js deleted file mode 100644 index b58a7da87..000000000 --- a/pr-preview/pr-1220/pagefind/pagefind.js +++ /dev/null @@ -1,9 +0,0 @@ -const pagefind_version="1.1.1";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString()}let wasm=undefined;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}let WASM_VECTOR_LEN=0;function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8Memory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr}__exports.init_pagefind=function(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0};const cachedTextEncoder=(typeof TextEncoder!=='undefined'?new TextEncoder('utf-8'):{encode:()=>{throw Error('TextEncoder not available')}});const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view)}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length}});function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8Memory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8Memory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8Memory0().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0}WASM_VECTOR_LEN=offset;return ptr}__exports.set_ranking_weights=function(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0};__exports.load_index_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0};__exports.load_filter_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0};__exports.add_synthetic_filter=function(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0};let cachedInt32Memory0=null;function getInt32Memory0(){if(cachedInt32Memory0===null||cachedInt32Memory0.byteLength===0){cachedInt32Memory0=new Int32Array(wasm.memory.buffer)}return cachedInt32Memory0}const cachedTextDecoder=(typeof TextDecoder!=='undefined'?new TextDecoder('utf-8',{ignoreBOM:true,fatal:true}):{decode:()=>{throw Error('TextDecoder not available')}});if(typeof TextDecoder!=='undefined'){cachedTextDecoder.decode()};function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr,ptr+len))}__exports.request_indexes=function(ptr,query){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_filter_indexes=function(ptr,filters){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_filter_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_all_filter_indexes=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.request_all_filter_indexes(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.filters=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.filters(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.search=function(ptr,query,filter,sort,exact){let deferred4_0;let deferred4_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;wasm.search(retptr,ptr,ptr0,len0,ptr1,len1,ptr2,len2,exact);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred4_0=r0;deferred4_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred4_0,deferred4_1,1)}};async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports)}catch(e){if(module.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}else{throw e}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports)}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module}}else{return instance}}}function __wbg_get_imports(){const imports={};imports.wbg={};return imports}function __wbg_init_memory(imports,maybe_memory){}function __wbg_finalize_init(instance,module){wasm=instance.exports;__wbg_init.__wbindgen_wasm_module=module;cachedInt32Memory0=null;cachedUint8Memory0=null;return wasm}function initSync(module){if(wasm!==undefined)return wasm;const imports=__wbg_get_imports();__wbg_init_memory(imports);if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module)}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module)}async function __wbg_init(input){if(wasm!==undefined)return wasm;if(typeof input==='undefined'&&typeof script_src!=='undefined'){input=script_src.replace(/\.js$/,'_bg.wasm')}const imports=__wbg_get_imports();if(typeof input==='string'||(typeof Request==='function'&&input instanceof Request)||(typeof URL==='function'&&input instanceof URL)){input=fetch(input)}__wbg_init_memory(imports);const{instance,module}=await __wbg_load(await input,imports);return __wbg_finalize_init(instance,module)}wasm_bindgen=Object.assign(__wbg_init,{initSync},__exports)})();var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2]}}}return co};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2]}return m};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)};var shft=function(p){return(p+7)/8|0};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){if(noSt)err(0);break}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2)};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)))}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score}if(words.length<=excerpt_length){return 0}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2]}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2)}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B")}else{fragment_words=content.split(/[\r\n\s]+/g)}for(let word of locations){if(fragment_words[word]?.startsWith(``)){continue}fragment_words[word]=`${fragment_words[word]}`}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length}if(start{const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:fragment.url,weighted_locations:[],locations:[],excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position}});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;current_anchor.excerpt=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);results.push(current_anchor)}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift()}let anchored_url=fragment.url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString()}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"")}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`)}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:""}}}add_result(anchors[0]?.location);return results};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms))};var PagefindInstance=class{constructor(opts={}){this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;this.basePath=opts.basePath||"/pagefind/";this.primary=opts.primary||false;if(this.primary&&!opts.basePath){this.initPrimary()}if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`}if(window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,"")}this.baseUrl=opts.baseUrl||this.defaultBaseUrl();if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`}this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.searchMeta=null;this.languages=null}initPrimary(){let derivedBasePath=import.meta.url.match(/^(.*\/)pagefind.js.*$/)?.[1];if(derivedBasePath){this.basePath=derivedBasePath}else{console.warn(["Pagefind couldn't determine the base of the bundle from the import path. Falling back to the default.","Set a basePath option when initialising Pagefind to ignore this message."].join("\n"))}}defaultBaseUrl(){let default_base=this.basePath.match(/^(.*\/)_?pagefind/)?.[1];return default_base||"/"}async options(options2){const opts=["basePath","baseUrl","indexWeight","excerptLength","mergeFilter","highlightParam","ranking"];for(const[k,v]of Object.entries(options2)){if(k==="mergeFilter"){let filters2=this.stringifyFilters(v);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}else if(k==="ranking"){await this.set_ranking(options2.ranking)}else if(opts.includes(k)){if(k==="basePath"&&typeof v==="string")this.basePath=v;if(k==="baseUrl"&&typeof v==="string")this.baseUrl=v;if(k==="indexWeight"&&typeof v==="number")this.indexWeight=v;if(k==="excerptLength"&&typeof v==="number")this.excerptLength=v;if(k==="mergeFilter"&&typeof v==="object")this.mergeFilter=v;if(k==="highlightParam"&&typeof v==="string")this.highlightParam=v}else{console.warn(`Unknown Pagefind option ${k}. Allowed options: [${opts.join(", ")}]`)}}}decompress(data,file="unknown file"){if(this.decoder.decode(data.slice(0,12))==="pagefind_dcd"){return data.slice(12)}data=gz_default(data);if(this.decoder.decode(data.slice(0,12))!=="pagefind_dcd"){console.error(`Decompressing ${file} appears to have failed: Missing signature`);return data}return data.slice(12)}async set_ranking(ranking){if(!ranking)return;let rankingWeights={term_similarity:ranking.termSimilarity??null,page_length:ranking.pageLength??null,term_saturation:ranking.termSaturation??null,term_frequency:ranking.termFrequency??null};let ptr=await this.getPtr();this.raw_ptr=this.backend.set_ranking_weights(ptr,JSON.stringify(rankingWeights))}async init(language,opts){await this.loadEntry();let index=this.findIndex(language);let lang_wasm=index.wasm?index.wasm:"unknown";let resources=[this.loadMeta(index.hash)];if(opts.load_wasm===true){resources.push(this.loadWasm(lang_wasm))}await Promise.all(resources);this.raw_ptr=this.backend.init_pagefind(new Uint8Array(this.searchMeta));if(Object.keys(this.mergeFilter)?.length){let filters2=this.stringifyFilters(this.mergeFilter);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}if(this.ranking){await this.set_ranking(this.ranking)}}async loadEntry(){try{let entry_response=await fetch(`${this.basePath}pagefind-entry.json?ts=${Date.now()}`);let entry_json=await entry_response.json();this.languages=entry_json.languages;if(entry_json.version!==this.version){if(this.primary){console.warn(["Pagefind JS version doesn't match the version in your search index.",`Pagefind JS: ${this.version}. Pagefind index: ${entry_json.version}`,"If you upgraded Pagefind recently, you likely have a cached pagefind.js file.","If you encounter any search errors, try clearing your cache."].join("\n"))}else{console.warn(["Merging a Pagefind index from a different version than the main Pagefind instance.",`Main Pagefind JS: ${this.version}. Merged index (${this.basePath}): ${entry_json.version}`,"If you encounter any search errors, make sure that both sites are running the same version of Pagefind."].join("\n"))}}}catch(e){console.error(`Failed to load Pagefind metadata: -${e?.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_resp=await fetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata")}catch(e){console.error(`Failed to load the meta index: -${e?.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await fetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM: -${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: -${e?.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_resp=await fetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}: -${e?.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let compressed_resp=await fetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment))}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash)}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"")}if(!fragment.raw_url){fragment.raw_url=fragment.url}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);fragment.excerpt=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/")}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString()}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString().replace(/^https:\/\/example\.com/,"")}catch(e2){return normalized}}}async getPtr(){while(this.raw_ptr===null){await asyncSleep(50)}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)")}return this.raw_ptr}parseFilters(str){let output={};if(!str)return output;for(const block of str.split("__PF_FILTER_DELIM__")){let[filter,values]=block.split(/:(.*)$/);output[filter]={};if(values){for(const valueBlock of values.split("__PF_VALUE_DELIM__")){if(valueBlock){let extract=valueBlock.match(/^(.*):(\d+)$/);if(extract){let[,value,count]=extract;output[filter][value]=parseInt(count)??count}}}}}return output}stringifyFilters(obj={}){return JSON.stringify(obj)}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`)}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`)}return`${sort}:${direction}`}return``}async filters(){let ptr=await this.getPtr();let filters2=this.backend.request_all_filter_indexes(ptr);let filter_chunks=filters2.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);ptr=await this.getPtr();let results=this.backend.filters(ptr);return this.parseFilters(results)}async preload(term,options2={}){await this.search(term,{...options2,preload:true})}async search(term,options2={}){options2={verbose:false,filters:{},sort:{},...options2};const log=(str)=>{if(options2.verbose)console.log(str)};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`)}term=term.toLowerCase().trim().replace(/[\.`~!@#\$%\^&\*\(\)\{\}\[\]\\\|:;'",<>\/\?\-]/g,"").replace(/\s{2,}/g," ").trim();log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}}}let sort_list=this.stringifySorts(options2.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options2.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let chunks=index_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options2.preload){log(`Preload \u2014 bailing out of search operation now.`);return null}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,filter_list,sort_list,exact_search);log(`Got the raw search result: ${result}`);let[unfilteredResultCount,all_results,filters2,totalFilters]=result.split(/:([^:]*):(.*)__PF_UNFILTERED_DELIM__(.*)$/);let filterObj=this.parseFilters(filters2);let totalFilterObj=this.parseFilters(totalFilters);log(`Remaining filters: ${JSON.stringify(result)}`);let results=all_results.length?all_results.split(" "):[];let resultsInterface=results.map((result2)=>{let[hash,score,all_locations]=result2.split("@");log(`Processing result: - hash:${hash} - score:${score} - locations:${all_locations}`);let weighted_locations=all_locations.length?all_locations.split(",").map((l)=>{let[weight,balanced_score,location]=l.split(">");return{weight:parseInt(weight)/24,balanced_score:parseFloat(balanced_score),location:parseInt(location)}}):[];let locations=weighted_locations.map((l)=>l.location);return{id:hash,score:parseFloat(score)*this.indexWeight,words:locations,data:async()=>await this.loadFragment(hash,weighted_locations,term)}});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);return{results:resultsInterface,unfilteredResultCount:parseInt(unfilteredResultCount),filters:filterObj,totalFilters:totalFilterObj,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}}}};var Pagefind=class{constructor(options2={}){this.backend=wasm_bindgen;this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options2,primary:true});this.instances=[this.primary];this.init(options2?.language)}async options(options2){await this.primary.options(options2)}async init(overrideLanguage){if(document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase()}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true})}async mergeIndex(indexPath,options2={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return}let newInstance=new PagefindInstance({primary:false,basePath:indexPath});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50)}await newInstance.init(options2.language||this.primaryLanguage,{load_wasm:false});delete options2["language"];await newInstance.options(options2)}mergeFilters(filters2){const merged={};for(const searchFilter of filters2){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count}}}}return merged}async filters(){let filters2=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters2)}async preload(term,options2={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options2)))}async debouncedSearch(term,options2,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options2);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null}const searchResult=await this.search(term,options2);if(thisSearchID!==this.searchID){return null}return searchResult}async search(term,options2={}){let search2=await Promise.all(this.instances.map((i2)=>i2.search(term,options2)));const filters2=this.mergeFilters(search2.map((s)=>s.filters));const totalFilters=this.mergeFilters(search2.map((s)=>s.totalFilters));const results=search2.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search2.map((s)=>s.timings);const unfilteredResultCount=search2.reduce((sum,s)=>sum+s.unfilteredResultCount,0);return{results,unfilteredResultCount,filters:filters2,totalFilters,timings}}};var pagefind=void 0;var initial_options=void 0;var init_pagefind=()=>{if(!pagefind){pagefind=new Pagefind(initial_options??{})}};var options=async(new_options)=>{if(pagefind){await pagefind.options(new_options)}else{initial_options=new_options}};var init=async()=>{init_pagefind()};var destroy=async()=>{pagefind=void 0;initial_options=void 0};var mergeIndex=async(indexPath,options2)=>{init_pagefind();return await pagefind.mergeIndex(indexPath,options2)};var search=async(term,options2)=>{init_pagefind();return await pagefind.search(term,options2)};var debouncedSearch=async(term,options2,debounceTimeoutMs=300)=>{init_pagefind();return await pagefind.debouncedSearch(term,options2,debounceTimeoutMs)};var preload=async(term,options2)=>{init_pagefind();return await pagefind.preload(term,options2)};var filters=async()=>{init_pagefind();return await pagefind.filters()};export{debouncedSearch,destroy,filters,init,mergeIndex,options,preload,search} \ No newline at end of file diff --git a/pr-preview/pr-1220/pagefind/wasm.en.pagefind b/pr-preview/pr-1220/pagefind/wasm.en.pagefind deleted file mode 100644 index 12d499fd1..000000000 Binary files a/pr-preview/pr-1220/pagefind/wasm.en.pagefind and /dev/null differ diff --git a/pr-preview/pr-1220/pagefind/wasm.unknown.pagefind b/pr-preview/pr-1220/pagefind/wasm.unknown.pagefind deleted file mode 100644 index 76b3ed377..000000000 Binary files a/pr-preview/pr-1220/pagefind/wasm.unknown.pagefind and /dev/null differ diff --git a/pr-preview/pr-1220/server-side-apply/index.html b/pr-preview/pr-1220/server-side-apply/index.html deleted file mode 100644 index a7fb47026..000000000 --- a/pr-preview/pr-1220/server-side-apply/index.html +++ /dev/null @@ -1,101 +0,0 @@ - Server-Side Apply | Grafana Tanka - - Skip to content

    Server-Side Apply

    Tanka supports -server-side apply, -which requires at least Kubernetes 1.16+, and was promoted to stable status in 1.22.

    -

    To enable server-side diff in tanka, add the following field to spec.json:

    -
    {
    "spec": {
    "applyStrategy": "server",
    }
    }
    -

    This also has the effect of changing the default diff strategy -to server, but this can be overridden via command line flags or spec.json.

    -

    While server-side apply doesn’t have any effect on the resources being applied -and is intended to be a general in-place upgrade to client-side apply, there are -differences in how fields are managed that can make converting existing cluster -resources a non-trival change.

    -

    Identifying and fixing these changes are beyond the scope of this guide, but -many can be found before an apply by using the validate or server -diff strategy.

    -

    Field conflicts

    -

    As part of the changes, you may encounter error messages which -recommend the use of the --force-conflicts flag. Using tk apply --force -in server-side mode will enable that flag for kubectl instead of -kubectl --force, which no longer has any effect in server-side mode.

    \ No newline at end of file diff --git a/pr-preview/pr-1220/sitemap-0.xml b/pr-preview/pr-1220/sitemap-0.xml deleted file mode 100644 index 8705c2fb6..000000000 --- a/pr-preview/pr-1220/sitemap-0.xml +++ /dev/null @@ -1 +0,0 @@ -https://tanka.dev/pr-preview/pr-1220/https://tanka.dev/pr-preview/pr-1220/completion/https://tanka.dev/pr-preview/pr-1220/config/https://tanka.dev/pr-preview/pr-1220/diff-strategy/https://tanka.dev/pr-preview/pr-1220/directory-structure/https://tanka.dev/pr-preview/pr-1220/env-vars/https://tanka.dev/pr-preview/pr-1220/exporting/https://tanka.dev/pr-preview/pr-1220/faq/https://tanka.dev/pr-preview/pr-1220/formatting/https://tanka.dev/pr-preview/pr-1220/garbage-collection/https://tanka.dev/pr-preview/pr-1220/helm/https://tanka.dev/pr-preview/pr-1220/inline-environments/https://tanka.dev/pr-preview/pr-1220/install/https://tanka.dev/pr-preview/pr-1220/internal/releasing/https://tanka.dev/pr-preview/pr-1220/jsonnet/injecting-values/https://tanka.dev/pr-preview/pr-1220/jsonnet/main/https://tanka.dev/pr-preview/pr-1220/jsonnet/native/https://tanka.dev/pr-preview/pr-1220/jsonnet/overview/https://tanka.dev/pr-preview/pr-1220/known-issues/https://tanka.dev/pr-preview/pr-1220/kustomize/https://tanka.dev/pr-preview/pr-1220/libraries/import-paths/https://tanka.dev/pr-preview/pr-1220/libraries/install-publish/https://tanka.dev/pr-preview/pr-1220/libraries/overriding/https://tanka.dev/pr-preview/pr-1220/namespaces/https://tanka.dev/pr-preview/pr-1220/output-filtering/https://tanka.dev/pr-preview/pr-1220/server-side-apply/https://tanka.dev/pr-preview/pr-1220/tutorial/abstraction/https://tanka.dev/pr-preview/pr-1220/tutorial/environments/https://tanka.dev/pr-preview/pr-1220/tutorial/jsonnet/https://tanka.dev/pr-preview/pr-1220/tutorial/k-lib/https://tanka.dev/pr-preview/pr-1220/tutorial/overview/https://tanka.dev/pr-preview/pr-1220/tutorial/parameters/https://tanka.dev/pr-preview/pr-1220/tutorial/refresher/ \ No newline at end of file diff --git a/pr-preview/pr-1220/sitemap-index.xml b/pr-preview/pr-1220/sitemap-index.xml deleted file mode 100644 index 595c1875e..000000000 --- a/pr-preview/pr-1220/sitemap-index.xml +++ /dev/null @@ -1 +0,0 @@ -https://tanka.dev/pr-preview/pr-1220/sitemap-0.xml \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/abstraction/index.html b/pr-preview/pr-1220/tutorial/abstraction/index.html deleted file mode 100644 index 5b38ac599..000000000 --- a/pr-preview/pr-1220/tutorial/abstraction/index.html +++ /dev/null @@ -1,121 +0,0 @@ - Abstraction | Grafana Tanka - - Skip to content

    Abstraction

    While we won’t need to touch the resource definitions directly that frequently -anymore now that our deployments definitions are parametrized, the -main.jsonnet file is still very long and hard to read. Especially because of -all the brackets, it’s even worse than yaml at the moment.

    -

    Splitting it up

    -

    Let’s start cleaning this up by separating logical pieces into distinct files:

    -
      -
    • main.jsonnet: Still our main file, importing the other files
    • -
    • grafana.libsonnet: Deployment and Service for the Grafana instance
    • -
    • prometheus.libsonnet: Deployment and Service for the Prometheus server
    • -
    - -
    /environments/default/grafana.libsonnet
    {
    new(name, port)::{
    deployment: {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
    name: name,
    },
    spec: {
    selector: {
    matchLabels: {
    name: name,
    },
    },
    template: {
    metadata: {
    labels: {
    name: name,
    },
    },
    spec: {
    containers: [
    {
    image: 'grafana/grafana',
    name: name,
    ports: [{
    containerPort: port,
    name: 'ui',
    }],
    },
    ],
    },
    },
    },
    },
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: name,
    },
    name: name,
    },
    spec: {
    ports: [{
    name: '%s-ui' % name,
    port: port,
    targetPort: port,
    }],
    selector: {
    name: name,
    },
    type: 'NodePort',
    },
    },
    }
    }
    -

    The file should contain an object with the same function that was defined under the grafana in /environments/default/main.jsonnet, but called new instead of grafana. -Do the same for /environments/default/prometheus.libsonnet as well.

    -
    /environments/default/main.jsonnet
    local grafana = import "grafana.libsonnet";
    local prometheus = import "prometheus.libsonnet";
    -
    {
    grafana: grafana.new("grafana", 3000),
    prometheus: prometheus.new("prometheus", 9090),
    }
    -

    Helper utilities

    -

    While main.jsonnet is now short and very readable, the other two files are not -really an improvement over regular yaml, mostly because they are still full of -boilerplate.

    -

    Let’s use functions to create some useful helpers to reduce the amount of -repetition. For that, we create a new file called kubernetes.libsonnet, which -will hold our Kubernetes utilities.

    -

    A Deployment constructor

    -

    Creating a Deployment requires some mandatory information and a lot of -boilerplate. A function that creates one could look like this:

    -
    /environments/default/kubernetes.libsonnet
    {
    deployment: {
    new(name, containers):: {
    apiVersion: "apps/v1",
    kind: "Deployment",
    metadata: {
    name: name,
    },
    spec: {
    selector: { matchLabels: {
    name: name,
    }},
    template: {
    metadata: { labels: {
    name: name,
    }},
    spec: { containers: containers }
    }
    }
    }
    }
    }
    -

    Invoking this function will substitute all the variables with the respective -passed function parameters and return the assembled object.

    -

    Let’s simplify our grafana.libsonnet a bit:

    -
    local k = import "kubernetes.libsonnet";
    -
    {
    new(name, port):: {
    deployment: k.deployment.new(name, [{
    image: 'grafana/grafana',
    name: name,
    ports: [{
    containerPort: port,
    name: 'ui',
    }],
    }]),
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: name,
    },
    name: name,
    },
    spec: {
    ports: [{
    name: '%s-ui' % name,
    port: port,
    targetPort: port,
    }],
    selector: {
    name: name,
    },
    type: 'NodePort',
    },
    },
    }
    }
    -

    This drastically simplified the creation of the Deployment, because we do not -need to remember how exactly a Deployment is structured anymore. Just use -our helper and you are good to go.

    -
    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/environments/index.html b/pr-preview/pr-1220/tutorial/environments/index.html deleted file mode 100644 index 7f9f9d715..000000000 --- a/pr-preview/pr-1220/tutorial/environments/index.html +++ /dev/null @@ -1,149 +0,0 @@ - Environments | Grafana Tanka - - Skip to content

    Environments

    At this point, our configuration is already flexible and concise, but not -really reusable. Let’s take a look at Tanka’s third buzzword as well: Environments.

    -

    These days, the same piece of software is usually deployed many times inside a -single organization. This could be dev, testing and prod environments, but -also regions (europe, us, asia) or individual customers (foo-corp, -bar-gmbh, baz-inc).

    -

    Most of the application however is exactly the same across those environments … -usually only configuration, scaling or small details are different after all. -YAML (and thus kubectl) provides us only one solution here: Duplicating the -directory, changing the details, maintaining both. But what if you have 32 -environments? Correct! Then you have to maintain 32 directories of YAML. And we can all -imagine the nightmare of these files drifting apart from each other.

    -

    But again, Jsonnet can be the solution: By extracting the actual objects -into a library, you can import them in as many environments as you need!

    -

    Creating a library

    -

    A library is nothing special, just a folder of .libsonnet files somewhere in the import paths:

    - - - - - - - - - - - - - - - - - -
    PathDescription
    /libCustom, user-created libraries only for this project.
    /vendorExternal libraries installed using Jsonnet-bundler
    -

    So for our purpose /lib fits best, as we are only creating it for our current -project. Let’s set one up:

    -
    Terminal window
    mkdir lib/prom-grafana # a folder for our prom-grafana library
    cd lib/prom-grafana
    -
    # inside lib/prom-grafana:
    touch prom-grafana.libsonnet # library file that will be imported
    touch config.libsonnet # _config and images
    -

    For documentation purposes it is handy to have a separate file for parameters and used images:

    -
    config.libsonnet
    {
    // +:: is important (we don't want to override the
    // _config object, just add to it)
    _config+:: {
    // define a namespace for this library
    promgrafana: {
    grafana: {
    port: 3000,
    name: "grafana",
    },
    prometheus: {
    port: 9090,
    name: "prometheus"
    }
    }
    },
    -
    // again, make sure to use +::
    _images+:: {
    promgrafana: {
    grafana: "grafana/grafana",
    prometheus: "prom/prometheus",
    }
    }
    }
    -
    prom-grafana.libsonnet
    local k = import "ksonnet-util/kausal.libsonnet";
    -
    (import "./config.libsonnet") +
    {
    local deployment = k.apps.v1.deployment,
    local container = k.core.v1.container,
    local port = k.core.v1.containerPort,
    local service = k.core.v1.service,
    -
    // alias our params, too long to type every time
    local c = $._config.promgrafana,
    -
    promgrafana: {
    prometheus: {
    deployment: deployment.new(
    name=c.prometheus.name, replicas=1,
    containers=[
    container.new(c.prometheus.name, $._images.promgrafana.prometheus)
    + container.withPorts([port.new("api", c.prometheus.port)]),
    ],
    ),
    service: k.util.serviceFor(self.deployment),
    },
    -
    grafana: {
    deployment: deployment.new(
    name=c.grafana.name, replicas=1,
    containers=[
    container.new(c.grafana.name, $._images.promgrafana.grafana)
    + container.withPorts([port.new("ui", c.grafana.port)]),
    ],
    ),
    service:
    k.util.serviceFor(self.deployment)
    + service.mixin.spec.withType("NodePort"),
    },
    }
    }
    -

    Dev and Prod

    -

    So far we have only used the environments/default environment. Let’s create some real ones:

    -
    Terminal window
    tk env add environments/prom-grafana/dev --namespace=prom-grafana-dev # one for dev ...
    tk env add environments/prom-grafana/prod --namespace=prom-grafana-prod # and one for prod
    - -

    All that’s left now is importing the library and configuring it. For dev, the defaults defined in /lib/prom-grafana/config.libsonnet should be sufficient, so we do not override anything:

    -
    /environments/prom-grafana/dev
    import "prom-grafana/prom-grafana.libsonnet"
    -

    For prod however, it is a bad idea to rely on latest for the images .. let’s -add some proper tags:

    -
    /environments/prom-grafana/prod
    (import "prom-grafana/prom-grafana.libsonnet") +
    {
    // again, we only want to patch, not replace, thus +::
    _images+:: {
    // we update this one entirely, so we can replace this one (:)
    promgrafana: {
    prometheus: "prom/prometheus:v2.14",
    grafana: "grafana/grafana:6.5.2"
    }
    }
    }
    -

    Patching

    -

    The above works well for libraries we control ourselves, but what when another -team wrote the library, it was installed using jb from GitHub or you can’t -change it easily?

    -

    Here comes the already familiar +: (or +::) syntax into play. It allows to -partially override values of an object. Let’s say we wanted to add some labels to the Prometheus Deployment, but our _config params don’t allow us to. We can still do this in our main.jsonnet:

    -
    (import "prom-grafana/prom-grafana.libsonnet") +
    {
    promgrafana+: {
    prometheus+: {
    deployment+: {
    metadata+: {
    labels+: {
    foo: "bar"
    }
    }
    }
    }
    }
    }
    -

    By using the +: operator all the time and only foo: "bar" uses “:”, we only -override the value of "foo", while leaving the rest of the object like it was.

    -

    Let’s check it worked:

    -
    Terminal window
    tk show environments/prom-grafana/patched -t deployment/prometheus
    -
    Output
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    labels:
    foo: bar # <- There it is!
    name: prometheus
    namespace: default
    spec:
    minReadySeconds: 10
    replicas: 1
    revisionHistoryLimit: 10
    selector:
    matchLabels:
    name: prometheus
    template:
    metadata:
    labels:
    name: prometheus
    spec:
    containers:
    - image: prom/prometheus
    imagePullPolicy: IfNotPresent
    name: prometheus
    ports:
    - containerPort: 9090
    name: api
    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/jsonnet/index.html b/pr-preview/pr-1220/tutorial/jsonnet/index.html deleted file mode 100644 index 08b8d7479..000000000 --- a/pr-preview/pr-1220/tutorial/jsonnet/index.html +++ /dev/null @@ -1,212 +0,0 @@ - Using Jsonnet | Grafana Tanka - - Skip to content

    Using Jsonnet

    The most powerful piece of Tanka is the Jsonnet data templating -language. Jsonnet is a superset of JSON, adding variables, -functions, patching (deep merging), arithmetic, conditionals and many more to -it.

    -

    It has a lot in common with more real programming languages such as JavaScript -than with markup languages, still it is tailored specifically to representing -data and configuration. As opposed to JSON (and YAML) it is a language meant for -humans, not for computers.

    -

    Creating a new project

    -

    To get started with Tanka and Jsonnet, let’s initiate a new project, in which we will install both Prometheus and Grafana into our Kubernetes cluster:

    -
    Terminal window
    mkdir prom-grafana && cd prom-grafana # create a new folder for the project and change to it
    tk init # initiate a new project
    -

    This gives us the following directory structure:

    -
    • Directoryenvironments -
      • Directorydefault default environment -
        • main.jsonnet main file (important!)
        • spec.json environment’s config
      • jsonnetfile.json
      • Directorylib/ libraries
      • Directoryvendor/ external libraries
    -

    For the moment, we only really care about the environments/default folder. The -purpose of the other directories will be explained later in this guide (mostly -related to libraries).

    -

    Environments

    -

    When using Tanka, you apply configuration for an Environment to a -Kubernetes cluster. An Environment is some logical group of pieces that form -an application stack.

    -

    Grafana Labs for example runs Loki, -Cortex and of course -Grafana for our Grafana -Cloud hosted offering. For each of these, we have a -separate environment. Furthermore, we like to see changes to our code in -separate dev setups to make sure they are all good for production usage – so -we have dev and prod environments for each app as well, as prod -environments usually require other configuration (secrets, scale, etc) than -dev. This roughly leaves us with the following:

    - - - - - - - - - - - - - - - - - - - - - - - -
    EnvironmentLokiCortexGrafana
    prodName: /environments/loki/prod
    Namespace: loki-prod
    Name: /environments/cortex/prod
    Namespace: cortex-prod
    Name: /environments/grafana/prod
    Namespace: grafana-prod
    devName: /environments/loki/dev
    Namespace: loki-dev
    Name: /environments/cortex/dev
    Namespace: cortex-dev
    Name: /environments/grafana/dev
    Namespace: grafana-dev
    -

    There is no limit in Environment complexity, create as many as you need to model -your own requirements. Grafana Labs for example also has all of these multiplied per -high-availability region.

    -

    To get started, a single environment is enough. Lets use the automatically -created environnments/default for that.

    -

    Defining Resources

    -

    While kubectl loads all .yaml files in a certain folder, Tanka has a single -file that serves as the canonical source for all contents of an environment, -called main.jsonnet. This is just like Go has the main.go or C++ the -main.cpp.

    -

    Similar to JSON, each .jsonnet file holds a single object. The one returned by -main.jsonnet will hold all of your Kubernetes resources:

    -
    main.jsonnet
    {
    "some_deployment": { /* ... */ },
    "some_service": { /* ... */ }
    }
    -

    They may be deeply nested, Tanka extracts everything that looks like a -Kubernetes resource automatically.

    -

    So let’s rewrite the previous .yaml to -very basic .jsonnet:

    -
    /environments/default/main.jsonnet
    {
    // Grafana
    grafana: {
    deployment: {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
    name: 'grafana',
    },
    spec: {
    selector: {
    matchLabels: {
    name: 'grafana',
    },
    },
    template: {
    metadata: {
    labels: {
    name: 'grafana',
    },
    },
    spec: {
    containers: [
    {
    image: 'grafana/grafana',
    name: 'grafana',
    ports: [{
    containerPort: 3000,
    name: 'ui',
    }],
    },
    ],
    },
    },
    },
    },
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: 'grafana',
    },
    name: 'grafana',
    },
    spec: {
    ports: [{
    name: 'grafana-ui',
    port: 3000,
    targetPort: 3000,
    }],
    selector: {
    name: 'grafana',
    },
    type: 'NodePort',
    },
    },
    },
    -
    // Prometheus
    prometheus: {
    deployment: {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
    name: 'prometheus',
    },
    spec: {
    minReadySeconds: 10,
    replicas: 1,
    revisionHistoryLimit: 10,
    selector: {
    matchLabels: {
    name: 'prometheus',
    },
    },
    template: {
    metadata: {
    labels: {
    name: 'prometheus',
    },
    },
    spec: {
    containers: [
    {
    image: 'prom/prometheus',
    imagePullPolicy: 'IfNotPresent',
    name: 'prometheus',
    ports: [
    {
    containerPort: 9090,
    name: 'api',
    },
    ],
    },
    ],
    },
    },
    },
    },
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: 'prometheus',
    },
    name: 'prometheus',
    },
    spec: {
    ports: [
    {
    name: 'prometheus-api',
    port: 9090,
    targetPort: 9090,
    },
    ],
    selector: {
    name: 'prometheus',
    },
    },
    },
    },
    }
    -

    At the moment, this is even more verbose because we have effectively converted -YAML to JSON, which requires more characters by design.

    -

    But Jsonnet opens up enough possibilities to improve this a lot, which will be -covered in the next sections.

    -

    Taking a look at the generated resources

    -

    So far so good, but can we make sure Tanka correctly finds our resources? We -can! By running tk show you can see the good old yaml, just as kubectl -receives it:

    -
    /prom-grafana $
    # run from the project root:
    tk show environments/default
    -
    Output
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: grafana
    spec:
    selector:
    # ...
    -

    Spend some time here and try to identify resources from the output in the -.jsonnet source.

    - -

    Connecting to the cluster

    -

    The YAML looks as expected? Let’s apply it to the cluster. To do so, Tanka needs -some additional configuration.

    -

    While kubectl uses a $KUBECONFIG environment variable and a file in the home -directory to store the currently selected cluster, Tanka takes a more explicit -approach:

    -

    Each environment has a file called spec.json, which includes the information -to select a cluster:

    -
    {
    "apiVersion": "tanka.dev/v1alpha1",
    "kind": "Environment",
    "metadata": {
    "name": "default"
    },
    "spec": {
    "apiServer": "https://127.0.0.1:6443", // cluster to use
    "namespace": "monitoring" // default namespace for all created resources
    }
    }
    -

    You still have to setup a cluster in $KUBECONFIG that matches this IP – Tanka -will automatically find and use it. This also means that all of your kubectl -clusters just work.

    -

    This allows us to make sure that you will never accidentally apply to the wrong -cluster.

    - -

    Verifying the changes

    -

    Before applying to the cluster, Tanka gives you a chance to check that your -changes actually behave as expected: tk diff works just like git diff – you -see what will be changed.

    -
    /prom-grafana $
    tk diff environments/default
    -
    Output
    --- /tmp/LIVE-610130621/apps.v1.Deployment.monitoring.grafana 2019-12-17 20:14:45.213363586 +0100
    +++ /tmp/MERGED-517481208/apps.v1.Deployment.monitoring.grafana 2019-12-17 20:14:45.213363586 +0100
    @@ -0,0 +1,45 @@
    +apiVersion: apps/v1
    +kind: Deployment
    +metadata:
    + name: grafana
    + namespace: monitoring
    + # ...
    +spec:
    + selector:
    + matchLabels:
    + name: grafana
    + strategy:
    + rollingUpdate:
    + maxSurge: 25%
    + maxUnavailable: 25%
    + type: RollingUpdate
    + template:
    + metadata:
    + creationTimestamp: null
    + labels:
    + name: grafana
    + spec:
    + containers:
    + - image: grafana/grafana
    + imagePullPolicy: IfNotPresent
    + # ...
    -

    As you can see, it shows everything as to-be created .. just as we’d expect, -since we are using a blank namespace.

    - -

    Applying to the cluster

    -

    Once it’s all looking good, tk apply serves the exact same purpose as kubectl apply:

    -
    /prom-grafana $
    tk apply environments/default
    -
    Applying to namespace 'monitoring' of cluster 'default' at 'https://127.0.0.1:6443' using context 'default'.
    Please type 'yes' to confirm: yes
    deployment.apps/grafana created
    deployment.apps/prometheus created
    service/grafana created
    service/prometheus created
    -

    It shows you the diff first and the chosen cluster once more and requires -interactive approval (type yes).

    -

    After that, kubectl is used to apply to the cluster. By piping to -kubectl Tanka makes sure it behaves exactly as you would expect it. No -edge-cases of differing Kubernetes client implementations should ever occur.

    -

    Checking it worked

    -

    Again, let’s connect to Grafana:

    -
    Terminal window
    kubectl port-forward --namespace=monitoring deployments/grafana 8080:3000
    -

    And go to http://localhost:8080 for Grafana’s UI.

    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/k-lib/index.html b/pr-preview/pr-1220/tutorial/k-lib/index.html deleted file mode 100644 index b985f7b38..000000000 --- a/pr-preview/pr-1220/tutorial/k-lib/index.html +++ /dev/null @@ -1,166 +0,0 @@ - Kubernetes library | Grafana Tanka - - Skip to content

    Kubernetes library

    The last section has shown that using a library for creating Kubernetes objects -can drastically simplify the code you need to write. However, there is a huge -amount of different kinds of objects and the Kubernetes API is evolving (and -thus changing) quite rapidly.

    -

    Writing and maintaining such a library could be a full-time job on it’s own. -Luckily, it is possible to generate such a library from the Kubernetes OpenAPI -specification! Even better, it has already been done for you.

    -

    k8s-libsonnet

    -

    The library is called k8s-libsonnet (replacing the discontinued ksonnet-lib), -currently available at https://github.com/jsonnet-libs/k8s-libsonnet.

    - -

    As k8s-libsonnet has broken compatibility in a few places with ksonnet-lib (for good -reason), we have instrumented the widely used ksonnet-util library with a -compatibility layer to improve the developer and user experience: -https://github.com/grafana/jsonnet-libs/tree/master/ksonnet-util

    -

    If you do not have any strong reasons against it, just adopt the wrapper as -well, it will ease your work. Many of the original ksonnet-util enhancements -have already made their way into k8s-libsonnet.

    -

    The docs for k8s-libsonnet library can be found here: -https://jsonnet-libs.github.io/k8s-libsonnet/

    -

    Installation

    -

    Like every other external library, k8s-libsonnet can be installed using -jsonnet-bundler. -However, Tanka already did this for you during project -creation (tk init):

    -
    Terminal window
    tk init
    jb install github.com/jsonnet-libs/k8s-libsonnet/1.21@main github.com/grafana/jsonnet-libs/ksonnet-util
    -

    This created the following structure in /vendor:

    -
    • Directoryvendor -
      • Directorygithub.com -
        • Directorygrafana -
          • Directoryjsonnet-libs -
            • Directoryksonnet-util -
              • kausal.libsonnet # Grafana’s wrapper
        • Directoryjsonnet-libs -
          • Directoryk8s-libsonnet -
            • Directory1.21 -
              • main.libsonnet # k8s-libsonnet entrypoint
      • Directory1.21/ -> github.com/jsonnet-libs/k8s-libsonnet/1.21
      • Directoryksonnet-util/ -> github.com/grafana/jsonnet-libs/ksonnet-util
    - -

    Aliasing

    -

    Because of how jb works, the library can be imported as -github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet. Most external -libraries (including our wrapper) expect it as a simple k.libsonnet (without -the package prefix).

    -

    To support both, Tanka automatically created an alias file for you: -/lib/k.libsonnet that just imports the actual library, exposing it under this -alternative name as well.

    - -

    Using it

    -

    First we need to import it in main.jsonnet:

    -
    local k = import "kubernetes.libsonnet";
    local k = import "github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet";
    local grafana = import "grafana.libsonnet";
    local prometheus = import "prometheus.libsonnet";
    { /* ... */ }
    - -

    Now that we have installed the correct version, let’s use it in -/environments/default/grafana.libsonnet instead of our own helper:

    -
    /environments/default/grafana.libsonnet
    local k = import "github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet";
    -
    {
    // use locals to extract the parts we need
    local deploy = k.apps.v1.deployment,
    local container = k.core.v1.container,
    local port = k.core.v1.containerPort,
    local service = k.core.v1.service,
    // defining the objects:
    new(name, port):: {
    // deployment constructor: name, replicas, containers
    deployment: deploy.new(name, replicas=1, containers=[
    // container constructor
    container.new(, "grafana/grafana")
    + container.withPorts( // add ports to the container
    [port.new("ui", 3000)] // port constructor
    ),
    ]),
    -
    // instead of using a service constructor, our wrapper provides
    // a handy helper to automatically generate a service for a Deployment
    service: k.util.serv.util.serviceFor(self.deployment)
    + service.mixin.spec.withType("NodePort"),
    }
    }
    -

    Full example

    -

    Now that creating the individual objects does not take more than 5 lines, we can -merge it all back into a single file (main.jsonnet) and take a look at the -whole picture:

    -
    local k = import "github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet";
    -
    {
    local deployment = k.apps.v1.deployment,
    local container = k.core.v1.container,
    local port = k.core.v1.containerPort,
    local service = k.core.v1.service,
    -
    prometheus: {
    deployment: deployment.new(
    name="prometheus", replicas=1,
    containers=[
    container.new("prometheus", "prom/prometheus")
    + container.withPorts([port.new("api", 9090)]),
    ],
    ),
    service: k.util.serviceFor(self.deployment),
    },
    grafana: {
    deployment: deployment.new(
    name="grafana", replicas=1,
    containers=[
    container.new("grafana", "grafana/grafana")
    + container.withPorts([port.new("ui", 3000)]),
    ],
    ),
    service:
    k.util.serviceFor(self.deployment)
    + service.mixin.spec.withType("NodePort"),
    },
    }
    -

    That’s a pretty big improvement, considering how verbose and error-prone it was -before!

    -

    Bonus: Config object

    -

    While this is already a huge improvement, we can do a bit more. There is still some repetition in the main.jsonnet file. -The most straightforward way to address this is by creating a hidden object that holds all actual values in a single place to be consumed by the actual resources.

    -

    Luckily, Jsonnet has the key:: "value" stanza for private fields. Such are only available during compiling and will be removed from the actual output.

    -

    Such an object could look like this:

    -
    {
    _config:: {
    grafana: {
    port: 3000,
    name: "grafana",
    },
    prometheus: {
    port: 9090,
    name: "prometheus"
    }
    }
    }
    -

    We can then replace hardcoded values with a reference to this object:

    -
    local k = import "github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet";
    -
    { // <- This is $
    _config:: {
    grafana: {
    port: 3000,
    name: "grafana",
    },
    prometheus: {
    port: 9090,
    name: "prometheus"
    }
    }
    -
    local deployment = k.apps.v1.deployment,
    local container = k.core.v1.container,
    local port = k.core.v1.containerPort,
    local service = k.core.v1.service,
    -
    prometheus: {
    deployment: deployment.new(
    name="prometheus", replicas=1,
    // $ refers to the outermost object
    name=$._config.prometheus.name, replicas=1,
    containers=[
    container.new("prometheus", "prom/prometheus")
    + container.withPorts([port.new("api", 9090)]),
    container.new($._config.prometheus.name, "prom/prometheus")
    + container.withPorts([port.new("api", $._config.prometheus.port)]),
    ],
    ),
    service: k.util.serviceFor(self.deployment),
    },
    grafana: {
    deployment: deployment.new(
    name="grafana", replicas=1,
    name=$._config.grafana.name, replicas=1,
    containers=[
    container.new("grafana", "grafana/grafana")
    + container.withPorts([port.new("ui", 3000)]),
    container.new($._config.grafana.name, "grafana/grafana")
    + container.withPorts([port.new("ui", $._config.grafana.port)]),
    ],
    ),
    service:
    k.util.serviceFor(self.deployment)
    + service.mixin.spec.withType("NodePort"),
    },
    }
    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/overview/index.html b/pr-preview/pr-1220/tutorial/overview/index.html deleted file mode 100644 index b85305735..000000000 --- a/pr-preview/pr-1220/tutorial/overview/index.html +++ /dev/null @@ -1,102 +0,0 @@ - Overview | Grafana Tanka - - Skip to content

    Overview

    Learning how to use Tanka

    -

    Welcome to the Tanka tutorial! -The following sections will explain how to deploy an example stack, -(Grafana and -Prometheus), to Kubernetes. We will also deal with parameters, differences between dev and prod and how to stop worrying and love libraries.

    -

    To do so, we have the following steps:

    -
      -
    1. Deploying without Tanka first: Using good old kubectl to understand what Tanka will do for us.
    2. -
    3. Using Jsonnet: Doing the same thing once again, but this time with Tanka and Jsonnet.
    4. -
    5. Parameterizing: Using Variables to avoid data duplication.
    6. -
    7. Abstraction: Splitting components into individual parts.
    8. -
    9. Environments: Dealing with differences between dev and prod.
    10. -
    11. k.libsonnet: Avoid having to remember API resources.
    12. -
    -

    Completing this gives a solid knowledge of Tanka’s fundamentals. Let’s get started!

    -

    Resources

    -
    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/parameters/index.html b/pr-preview/pr-1220/tutorial/parameters/index.html deleted file mode 100644 index 54f81d813..000000000 --- a/pr-preview/pr-1220/tutorial/parameters/index.html +++ /dev/null @@ -1,103 +0,0 @@ - Parameterizing | Grafana Tanka - - Skip to content

    Parameterizing

    Deploying using Tanka worked well, but it did not really improve the situation -in terms of maintainability and readability.

    -

    To do so, the following sections will explore some ways Jsonnet provides us with.

    -

    Functions parameters

    -

    Defining our deployment in a single block is not the best solution. -Luckily with Jsonnet we can split our configuration into smaller, self-contained chunks.

    -

    Let’s start by creating a new function in main.jsonnet responsible for creating a Grafana deployment:

    -
    environments/default/main.jsonnet
    local grafana() = {
    deployment: {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
    name: 'grafana',
    },
    spec: {
    selector: {
    matchLabels: {
    name: 'grafana',
    },
    },
    template: {
    metadata: {
    labels: {
    name: 'grafana',
    },
    },
    spec: {
    containers: [
    {
    image: 'grafana/grafana',
    name: 'grafana',
    ports: [{
    containerPort: 3000,
    name: 'ui',
    }],
    },
    ],
    },
    },
    },
    },
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: 'grafana',
    },
    name: 'grafana',
    },
    spec: {
    ports: [{
    name: 'grafana-ui',
    port: 3000,
    targetPort: 3000,
    }],
    selector: {
    name: 'grafana',
    },
    type: 'NodePort',
    },
    },
    };
    -

    and let’s use it in our main configuration:

    -
    environments/default/main.jsonnet
    local grafana() = {
    # ...
    };
    -
    {
    grafana: {
    # ...
    },
    grafana: grafana(),
    prometheus: #...
    };
    -

    We can then replace hardcoded values by adding parameters to our function:

    -
    environments/default/main.jsonnet
    local grafana() = {
    local grafana(name, port) = {
    deployment: {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
    name: 'grafana',
    name: name,
    },
    spec: {
    selector: {
    matchLabels: {
    name: 'grafana',
    name: name,
    },
    },
    template: {
    metadata: {
    labels: {
    name: 'grafana',
    name: name,
    },
    },
    spec: {
    containers: [
    {
    image: 'grafana/grafana',
    name: 'grafana',
    name: name,
    ports: [{
    containerPort: 3000,
    containerPort: port,
    name: 'ui',
    }],
    },
    ],
    },
    },
    },
    },
    service: {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
    labels: {
    name: 'grafana',
    name: name,
    },
    name: 'grafana',
    name: name,
    },
    spec: {
    ports: [{
    name: 'grafana-ui',
    port: 3000,
    targetPort: 3000,
    name: '%s-ui' % name, // printf-style formatting
    port: port,
    targetPort: port,
    }],
    selector: {
    name: 'grafana',
    name: name,
    },
    type: 'NodePort',
    },
    },
    };
    -

    and update the usage accordingly:

    -
    environments/default/main.jsonnet
    local grafana(name, port) = {
    # ...
    };
    -
    {
    grafana: grafana(),
    grafana: grafana('grafana', 3000),
    prometheus: #...
    };
    - -

    Now we do not only have a single place to change tunables, but also won’t suffer -from mismatching labels and selectors anymore, as they are defined in a single -place and all changed at once.

    -
    \ No newline at end of file diff --git a/pr-preview/pr-1220/tutorial/refresher/index.html b/pr-preview/pr-1220/tutorial/refresher/index.html deleted file mode 100644 index 32aa8bde8..000000000 --- a/pr-preview/pr-1220/tutorial/refresher/index.html +++ /dev/null @@ -1,132 +0,0 @@ - Refresher on deploying | Grafana Tanka - - Skip to content

    Refresher on deploying

    Deploying to Kubernetes using kubectl

    -

    To understand how Tanka works, it is important to know what steps are required -for the task of deploying Grafana and Prometheus to Kubernetes:

    -
      -
    1. Prometheus -
        -
      • A Deployment must be created, to run the prom/prometheus image
      • -
      • Also a Service is needed for Grafana to be able to connect port 9090 of -Prometheus.
      • -
      -
    2. -
    3. Grafana -
        -
      • Another Deployment is required for the Grafana server.
      • -
      • To connect to the web interface, we will be using a Service of type -NodePort.
      • -
      -
    4. -
    -

    Before taking a look how Tanka can help doing so, let’s recall how to do it with -plain kubectl.

    -

    Writing the yaml

    -

    kubectl expects the resources it should create in .yaml format. -For Grafana:

    -
    grafana.yaml
    # Grafana server Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: grafana
    spec:
    selector:
    matchLabels:
    name: grafana
    template:
    metadata:
    labels:
    name: grafana
    spec:
    containers:
    - image: grafana/grafana
    name: grafana
    ports:
    - containerPort: 3000
    name: ui
    ---
    # Grafana UI Service NodePort
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    name: grafana
    name: grafana
    spec:
    ports:
    - name: grafana-ui
    port: 3000
    targetPort: 3000
    selector:
    name: grafana
    type: NodePort
    -

    and for Prometheus:

    -
    prometheus.yaml
    # Prometheus server Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: prometheus
    spec:
    selector:
    matchLabels:
    name: prometheus
    template:
    metadata:
    labels:
    name: prometheus
    spec:
    containers:
    - image: prom/prometheus
    name: prometheus
    ports:
    - containerPort: 9090
    name: api
    ---
    # Prometheus API Service
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    name: prometheus
    name: prometheus
    spec:
    ports:
    - name: prometheus-api
    port: 9090
    targetPort: 9090
    selector:
    name: prometheus
    -

    That’s pretty verbose, right?

    -

    Even worse, there are labels and matchers (e.g. prometheus) that need to be -exactly the same scattered across the file. It’s a nightmare to debug and -furthermore harms readability a lot.

    -

    Deploying to the cluster

    -

    To actually apply those resources, copy them into .yaml files and use:

    -
    Terminal window
    kubectl apply -f prometheus.yaml -f grafana.yaml
    -
    deployment.apps/grafana created
    deployment.apps/prometheus created
    service/grafana created
    service/prometheus created
    -

    Checking it worked

    -

    So far so good, but can we tell it actually did what we wanted? Let’s test that -Grafana can connect to Prometheus!

    -
    Terminal window
    # Temporarily forward Grafana to localhost
    kubectl port-forward deployments/grafana 8080:3000
    -

    Now go to http://localhost:8080 in your browser and login using admin:admin. -Then navigate to Connections > Data sources > Add new data source, choose -Prometheus as type and enter http://prometheus:9090 as URL. Hit -Save & Test which should yield a big green bar telling you everything is good.

    -

    Cool! This worked out well for this small example, but the .yaml files are -hard to read and maintain. Especially when you need to deploy this exact same -thing in dev and prod your choices are very limited.

    -

    Let’s explore how Tanka can help us here in the next section!

    -

    Cleaning up

    -

    Let’s remove everything we created to start fresh with Jsonnet in the next section:

    -
    Terminal window
    kubectl delete -f prometheus.yaml -f grafana.yaml
    \ No newline at end of file