You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asyncband.apache.org by gi...@apache.org on 2026/08/27 15:20:25 UTC
(asyncband-site) branch site/readme-homepage-staging created (now 72c5cc9)
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a change to branch site/readme-homepage-staging
in repository https://gitbox.apache.org/repos/asf/asyncband-site.git
at 72c5cc9 deploy: d97559606129c3428cee2936bc659e5d969a4685
This branch includes the following new commits:
new 72c5cc9 deploy: d97559606129c3428cee2936bc659e5d969a4685
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@asyncband.apache.org
For additional commands, e-mail: commits-help@asyncband.apache.org
(asyncband-site) 01/01: deploy: d97559606129c3428cee2936bc659e5d969a4685
Posted by gi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch site/readme-homepage-staging
in repository https://gitbox.apache.org/repos/asf/asyncband-site.git
commit 72c5cc9795b5707454513e1c59fec1c8501cd130
Author: tisonkun <ti...@users.noreply.github.com>
AuthorDate: Thu Aug 27 15:20:16 2026 +0000
deploy: d97559606129c3428cee2936bc659e5d969a4685
---
.asf.yaml | 58 ++
.nojekyll | 0
_app/immutable/assets/0.TIf4dhQM.css | 1 +
_app/immutable/chunks/Bjy-W4x2.js | 81 ++
_app/immutable/chunks/CxoQY3RK.js | 3 +
_app/immutable/chunks/DSSJbiWa.js | 1 +
_app/immutable/chunks/DwkfN_Oh.js | 1 +
_app/immutable/chunks/HclGiUj8.js | 1 +
_app/immutable/chunks/n0taT9Jf.js | 1 +
_app/immutable/chunks/xihTtKlq.js | 1 +
_app/immutable/entry/app.DIYMU9I8.js | 2 +
_app/immutable/entry/start.Cl1OLO5u.js | 1 +
_app/immutable/nodes/0.DCxkMMr2.js | 9 +
_app/immutable/nodes/1.bZz5CF26.js | 1 +
_app/immutable/nodes/2.DS6763y0.js | 18 +
_app/immutable/nodes/3.CiLdXDCG.js | 1 +
_app/immutable/nodes/4.X79hs0zb.js | 9 +
_app/immutable/nodes/5.BHyEEWNf.js | 1 +
_app/immutable/nodes/6.BPmDjQA3.js | 9 +
_app/immutable/nodes/7.CdhQN81N.js | 1 +
_app/version.json | 1 +
asf-logo.svg | 58 ++
docs/about/index.html | 63 ++
docs/getting-started/index.html | 71 ++
docs/primitives/index.html | 63 ++
docs/runtime/index.html | 71 ++
downloads/index.html | 62 ++
favicon.svg | 29 +
index.html | 80 ++
og.png | Bin 0 -> 614429 bytes
pagefind/fragment/en_2beaedc.pf_fragment | Bin 0 -> 1201 bytes
pagefind/fragment/en_4a72d96.pf_fragment | Bin 0 -> 666 bytes
pagefind/fragment/en_5c77291.pf_fragment | Bin 0 -> 1242 bytes
pagefind/fragment/en_b553db3.pf_fragment | Bin 0 -> 208 bytes
pagefind/fragment/en_e391299.pf_fragment | Bin 0 -> 891 bytes
pagefind/index/en_d027e2f.pf_index | Bin 0 -> 4333 bytes
pagefind/pagefind-component-ui.css | 1509 ++++++++++++++++++++++++++++++
pagefind/pagefind-component-ui.js | 56 ++
pagefind/pagefind-entry.json | 1 +
pagefind/pagefind-highlight.js | 1070 +++++++++++++++++++++
pagefind/pagefind-modular-ui.css | 214 +++++
pagefind/pagefind-modular-ui.js | 8 +
pagefind/pagefind-ui.css | 1 +
pagefind/pagefind-ui.js | 2 +
pagefind/pagefind-worker.js | 6 +
pagefind/pagefind.en_29e16dd0ca.pf_meta | Bin 0 -> 135 bytes
pagefind/pagefind.js | 6 +
pagefind/wasm.en.pagefind | Bin 0 -> 72209 bytes
pagefind/wasm.unknown.pagefind | Bin 0 -> 68024 bytes
robots.txt | 3 +
50 files changed, 3574 insertions(+)
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 0000000..d821940
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,58 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# See https://github.com/apache/infrastructure-asfyaml/ for the configuration reference.
+
+github:
+ description: Apache Asyncband (Incubating) Website
+ homepage: https://asyncband.apache.org/
+ features:
+ issues: true
+ projects: false
+ wiki: false
+ labels:
+ - asyncband
+ - sveltekit
+ - website
+ enabled_merge_buttons:
+ squash: true
+ merge: false
+ rebase: false
+ pull_requests:
+ del_branch_on_merge: true
+ rulesets:
+ - name: Protect site branches
+ type: branch
+ branches:
+ includes:
+ - main
+ - asf-site
+ restrict_deletion: true
+ restrict_force_push: true
+
+staging:
+ profile: ~
+ whoami: asf-site
+ autostage: site/*
+
+publish:
+ whoami: asf-site
+
+notifications:
+ commits: commits@asyncband.apache.org
+ pullrequests: commits@asyncband.apache.org
+ jobs: commits@asyncband.apache.org
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/_app/immutable/assets/0.TIf4dhQM.css b/_app/immutable/assets/0.TIf4dhQM.css
new file mode 100644
index 0000000..df8ee37
--- /dev/null
+++ b/_app/immutable/assets/0.TIf4dhQM.css
@@ -0,0 +1 @@
+:root{color:#1c1e21;--primary:#3071a9;--primary-dark:#285f8f;--text:#1c1e21;--muted:#525860;--subtle:#606770;--border:#dadde1;--surface:#f5f6f7;--navbar-height:60px;--sidebar-width:300px;text-rendering:optimizelegibility;background:#fff;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-weight:400;line-height:1.65}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:#fff;min-width:320px;margin:0}a{color:var(--p [...]
diff --git a/_app/immutable/chunks/Bjy-W4x2.js b/_app/immutable/chunks/Bjy-W4x2.js
new file mode 100644
index 0000000..84c97e7
--- /dev/null
+++ b/_app/immutable/chunks/Bjy-W4x2.js
@@ -0,0 +1,81 @@
+var e=({status:e,message:t})=>`<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <title>`+t+`</title>
+
+ <style>
+ body {
+ --bg: white;
+ --fg: #222;
+ --divider: #ccc;
+ background: var(--bg);
+ color: var(--fg);
+ font-family:
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ 'Segoe UI',
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ 'Open Sans',
+ 'Helvetica Neue',
+ sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+ }
+
+ .error {
+ display: flex;
+ align-items: center;
+ max-width: 32rem;
+ margin: 0 1rem;
+ }
+
+ .status {
+ font-weight: 200;
+ font-size: 3rem;
+ line-height: 1;
+ position: relative;
+ top: -0.05rem;
+ }
+
+ .message {
+ border-left: 1px solid var(--divider);
+ padding: 0 0 0 1rem;
+ margin: 0 0 0 1rem;
+ min-height: 2.5rem;
+ display: flex;
+ align-items: center;
+ }
+
+ .message h1 {
+ font-weight: 400;
+ font-size: 1em;
+ margin: 0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ --bg: #222;
+ --fg: #ddd;
+ --divider: #666;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ <div class="error">
+ <span class="status">`+e+`</span>
+ <div class="message">
+ <h1>`+t+`</h1>
+ </div>
+ </div>
+ </body>
+</html>
+`;export{e as default};
\ No newline at end of file
diff --git a/_app/immutable/chunks/CxoQY3RK.js b/_app/immutable/chunks/CxoQY3RK.js
new file mode 100644
index 0000000..f6aed8d
--- /dev/null
+++ b/_app/immutable/chunks/CxoQY3RK.js
@@ -0,0 +1,3 @@
+var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=Array.isArray,r=Array.prototype.indexOf,i=Array.prototype.includes,a=Array.from,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyDescriptors,l=Object.prototype,u=Array.prototype,d=Object.getPrototypeOf,f=Object.isExtensible;function p(e){return typeof e==`function`}var m=()=>{};function h(e){for(var t=0;t<e.l [...]
+`).some(e=>e.startsWith(`https://svelte.dev/e/`)))throw r;return r!==Re&&console.warn(`Failed to hydrate: `,r),t.recover===!1&&je(),On(),Mn(n),E(!1),Jr(e,t)}finally{E(r),O(i)}}var Xr=new Map;function Zr(e,{target:t,anchor:n,props:r={},events:i,context:o,intro:s=!0,transformError:c}){On();var l=void 0,u=Un(()=>{var s=n??t.appendChild(L());jt(s,{pending:()=>{}},t=>{lt({});var n=k;if(o&&(n.c=o),i&&(r.$$events=i),T&&$(t,null),l=e(t,r)||{},T&&(K.nodes.end=D,D===null||D.nodeType!==8||D.data!== [...]
+\r\f\xA0\v`];function _i(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||gi.includes(r[o-1]))&&(s===r.length||gi.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function vi(e,t,n,r,i,a){var o=e[pe];if(T||o!==n||o===void 0){var s=_i(n,r,a);(!T||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t? [...]
\ No newline at end of file
diff --git a/_app/immutable/chunks/DSSJbiWa.js b/_app/immutable/chunks/DSSJbiWa.js
new file mode 100644
index 0000000..977ac6d
--- /dev/null
+++ b/_app/immutable/chunks/DSSJbiWa.js
@@ -0,0 +1 @@
+import"./CxoQY3RK.js";import{r as e}from"./n0taT9Jf.js";var t={get data(){return e.data},get error(){return e.error},get form(){return e.form},get params(){return e.params},get route(){return e.route},get state(){return e.state},get status(){return e.status},get url(){return e.url}};export{t};
\ No newline at end of file
diff --git a/_app/immutable/chunks/DwkfN_Oh.js b/_app/immutable/chunks/DwkfN_Oh.js
new file mode 100644
index 0000000..6852f0d
--- /dev/null
+++ b/_app/immutable/chunks/DwkfN_Oh.js
@@ -0,0 +1 @@
+import{A as e,E as t,F as n,K as r,L as i,M as a,R as o,U as s,X as c,Y as l,_ as u,b as d,d as f,f as p,g as m,i as h,m as g,q as _,u as v,v as y,x as b,y as x,z as S}from"./CxoQY3RK.js";import{a as C}from"./n0taT9Jf.js";import"./xihTtKlq.js";import{t as w}from"./DSSJbiWa.js";var T=b(`<aside class="docs-toc" aria-label="On this page"><!></aside>`),E=b(`<div class="docs-layout"><aside class="docs-sidebar"><nav aria-label="Documentation sidebar"><a>About</a> <a>Getting Started</a> <a>Prim [...]
\ No newline at end of file
diff --git a/_app/immutable/chunks/HclGiUj8.js b/_app/immutable/chunks/HclGiUj8.js
new file mode 100644
index 0000000..18c5b8f
--- /dev/null
+++ b/_app/immutable/chunks/HclGiUj8.js
@@ -0,0 +1 @@
+var e=function(e,t){return new URL(e,t).href},t={},n=function(n,r,i){let a=Promise.resolve();if(r&&r.length>0){let n=document.getElementsByTagName(`link`),o=document.querySelector(`meta[property=csp-nonce]`),s=o?.nonce||o?.getAttribute(`nonce`);function c(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function l(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}a=c(r.map(r=>{ [...]
\ No newline at end of file
diff --git a/_app/immutable/chunks/n0taT9Jf.js b/_app/immutable/chunks/n0taT9Jf.js
new file mode 100644
index 0000000..612697a
--- /dev/null
+++ b/_app/immutable/chunks/n0taT9Jf.js
@@ -0,0 +1 @@
+import{D as e,E as t,H as n,O as r,V as i,W as a,n as o,t as s}from"./CxoQY3RK.js";var c=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},u=class extends Error{constr [...]
\ No newline at end of file
diff --git a/_app/immutable/chunks/xihTtKlq.js b/_app/immutable/chunks/xihTtKlq.js
new file mode 100644
index 0000000..afdd2d0
--- /dev/null
+++ b/_app/immutable/chunks/xihTtKlq.js
@@ -0,0 +1 @@
+typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);
\ No newline at end of file
diff --git a/_app/immutable/entry/app.DIYMU9I8.js b/_app/immutable/entry/app.DIYMU9I8.js
new file mode 100644
index 0000000..ea64f18
--- /dev/null
+++ b/_app/immutable/entry/app.DIYMU9I8.js
@@ -0,0 +1,2 @@
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.DCxkMMr2.js","../chunks/CxoQY3RK.js","../chunks/n0taT9Jf.js","../chunks/HclGiUj8.js","../chunks/xihTtKlq.js","../chunks/DSSJbiWa.js","../assets/0.TIf4dhQM.css","../nodes/1.bZz5CF26.js","../nodes/2.DS6763y0.js","../chunks/DwkfN_Oh.js","../nodes/3.CiLdXDCG.js","../nodes/4.X79hs0zb.js","../nodes/5.BHyEEWNf.js","../nodes/6.BPmDjQA3.js","../nodes/7.CdhQN81N.js"])))=>i.map(i=>d[i]);
+import{E as e,H as t,K as n,L as r,M as i,N as a,O as o,P as s,R as c,S as l,U as u,V as d,X as f,_ as p,b as m,i as h,n as g,p as _,q as v,r as y,s as b,v as x,x as S,y as C,z as w}from"../chunks/CxoQY3RK.js";import{t as T}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";var E={},D=S(`<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; w [...]
\ No newline at end of file
diff --git a/_app/immutable/entry/start.Cl1OLO5u.js b/_app/immutable/entry/start.Cl1OLO5u.js
new file mode 100644
index 0000000..74b4e7f
--- /dev/null
+++ b/_app/immutable/entry/start.Cl1OLO5u.js
@@ -0,0 +1 @@
+import{i as e,t}from"../chunks/n0taT9Jf.js";export{e as load_css,t as start};
\ No newline at end of file
diff --git a/_app/immutable/nodes/0.DCxkMMr2.js b/_app/immutable/nodes/0.DCxkMMr2.js
new file mode 100644
index 0000000..8e798ec
--- /dev/null
+++ b/_app/immutable/nodes/0.DCxkMMr2.js
@@ -0,0 +1,9 @@
+import{B as e,C as t,E as n,H as r,I as i,K as a,L as o,M as s,N as c,O as l,R as u,T as d,U as f,V as p,X as m,Y as h,Z as g,_,b as v,c as y,d as b,f as x,g as S,l as C,m as w,q as T,s as E,u as D,v as O,w as k,x as A,y as j,z as M}from"../chunks/CxoQY3RK.js";import{a as N}from"../chunks/n0taT9Jf.js";import{t as P}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";import{t as F}from"../chunks/DSSJbiWa.js";var I=g({prerender:()=>!0,trailingSlash:()=>L}),L=`always`,R=A(`<footer cla [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer>`);function z(e){var t=R();j(e,t)}var B=A(`<div class="search-empty"> </div>`),V=A(`<small> </small>`),H=A(`<a><span class="search-result-main"><strong> </strong> <!></span> <span class="search-result-path"> </span></a>`),U=A(`<div class="search-empty">Type at least two characters to search.</div>`),W=A(`<button class="search-trigger" type="button"><span class="search-icon" aria-h [...]
\ No newline at end of file
diff --git a/_app/immutable/nodes/1.bZz5CF26.js b/_app/immutable/nodes/1.bZz5CF26.js
new file mode 100644
index 0000000..c3bb4ec
--- /dev/null
+++ b/_app/immutable/nodes/1.bZz5CF26.js
@@ -0,0 +1 @@
+import{K as e,L as t,M as n,R as r,X as i,q as a,v as o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DSSJbiWa.js";var d=s(`<h1> </h1> <p> </p>`,1);function f(s,f){a(f,!0);var p=d(),m=r(p),h=t(m,!0);i(m);var g=l(m,2),_=t(g,!0);i(g),n(()=>{o(h,u.status),o(_,u.error?.message)}),c(s,p),e()}export{f as component};
\ No newline at end of file
diff --git a/_app/immutable/nodes/2.DS6763y0.js b/_app/immutable/nodes/2.DS6763y0.js
new file mode 100644
index 0000000..c155b24
--- /dev/null
+++ b/_app/immutable/nodes/2.DS6763y0.js
@@ -0,0 +1,18 @@
+import{L as e,R as t,X as n,Y as r,a as i,h as a,o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DwkfN_Oh.js";var d={label:`Home`,title:`Welcome to Apache Asyncband | Apache Asyncband`,description:`Apache Asyncband is a focused collection of composable, runtime-agnostic concurrency building blocks for async Rust.`,canonical:`https://asyncband.apache.org/`,ogTitle:`Welcome to Apache Asyncband (Incubating)`,toc:[{id:`overview`,l [...]
+
+<span class="hljs-keyword">async</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">increment</span>() {
+ <span class="hljs-keyword">let</span> <span class="hljs-variable">counter</span> = Mutex::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-number">0</span>);
+ *counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span> += <span class="hljs-number">1</span>;
+ <span class="hljs-built_in">assert_eq!</span>(*counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>, <span class="hljs-number">1</span>);
+}`,!0),n(p),n(f);var m=l(f,16),h=e(m);a(h,()=>`cargo add asyncband --features blocking,oneshot`,!0),n(h),n(m);var g=l(m,2),_=e(g);a(_,()=>`<span class="hljs-keyword">use</span> std::thread;
+
+<span class="hljs-keyword">use</span> asyncband::blocking::FutureExt <span class="hljs-keyword">as</span> _;
+<span class="hljs-keyword">use</span> asyncband::oneshot;
+
+<span class="hljs-keyword">let</span> (sender, receiver) = oneshot::<span class="hljs-title function_ invoke__">channel</span>();
+thread::<span class="hljs-title function_ invoke__">spawn</span>(<span class="hljs-keyword">move</span> || {
+ <span class="hljs-keyword">let</span> <span class="hljs-variable">result</span> = <span class="hljs-number">6</span> * <span class="hljs-number">7</span>;
+ sender.<span class="hljs-title function_ invoke__">send</span>(result).<span class="hljs-title function_ invoke__">unwrap</span>();
+});
+
+<span class="hljs-built_in">assert_eq!</span>(receiver.<span class="hljs-title function_ invoke__">block_on</span>(), <span class="hljs-title function_ invoke__">Ok</span>(<span class="hljs-number">42</span>));`,!0),n(_),n(g),r(30),c(i,s)},$$slots:{default:!0}}))}export{b as component};
\ No newline at end of file
diff --git a/_app/immutable/nodes/3.CiLdXDCG.js b/_app/immutable/nodes/3.CiLdXDCG.js
new file mode 100644
index 0000000..f1a9f26
--- /dev/null
+++ b/_app/immutable/nodes/3.CiLdXDCG.js
@@ -0,0 +1 @@
+import{L as e,R as t,X as n,Y as r,a as i,h as a,o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DwkfN_Oh.js";var d={label:`About`,title:`Welcome to Apache Asyncband | Apache Asyncband`,description:`Apache Asyncband is a runtime-agnostic library providing synchronization and coordination tools for asynchronous Rust programming.`,canonical:`https://asyncband.apache.org/docs/about/`,ogTitle:`Welcome to Apache Asyncband (Incubati [...]
\ No newline at end of file
diff --git a/_app/immutable/nodes/4.X79hs0zb.js b/_app/immutable/nodes/4.X79hs0zb.js
new file mode 100644
index 0000000..5cd4075
--- /dev/null
+++ b/_app/immutable/nodes/4.X79hs0zb.js
@@ -0,0 +1,9 @@
+import{L as e,R as t,X as n,Y as r,a as i,h as a,o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DwkfN_Oh.js";var d={label:`Getting Started`,title:`Getting Started | Apache Asyncband`,description:`Install Apache Asyncband, select Cargo features, and use an asynchronous primitive.`,canonical:`https://asyncband.apache.org/docs/getting-started/`,toc:[{id:`installation`,label:`Installation`},{id:`using-a-primitive`,label:`Using a [...]
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">counter</span> = Mutex::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-number">0</span>);
+{
+ <span class="hljs-keyword">let</span> <span class="hljs-keyword">mut </span><span class="hljs-variable">value</span> = counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>;
+ *value += <span class="hljs-number">1</span>;
+}
+
+<span class="hljs-built_in">assert_eq!</span>(*counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>, <span class="hljs-number">1</span>);`,!0),n(p),n(f),r(10),c(i,s)},$$slots:{default:!0}}))}export{y as component};
\ No newline at end of file
diff --git a/_app/immutable/nodes/5.BHyEEWNf.js b/_app/immutable/nodes/5.BHyEEWNf.js
new file mode 100644
index 0000000..8e2a9f3
--- /dev/null
+++ b/_app/immutable/nodes/5.BHyEEWNf.js
@@ -0,0 +1 @@
+import{L as e,R as t,X as n,Y as r,a as i,h as a,o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DwkfN_Oh.js";var d={label:`Primitives`,title:`Available APIs | Apache Asyncband`,description:`Apache Asyncband primitives, Cargo features, public paths, and purposes.`,canonical:`https://asyncband.apache.org/docs/primitives/`,toc:[{id:`shared-state`,label:`Shared state`},{id:`one-time-initialization`,label:`One-time initialization` [...]
\ No newline at end of file
diff --git a/_app/immutable/nodes/6.BPmDjQA3.js b/_app/immutable/nodes/6.BPmDjQA3.js
new file mode 100644
index 0000000..dc5e340
--- /dev/null
+++ b/_app/immutable/nodes/6.BPmDjQA3.js
@@ -0,0 +1,9 @@
+import{L as e,R as t,X as n,Y as r,a as i,h as a,o,x as s,y as c,z as l}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DwkfN_Oh.js";var d={label:`Runtime and Blocking`,title:`Runtime and Blocking | Apache Asyncband`,description:`Apache Asyncband runtime model, blocking interoperability, thread safety, and minimum Rust version.`,canonical:`https://asyncband.apache.org/docs/runtime/`,headingIds:{"Async First, Blocking by Adaptation":`async-first`,"Mi [...]
+
+<span class="hljs-keyword">use</span> asyncband::blocking::FutureExt <span class="hljs-keyword">as</span> _;
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">value</span> = <span class="hljs-keyword">async</span> { <span class="hljs-number">42</span> }.<span class="hljs-title function_ invoke__">block_on</span>();
+<span class="hljs-built_in">assert_eq!</span>(value, <span class="hljs-number">42</span>);
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">value</span> = <span class="hljs-keyword">async</span> { <span class="hljs-number">42</span> }.<span class="hljs-title function_ invoke__">wait_timeout</span>(Duration::ZERO);
+<span class="hljs-built_in">assert_eq!</span>(value, <span class="hljs-title function_ invoke__">Some</span>(<span class="hljs-number">42</span>));`,!0),n(p),n(f),r(22),c(i,s)},$$slots:{default:!0}}))}export{x as component};
\ No newline at end of file
diff --git a/_app/immutable/nodes/7.CdhQN81N.js b/_app/immutable/nodes/7.CdhQN81N.js
new file mode 100644
index 0000000..c4e8b39
--- /dev/null
+++ b/_app/immutable/nodes/7.CdhQN81N.js
@@ -0,0 +1 @@
+import{F as e,Y as t,f as n,j as r,x as i,y as a}from"../chunks/CxoQY3RK.js";import"../chunks/xihTtKlq.js";var o=i(`<meta name="description" content="Apache Asyncband release downloads."/> <link rel="canonical" href="https://asyncband.apache.org/downloads/"/> <meta property="og:url" content="https://asyncband.apache.org/downloads/"/> <meta property="og:title" content="Downloads | Apache Asyncband"/>`,1),s=i(`<main id="main-content" class="standalone-page"><article class="standalone-artic [...]
\ No newline at end of file
diff --git a/_app/version.json b/_app/version.json
new file mode 100644
index 0000000..fb22252
--- /dev/null
+++ b/_app/version.json
@@ -0,0 +1 @@
+{"version":"1787844013211"}
\ No newline at end of file
diff --git a/asf-logo.svg b/asf-logo.svg
new file mode 100644
index 0000000..def74b2
--- /dev/null
+++ b/asf-logo.svg
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 293.9285746">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #7c297d;
+ }
+
+ .cls-2 {
+ fill: #f79a23;
+ }
+
+ .cls-3 {
+ fill: #dd552c;
+ }
+
+ .cls-4 {
+ fill: #d22128;
+ }
+ </style>
+ </defs>
+ <path class="cls-1" d="M338.7559108,209.493365l-49.6682702-125.0581554h-27.8676331l-49.6682702,125.0581554h30.1934425l8.5764219-21.6170206h49.6644449l8.3966307,21.6170206h30.3732336ZM257.6471359,165.5439845l17.5086008-45.7358163,17.6845666,45.7358163h-35.1931674Z"/>
+ <path class="cls-1" d="M392.0544328,174.6559546h20.366133c30.1934425,0,49.6644449-17.688392,49.6644449-45.2002681,0-27.3359103-19.4710024-45.0204769-49.6644449-45.0204769h-48.7731397v125.0581554h28.4070067v-34.8374104ZM391.8746416,109.2693447h18.2239402c14.8270345,0,23.2236652,7.5015001,23.2236652,20.366133,0,13.2203899-8.3966307,20.5459242-23.2236652,20.5459242h-18.2239402v-40.9120571Z"/>
+ <path class="cls-1" d="M546.3190918,84.4352096h-27.8676331l-49.6682702,125.0581554h30.1934425l8.5764219-21.6170206h49.6644449l8.3966307,21.6170206h30.3732336l-49.6682702-125.0581554ZM514.8785871,165.5439845l17.5086008-45.7358163,17.6845666,45.7358163h-35.1931674Z"/>
+ <path class="cls-1" d="M708.1311551,161.6153559c-5.1795162,14.4712774-18.399906,23.4034563-34.8374104,23.4034563-21.2612635,0-36.2680892-15.5423738-36.2680892-38.054525,0-22.688117,15.1866168-38.054525,36.4478804-38.054525,15.8981309,0,29.1185207,8.5764219,33.7624887,22.5121511h29.3021372c-7.1457431-30.1934425-32.1596694-49.488479-63.9597565-49.488479-37.8747338,0-64.4953047,26.7965367-64.4953047,65.0308529,0,38.2304908,26.6205709,65.0308529,64.6750958,65.0308529,32.8711835,0,58.420657 [...]
+ <polygon class="cls-1" points="795.7468406 159.1135808 844.5199803 159.1135808 844.5199803 209.493365 872.9231616 209.493365 872.9231616 84.4352096 844.5199803 84.4352096 844.5199803 132.4930099 795.7468406 132.4930099 795.7468406 84.4352096 767.339834 84.4352096 767.339834 209.493365 795.7468406 209.493365 795.7468406 159.1135808"/>
+ <polygon class="cls-1" points="939.759577 185.3745693 939.759577 158.038659 988.8884736 158.038659 988.8884736 134.0996545 939.759577 134.0996545 939.759577 108.3742142 993.536267 108.3742142 993.536267 84.4352096 911.5323615 84.4352096 911.5323615 209.493365 995.4986686 209.493365 995.4986686 185.3745693 939.759577 185.3745693"/>
+ <polygon class="cls-1" points="221.3560947 62.43948 226.6197684 62.43948 226.6197684 27.0971241 239.8860624 27.0971241 239.8860624 21.9482107 208.0898007 21.9482107 208.0898007 27.0971241 221.3560947 27.0971241 221.3560947 62.43948"/>
+ <polygon class="cls-1" points="255.8377481 44.3838549 276.5596381 44.3838549 276.5596381 62.43948 281.8768666 62.43948 281.8768666 21.9482107 276.5596381 21.9482107 276.5596381 39.2311162 255.8377481 39.2311162 255.8377481 21.9482107 250.5778997 21.9482107 250.5778997 62.43948 255.8377481 62.43948 255.8377481 44.3838549"/>
+ <polygon class="cls-1" points="322.0621084 57.4550564 302.0785098 57.4550564 302.0785098 44.3264748 320.0270252 44.3264748 320.0270252 39.3420512 302.0785098 39.3420512 302.0785098 26.8790795 321.457704 26.8790795 321.457704 21.9482107 296.8186614 21.9482107 296.8186614 62.43948 322.0621084 62.43948 322.0621084 57.4550564"/>
+ <path class="cls-1" d="M226.0191894,253.3853654c-8.5037403-1.9203228-10.244272-4.2843856-10.244272-7.2452021,0-3.8100429,3.4007311-6.177931,8.8747987-6.177931,5.9598864,0,9.4065216,2.7236451,9.7010731,7.6659899l.0573802.921908h5.1948175l-.0459041-1.0251923c-.355757-7.8228291-5.9254583-12.4935744-14.9073667-12.4935744-8.5878979,0-14.1384725,4.3608925-14.1384725,11.1087998,0,6.2926914,4.2308308,9.888515,14.1422978,12.0192317,9.0048604,2.0159564,10.244272,4.7281255,10.244272,7.3561371,0,3 [...]
+ <path class="cls-1" d="M271.3533445,235.0313635c-12.344386,0-20.9628867,8.5955486-20.9628867,20.9055065s8.6185007,20.9093319,20.9628867,20.9093319c12.3099579,0,20.9055065-8.599374,20.9055065-20.9093319s-8.5955486-20.9055065-20.9055065-20.9055065ZM271.3533445,271.6934631c-9.3261894,0-15.5921033-6.3309448-15.5921033-15.7565931,0-9.421823,6.2659139-15.7527678,15.5921033-15.7527678,9.2917613,0,15.5347231,6.3309448,15.5347231,15.7527678,0,9.4256483-6.2429619,15.7565931-15.5347231,15.7565931Z"/>
+ <polygon class="cls-1" points="305.0048982 276.1844173 310.2647466 276.1844173 310.2647466 259.0660016 326.725203 259.0660016 326.725203 254.0777527 310.2647466 254.0777527 310.2647466 240.7311265 328.1558818 240.7311265 328.1558818 235.693148 305.0048982 235.693148 305.0048982 276.1844173"/>
+ <polygon class="cls-1" points="337.669513 240.8420614 350.935807 240.8420614 350.935807 276.1844173 356.1994808 276.1844173 356.1994808 240.8420614 369.4657747 240.8420614 369.4657747 235.693148 337.669513 235.693148 337.669513 240.8420614"/>
+ <polygon class="cls-1" points="420.5685491 266.9691629 409.2493553 235.693148 404.6818942 235.693148 393.3550498 266.9041321 383.1184285 235.693148 377.5946314 235.693148 390.8379733 276.1844173 395.5431467 276.1844173 406.9656248 244.6100256 418.445483 276.1844173 423.0856256 276.1844173 436.3939984 235.693148 430.8051704 235.693148 420.5685491 266.9691629"/>
+ <path class="cls-1" d="M460.2679721,235.693148h-4.555985l-16.7741347,40.4912693h5.6385575l4.0739917-9.7431519h18.6256013l4.0739917,9.7431519h5.6385575l-16.4681072-39.8868649-.2524727-.6044044ZM465.4207108,261.5639514h-14.8576372l7.4058665-18.0785771,7.4517707,18.0785771Z"/>
+ <path class="cls-1" d="M516.1830295,248.726096c0-7.9184627-5.4205129-13.032948-13.8056675-13.032948h-15.3472813v40.4912693h5.2598484v-14.4789281h8.8097679l10.2404467,14.4789281h6.3653729l-10.710964-15.0527298c5.7074137-1.6181206,9.188477-6.2506126,9.188477-12.4055915ZM492.2899291,240.6775716h9.7584533c5.5199718,0,8.8174186,3.010546,8.8174186,8.0485244,0,5.0073757-3.2974468,7.9949696-8.8174186,7.9949696h-9.7584533v-16.0434939Z"/>
+ <polygon class="cls-1" points="534.6403157 258.0714121 552.5888311 258.0714121 552.5888311 253.0869885 534.6403157 253.0869885 534.6403157 240.6240168 554.0195098 240.6240168 554.0195098 235.693148 529.3804673 235.693148 529.3804673 276.1844173 554.6239142 276.1844173 554.6239142 271.1999937 534.6403157 271.1999937 534.6403157 258.0714121"/>
+ <polygon class="cls-1" points="588.6273996 276.1844173 593.887248 276.1844173 593.887248 259.0660016 610.3477045 259.0660016 610.3477045 254.0777527 593.887248 254.0777527 593.887248 240.7311265 611.7783832 240.7311265 611.7783832 235.693148 588.6273996 235.693148 588.6273996 276.1844173"/>
+ <path class="cls-1" d="M642.220473,235.0313635c-12.344386,0-20.9628867,8.5955486-20.9628867,20.9055065s8.6185007,20.9093319,20.9628867,20.9093319c12.3099579,0,20.9055065-8.599374,20.9055065-20.9093319s-8.5955486-20.9055065-20.9055065-20.9055065ZM642.220473,271.6934631c-9.3261894,0-15.5921033-6.3309448-15.5921033-15.7565931,0-9.421823,6.2659139-15.7527678,15.5921033-15.7527678,9.2917613,0,15.5347231,6.3309448,15.5347231,15.7527678,0,9.4256483-6.2429619,15.7565931-15.5347231,15.7565931Z"/>
+ <path class="cls-1" d="M701.2149326,260.0108617c0,7.5321029-3.6608545,11.6826015-10.3054775,11.6826015-6.6101949,0-10.2519227-4.1504986-10.2519227-11.6826015v-24.3177136h-5.2636737v24.5395836c0,10.2480973,5.944585,16.6134702,15.5155964,16.6134702,9.6016142,0,15.5653259-6.3653729,15.5653259-16.6134702v-24.5395836h-5.2598484v24.3177136Z"/>
+ <polygon class="cls-1" points="748.0141946 266.4489161 725.8233724 235.693148 721.3171169 235.693148 721.3171169 276.1844173 726.5769652 276.1844173 726.5769652 245.3750944 748.4732359 275.7789308 748.7677875 276.1844173 753.2204882 276.1844173 753.2204882 235.693148 748.0141946 235.693148 748.0141946 266.4489161"/>
+ <path class="cls-1" d="M781.5012585,235.693148h-13.032948v40.4912693h13.032948c12.8684582,0,21.1847567-7.9490654,21.1847567-20.2475473s-8.3162985-20.243722-21.1847567-20.243722ZM781.5012585,271.0890587h-7.7730996v-30.3005521h7.6659899c9.9688472,0,15.9210829,5.6615095,15.9210829,15.1483634,0,9.3453161-6.0593453,15.1521887-15.8139733,15.1521887Z"/>
+ <path class="cls-1" d="M829.8383089,235.693148h-4.555985l-16.7741347,40.4912693h5.6385575l4.0739917-9.7431519h18.6256013l4.0739917,9.7431519h5.6385575l-16.4681072-39.8868649-.2524727-.6044044ZM834.9910477,261.5639514h-14.8576372l7.4058665-18.0785771,7.4517707,18.0785771Z"/>
+ <polygon class="cls-1" points="847.8327284 240.8420614 861.0990224 240.8420614 861.0990224 276.1844173 866.3626962 276.1844173 866.3626962 240.8420614 879.6289901 240.8420614 879.6289901 235.693148 847.8327284 235.693148 847.8327284 240.8420614"/>
+ <rect class="cls-1" x="890.5962522" y="235.693148" width="5.2598484" height="40.4912693"/>
+ <path class="cls-1" d="M929.5497331,235.0313635c-12.344386,0-20.9628867,8.5955486-20.9628867,20.9055065s8.6185007,20.9093319,20.9628867,20.9093319c12.3099579,0,20.9055065-8.599374,20.9055065-20.9093319s-8.5955486-20.9055065-20.9055065-20.9055065ZM929.5497331,271.6934631c-9.3261894,0-15.5921033-6.3309448-15.5921033-15.7565931,0-9.421823,6.2659139-15.7527678,15.5921033-15.7527678,9.2917613,0,15.5347231,6.3309448,15.5347231,15.7527678,0,9.4256483-6.2429619,15.7565931-15.5347231,15.7565931Z"/>
+ <polygon class="cls-1" points="989.8983645 266.4489161 967.7075423 235.693148 963.2012868 235.693148 963.2012868 276.1844173 968.4611352 276.1844173 968.4611352 245.3750944 990.3574059 275.7789308 990.6519574 276.1844173 995.1046581 276.1844173 995.1046581 235.693148 989.8983645 235.693148 989.8983645 266.4489161"/>
+ <g>
+ <path class="cls-3" d="M79.3529196,117.0700188c7.4928931-18.5280551,15.8531831-37.0197693,24.8236154-53.4094569-13.3906177-9.9458951-26.2485562-31.3926879-31.5313566-40.8948431-1.8973708,2.1555815-3.1291316,4.6382299-3.6876319,6.6580117-4.9767729,17.9695548,12.7393528,39.6688202-1.5301377,31.7407942-11.88917-6.6063696-38.660842-21.0738217-48.8725986-6.6943525,11.4368231,14.6950601,41.3500591,51.6670126,60.7981094,62.5998466Z"/>
+ <path class="cls-2" d="M104.1765351,63.6605618c8.6921386-15.8809168,17.9552097-29.7898686,27.5587366-39.810358,0,0-9.5786621,13.8649604-23.2600059,41.5814924,8.2856957,2.2818179,31.8832883,6.9640393,64.7525591-1.5263124.808104-5.9732751-3.2075512-12.5433039-23.2188835-14.7428769-13.0645071-1.4345041,15.6810426-31.1956827-5.1431754-45.271037-.6723043-.455216-1.3331325-.8568771-1.980572-1.2164595-.6981253-.2505601-1.4354604-.4800807-2.222525-.6847366-24.3205826-6.3462462-27.6916673,34. [...]
+ <path class="cls-4" d="M59.7920216,170.4526983c5.4903254-16.4470678,12.0947823-34.9253933,19.560898-53.3826795-19.4480504-10.932834-49.3612863-47.9047865-60.7981094-62.5998466-2.0417775,2.8728336-3.4370718,6.8798817-3.9018512,12.3596874-2.4941245,29.4341116,27.8714585,51.2251853,21.8178511,55.2054561-8.0074019,5.2655864-23.9447426-12.6485009-30.2259579-1.266189,9.1043194,11.6959902,27.6495885,32.8291047,53.5471693,49.6835716Z"/>
+ <path class="cls-3" d="M143.9285565,106.9730225c-15.375015-5.483631,16.066446-20.1901671,26.2762899-35.7918338,1.3063551-1.994917,2.6567016-4.5731991,3.0229783-7.2758048-32.8692708,8.4903516-56.4668633,3.8081302-64.7525591,1.5263124-7.0826249,14.3507791-15.261211,32.4350942-23.7907725,54.2395566,8.8834058,3.7985669,45.1553203,17.8299297,96.3881563,17.9026113,8.613719-22.4356442-22.5523172-25.3983734-37.144093-30.6008416Z"/>
+ <path class="cls-4" d="M65.7327813,173.4135148c9.0345069,2.8154534,38.9697386,11.2254728,70.7621749,9.9592838,4.2709969-11.5640158-11.6969465-12.6924923-12.9975635-21.9670396-1.0070219-7.1763459,42.0223633,6.0306553,55.8672406-20.0639308.700038-1.3197438,1.2461059-2.5648933,1.7080162-3.7679641-51.232836-.0726815-87.5047505-14.1040444-96.3881563-17.9026113-6.2333985,15.9344716-12.6456319,33.8179562-18.9517119,53.7422619Z"/>
+ <path class="cls-1" d="M65.7327813,173.4135148c-4.0596466,12.8244667-8.0647821,26.5249373-11.9522882,41.0038654-1.3790366,5.133612-2.7418155,10.3628577-4.0854677,15.7068636,30.1752721,9.9611965,57.9616166.0229521,58.9036077-12.2946565.0076507-.0975463-.0105197-.1702278-.0047817-.2639488.7182084-13.0463367-18.8359953-5.8145233-18.3731286-13.6583918.4647793-7.9012486,34.1383287-.0459041,44.5518722-16.9864413.7985406-1.2987044,1.3187874-2.4520457,1.7223613-3.5480068-31.7924364,1.266189- [...]
+ <path class="cls-1" d="M6.2448523,120.7691267c-.4399146.7975843-.8367941,1.7194923-1.175337,2.8211914-5.8479951,19.0062231,35.5039767,44.5384835,29.8778515,50.1043595-5.0714502,5.0150264-11.6806888-6.4457051-19.8305848-1.7118416-.8932179.5202468-1.7998245,1.1762934-2.7303395,2.1307168-9.2171671,9.4428624-.1444067,36.6467983,26.0066031,51.1678052-6.1023805,20.4904567-12.1779835,43.3832296-18.1254376,67.3241468,2.1574942-.7555055,4.7396016-1.5129237,5.3822594-3.5480068.9649431-3.966882 [...]
+ </g>
+</svg>
\ No newline at end of file
diff --git a/docs/about/index.html b/docs/about/index.html
new file mode 100644
index 0000000..afbc02c
--- /dev/null
+++ b/docs/about/index.html
@@ -0,0 +1,63 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="../../favicon.svg" type="image/svg+xml" />
+ <link href="../../_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="../../_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/3.CiLdXDCG.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DwkfN_Oh.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="../../_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="../../"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="../../docs/about/" class="active">Documentation</a> <a href="../../downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden=" [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL("../..", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("../../_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("../../_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 3],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html
new file mode 100644
index 0000000..f9fd04f
--- /dev/null
+++ b/docs/getting-started/index.html
@@ -0,0 +1,71 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="../../favicon.svg" type="image/svg+xml" />
+ <link href="../../_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="../../_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/4.X79hs0zb.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DwkfN_Oh.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="../../_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="../../"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="../../docs/about/" class="active">Documentation</a> <a href="../../downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden=" [...]
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">counter</span> = Mutex::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-number">0</span>);
+{
+ <span class="hljs-keyword">let</span> <span class="hljs-keyword">mut </span><span class="hljs-variable">value</span> = counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>;
+ *value += <span class="hljs-number">1</span>;
+}
+
+<span class="hljs-built_in">assert_eq!</span>(*counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>, <span class="hljs-number">1</span>);<!----></code></pre> <h2 id="selecting-features">Selecting Features</h2> <p>List every API the application uses in <code>features</code>. Categories describe each API's primary purpose and do not add another module level, so public paths remain concise.</p> <p><a href="/docs/primitives/">See the compl [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL("../..", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("../../_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("../../_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 4],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/docs/primitives/index.html b/docs/primitives/index.html
new file mode 100644
index 0000000..05479f6
--- /dev/null
+++ b/docs/primitives/index.html
@@ -0,0 +1,63 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="../../favicon.svg" type="image/svg+xml" />
+ <link href="../../_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="../../_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/5.BHyEEWNf.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DwkfN_Oh.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="../../_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="../../"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="../../docs/about/" class="active">Documentation</a> <a href="../../downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden=" [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL("../..", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("../../_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("../../_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 5],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/docs/runtime/index.html b/docs/runtime/index.html
new file mode 100644
index 0000000..3419fac
--- /dev/null
+++ b/docs/runtime/index.html
@@ -0,0 +1,71 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="../../favicon.svg" type="image/svg+xml" />
+ <link href="../../_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="../../_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="../../_app/immutable/nodes/6.BPmDjQA3.js" rel="modulepreload">
+ <link href="../../_app/immutable/chunks/DwkfN_Oh.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="../../_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="../../"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="../../docs/about/" class="active">Documentation</a> <a href="../../downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden=" [...]
+
+<span class="hljs-keyword">use</span> asyncband::blocking::FutureExt <span class="hljs-keyword">as</span> _;
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">value</span> = <span class="hljs-keyword">async</span> { <span class="hljs-number">42</span> }.<span class="hljs-title function_ invoke__">block_on</span>();
+<span class="hljs-built_in">assert_eq!</span>(value, <span class="hljs-number">42</span>);
+
+<span class="hljs-keyword">let</span> <span class="hljs-variable">value</span> = <span class="hljs-keyword">async</span> { <span class="hljs-number">42</span> }.<span class="hljs-title function_ invoke__">wait_timeout</span>(Duration::ZERO);
+<span class="hljs-built_in">assert_eq!</span>(value, <span class="hljs-title function_ invoke__">Some</span>(<span class="hljs-number">42</span>));<!----></code></pre> <h2 id="async-first">Async First, Blocking by Adaptation</h2> <p>Async and synchronous synchronization primitives have different optimization constraints. Once an async primitive is runtime-agnostic, synchronous code can usually drive its future with a <code>block_on</code> adapter.</p> <p>Asyncband's blocking feature prov [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL("../..", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("../../_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("../../_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 6],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/downloads/index.html b/downloads/index.html
new file mode 100644
index 0000000..4a014d2
--- /dev/null
+++ b/downloads/index.html
@@ -0,0 +1,62 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="../favicon.svg" type="image/svg+xml" />
+ <link href="../_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="../_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="../_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="../_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="../_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="../_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="../_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="../_app/immutable/nodes/7.CdhQN81N.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="../_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="../"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="../docs/about/">Documentation</a> <a href="../downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden="true">↗</span></a> <a cl [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL("..", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("../_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("../_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 7],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/favicon.svg b/favicon.svg
new file mode 100644
index 0000000..de18b25
--- /dev/null
+++ b/favicon.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 650 1000">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #7c297d;
+ }
+
+ .cls-2 {
+ fill: #f79a23;
+ }
+
+ .cls-3 {
+ fill: #dd552c;
+ }
+
+ .cls-4 {
+ fill: #d22128;
+ }
+ </style>
+ </defs>
+ <path class="cls-3" d="M276.7092915,398.1515795c25.5279479-63.1242453,54.0110775-126.1246793,84.5729347-181.9636035-45.6212286-33.8852148-89.4276433-106.9534674-107.4259055-139.3268803-6.4642564,7.3439687-10.6608099,15.8022396-12.563595,22.6835448-16.9556402,61.2214602,43.4023987,135.1498759-5.21311,108.1394499-40.5058645-22.5076023-131.7157397-71.797557-166.5067324-22.8073561,38.9647388,50.0654049,140.8777805,176.0271745,207.1364082,213.2748452Z"/>
+ <path class="cls-2" d="M361.2822261,216.187976c29.6137228-54.1055651,61.1725873-101.4927347,93.8913687-135.6320886,0,0-32.6340684,47.2372927-79.2457879,141.6662634,28.2289905,7.7740502,108.6249208,23.7261667,220.6090393-5.2000772,2.7531737-20.350678-10.9279818-42.734469-79.1056856-50.2283145-44.5101845-4.8872906,53.4246026-106.2822795-17.5225659-154.2363748-2.2905102-1.5509002-4.5419221-2.9193416-6.7477192-4.1444224-2.3784814-.8536468-4.8905488-1.6356133-7.5720422-2.3328667-82.8591248- [...]
+ <path class="cls-4" d="M210.0661969,580.0239535c18.7052902-56.0344158,41.2063761-118.989235,66.6430946-181.872374-66.2586277-37.2476707-168.1716694-163.2094403-207.1364082-213.2748452-6.9562436,9.787614-11.7099483,23.4394457-13.2934304,42.1088958-8.4973692,100.2806866,94.9567981,174.521889,74.3324318,188.0824913-27.2808561,17.9396147-81.5786546-43.0928703-102.978471-4.3138485,31.0180043,39.8477093,94.2008971,111.8472744,182.4327833,169.2696807Z"/>
+ <path class="cls-3" d="M496.7155649,363.7515701c-52.3819806-18.6824828,54.7376547-68.786986,89.5221309-121.9411586,4.4506926-6.7965921,9.0512622-15.5806824,10.2991504-24.7883379-111.9841185,28.9262439-192.3800488,12.9741274-220.6090393,5.2000772-24.1301828,48.8924551-51.9942555,110.5048986-81.0540854,184.7917156,30.2653616,12.9415455,153.8421334,60.7457639,328.3900879,60.9933866,29.3465509-76.4372249-76.8347245-86.5311091-126.5482445-104.255683Z"/>
+ <path class="cls-4" d="M230.3060964,590.1113213c30.7801562,9.5921223,132.7681363,38.244678,241.0835287,33.9308295,14.5510932-39.3980786-39.8509675-43.2427472-44.282111-74.84071-3.430878-24.4494858,143.1682907,20.5461697,190.3371613-68.3569045,2.3849978-4.4963073,4.2454264-8.7384756,5.819134-12.8372833-174.5479545-.2476227-298.1247263-48.0518411-328.3900879-60.9933866-21.2369067,54.2880239-43.0830957,115.2162467-64.5676252,183.0974549Z"/>
+ <path class="cls-1" d="M230.3060964,590.1113213c-13.8310324,43.6923779-27.4763477,90.3692613-40.7209052,139.6983144-4.6983154,17.4899839-9.3412414,35.3057873-13.9190036,53.5125738,102.8057868,33.9373459,197.4726056.0781966,200.6819264-41.8873386.0260655-.3323358-.0358401-.5799585-.016291-.8992615,2.4469035-44.4482789-64.1733837-19.8098179-62.5964179-46.5335229,1.5834822-26.9191966,116.3077416-.1563933,151.7862131-57.872037,2.7205918-4.4246271,4.4930492-8.3540087,5.8680069-12.0878987-10 [...]
+ <path class="cls-1" d="M27.6334136,410.7542728c-1.4987691,2.7173336-2.8509195,5.8582323-4.0043201,9.6116715-19.9238547,64.7533422,120.9604422,151.7405984,101.7924885,170.7032859-17.2782014,17.0859679-39.7955782-21.9602257-67.5619052-5.8321668-3.0431529,1.7724574-6.1319206,4.0075783-9.3021431,7.2592556-31.4024712,32.1714049-.4919873,124.8539837,88.6033203,174.3263973-20.7905342,69.8100589-41.489839,147.8047004-61.7525458,229.3703222,7.3504851-2.573973,16.1476081-5.1544625,18.3371143-12. [...]
+</svg>
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..94262d8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,80 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for
+ additional information regarding copyright ownership. The ASF licenses this
+ file to you under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at https://www.apache.org/licenses/LICENSE-2.0.
+-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="text-scale" content="scale" />
+ <link rel="icon" href="./favicon.svg" type="image/svg+xml" />
+ <link href="./_app/immutable/entry/start.Cl1OLO5u.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/n0taT9Jf.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/CxoQY3RK.js" rel="modulepreload">
+ <link href="./_app/immutable/entry/app.DIYMU9I8.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/HclGiUj8.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
+ <link href="./_app/immutable/nodes/0.DCxkMMr2.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/DSSJbiWa.js" rel="modulepreload">
+ <link href="./_app/immutable/nodes/2.DS6763y0.js" rel="modulepreload">
+ <link href="./_app/immutable/chunks/DwkfN_Oh.js" rel="modulepreload">
+ <!--12qhfyh--><meta name="theme-color" content="#ffffff"/> <meta property="og:type" content="website"/> <meta property="og:image" content="https://asyncband.apache.org/og.png"/> <meta property="og:image:width" content="1200"/> <meta property="og:image:height" content="630"/> <meta property="og:image:alt" content="Apache Asyncband (Incubating)"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:image" content="https://asyncband.apache.org/og.png"/><!----><!- [...]
+ <link href="./_app/immutable/assets/0.TIf4dhQM.css" rel="stylesheet">
+ </head>
+ <body data-sveltekit-preload-data="hover">
+ <div style="display: contents"><!--[--><!--[0--><!--[--><a class="skip-link" href="#main-content">Skip to content</a> <header class="navbar"><div class="navbar-inner"><a class="navbar-brand" href="./"><span>Apache Asyncband</span> <small>Incubating</small></a> <nav class="navbar-links" aria-label="Primary navigation"><a href="./docs/about/">Documentation</a> <a href="./downloads/">Downloads</a> <a href="https://docs.rs/asyncband/">API Docs <span aria-hidden="true">↗</span></a> <a class [...]
+
+<span class="hljs-keyword">async</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">increment</span>() {
+ <span class="hljs-keyword">let</span> <span class="hljs-variable">counter</span> = Mutex::<span class="hljs-title function_ invoke__">new</span>(<span class="hljs-number">0</span>);
+ *counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span> += <span class="hljs-number">1</span>;
+ <span class="hljs-built_in">assert_eq!</span>(*counter.<span class="hljs-title function_ invoke__">lock</span>().<span class="hljs-keyword">await</span>, <span class="hljs-number">1</span>);
+}<!----></code></pre> <p>Public paths stay direct—such as <code>asyncband::mutex</code>, <code>asyncband::pool</code>, and <code>asyncband::once::OnceCell</code>—while Cargo features keep unused implementations out of the build.</p> <h2 id="examples">Examples</h2> <p>Runnable examples live in the <a href="https://github.com/apache/asyncband/tree/main/examples" rel="nofollow"><code>examples</code></a> workspace crate. They demonstrate how to choose and compose Asyncband primitives in [...]
+
+<span class="hljs-keyword">use</span> asyncband::blocking::FutureExt <span class="hljs-keyword">as</span> _;
+<span class="hljs-keyword">use</span> asyncband::oneshot;
+
+<span class="hljs-keyword">let</span> (sender, receiver) = oneshot::<span class="hljs-title function_ invoke__">channel</span>();
+thread::<span class="hljs-title function_ invoke__">spawn</span>(<span class="hljs-keyword">move</span> || {
+ <span class="hljs-keyword">let</span> <span class="hljs-variable">result</span> = <span class="hljs-number">6</span> * <span class="hljs-number">7</span>;
+ sender.<span class="hljs-title function_ invoke__">send</span>(result).<span class="hljs-title function_ invoke__">unwrap</span>();
+});
+
+<span class="hljs-built_in">assert_eq!</span>(receiver.<span class="hljs-title function_ invoke__">block_on</span>(), <span class="hljs-title function_ invoke__">Ok</span>(<span class="hljs-number">42</span>));<!----></code></pre> <h3>Async first, blocking by adaptation</h3> <p>Async and synchronous synchronization primitives have different optimization constraints. Once an async operation is exposed as a runtime-agnostic future, synchronous code can usually drive that future through a < [...]
+ Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly
+ accepted projects until a further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent with other successful ASF
+ projects. While incubation status is not necessarily a reflection of the completeness or
+ stability of the code, it does indicate that the project has yet to be fully endorsed by the
+ ASF.</p> <p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of
+ The Apache Software Foundation in the United States and/or other countries. All other marks
+ mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
+
+ <script>
+ {
+ __sveltekit_8bh8pg = {
+ base: new URL(".", location).pathname.slice(0, -1)
+ };
+
+ const element = document.currentScript.parentElement;
+
+ Promise.all([
+ import("./_app/immutable/entry/start.Cl1OLO5u.js"),
+ import("./_app/immutable/entry/app.DIYMU9I8.js")
+ ]).then(([kit, app]) => {
+ kit.start(app, element, {
+ node_ids: [0, 2],
+ data: [null,null],
+ form: null,
+ error: null
+ });
+ });
+ }
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/og.png b/og.png
new file mode 100644
index 0000000..3845f17
Binary files /dev/null and b/og.png differ
diff --git a/pagefind/fragment/en_2beaedc.pf_fragment b/pagefind/fragment/en_2beaedc.pf_fragment
new file mode 100644
index 0000000..747d59e
Binary files /dev/null and b/pagefind/fragment/en_2beaedc.pf_fragment differ
diff --git a/pagefind/fragment/en_4a72d96.pf_fragment b/pagefind/fragment/en_4a72d96.pf_fragment
new file mode 100644
index 0000000..db8e3e1
Binary files /dev/null and b/pagefind/fragment/en_4a72d96.pf_fragment differ
diff --git a/pagefind/fragment/en_5c77291.pf_fragment b/pagefind/fragment/en_5c77291.pf_fragment
new file mode 100644
index 0000000..b472e4e
Binary files /dev/null and b/pagefind/fragment/en_5c77291.pf_fragment differ
diff --git a/pagefind/fragment/en_b553db3.pf_fragment b/pagefind/fragment/en_b553db3.pf_fragment
new file mode 100644
index 0000000..a96c821
Binary files /dev/null and b/pagefind/fragment/en_b553db3.pf_fragment differ
diff --git a/pagefind/fragment/en_e391299.pf_fragment b/pagefind/fragment/en_e391299.pf_fragment
new file mode 100644
index 0000000..93eab2f
Binary files /dev/null and b/pagefind/fragment/en_e391299.pf_fragment differ
diff --git a/pagefind/index/en_d027e2f.pf_index b/pagefind/index/en_d027e2f.pf_index
new file mode 100644
index 0000000..87bb4de
Binary files /dev/null and b/pagefind/index/en_d027e2f.pf_index differ
diff --git a/pagefind/pagefind-component-ui.css b/pagefind/pagefind-component-ui.css
new file mode 100644
index 0000000..5e9ef59
--- /dev/null
+++ b/pagefind/pagefind-component-ui.css
@@ -0,0 +1,1509 @@
+/*
+ * Why all the :is(*, #\#) prefixes?
+ *
+ * These components are embedded in who-knows-what sites with unpredictable CSS.
+ * We need our styles to win against host page selectors like `.content p` or
+ * `article a:hover` without using !important everywhere.
+ *
+ * The :is(*, #\#) trick adds ID-level specificity (0,1,0) without requiring
+ * an actual ID in the DOM. Chaining it (2x or 3x) builds enough specificity
+ * to beat most host selectors.
+ *
+ * The #\# is an escaped # character, creating an invalid-but-harmless ID
+ * selector that never matches, but still contributes specificity via :is().
+ *
+ * We also need these overrides to only affect the Component UI elements themselves.
+ * Users can provide custom templates to the results and searchbox components,
+ * and these must inherit their styles without having to fight ours.
+ *
+ * It's admittedly a bit of a hack but it does provide best effort styling consistency
+ * for the Component UI out in the wild.
+ */
+
+:root {
+ --pf-text: #1a1a1a;
+ --pf-text-secondary: #666;
+ --pf-text-muted: #767676;
+ --pf-background: #fff;
+ --pf-border: #e0e0e0;
+ --pf-border-focus: #999;
+ --pf-skeleton: #eee;
+ --pf-skeleton-shine: #f5f5f5;
+ --pf-hover: #f5f5f5;
+ --pf-mark: #1a1a1a;
+ --pf-scroll-shadow: rgba(0, 0, 0, 0.08);
+
+ --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.06);
+ --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
+ --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.2);
+
+ --pf-error-bg: #fef2f2;
+ --pf-error-border: #fecaca;
+ --pf-error-text: #dc2626;
+ --pf-error-text-secondary: #b91c1c;
+
+ --pf-outline-focus: #0969da;
+ --pf-outline-width: 2px;
+ --pf-outline-offset: 2px;
+
+ --pf-font:
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
+ sans-serif;
+
+ --pf-input-height: 36px;
+ --pf-input-font-size: 16px;
+ --pf-summary-font-size: 12px;
+ --pf-result-title-font-size: 14px;
+ --pf-result-excerpt-font-size: 13px;
+ --pf-modal-backdrop: rgba(0, 0, 0, 0.5);
+ --pf-results-display: flex;
+ --pf-results-flex-direction: column;
+ --pf-results-flex-wrap: nowrap;
+ --pf-results-columns: none;
+ --pf-results-gap: 8px;
+
+ --pf-border-radius: 6px;
+ --pf-image-width: 64px;
+ --pf-image-height: 48px;
+
+ --pf-icon-search: 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 [...]
+ --pf-icon-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23000' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
+
+ --pf-dropdown-z-index: 9999;
+
+ --pf-modal-max-width: 560px;
+ --pf-modal-max-height: min(80dvh, 800px);
+ --pf-modal-top: 10dvh;
+
+ --pf-searchbox-max-width: 480px;
+ --pf-searchbox-dropdown-max-height: 320px;
+
+ --pf-dropdown-max-height: 280px;
+}
+
+[data-pf-theme="dark"] {
+ --pf-text: #e5e5e5;
+ --pf-text-secondary: #a0a0a0;
+ --pf-text-muted: #949494;
+ --pf-background: #1a1a1a;
+ --pf-border: #333;
+ --pf-border-focus: #555;
+ --pf-skeleton: #2a2a2a;
+ --pf-skeleton-shine: #333;
+ --pf-hover: #252525;
+ --pf-mark: #e5e5e5;
+ --pf-scroll-shadow: rgba(255, 255, 255, 0.1);
+
+ --pf-outline-focus: #58a6ff;
+
+ --pf-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3);
+ --pf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
+ --pf-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5);
+
+ --pf-error-bg: #2a1a1a;
+ --pf-error-border: #5c2828;
+ --pf-error-text: #f87171;
+ --pf-error-text-secondary: #ef4444;
+
+ --pf-modal-backdrop: rgba(0, 0, 0, 0.7);
+}
+
+pagefind-config,
+pagefind-filter-dropdown,
+pagefind-filter-pane,
+pagefind-input,
+pagefind-keyboard-hints,
+pagefind-modal,
+pagefind-modal-body,
+pagefind-modal-footer,
+pagefind-modal-header,
+pagefind-modal-trigger,
+pagefind-results,
+pagefind-searchbox,
+pagefind-summary {
+ all: initial;
+ display: block;
+ box-sizing: border-box;
+
+ /* Typography baseline */
+ font-family:
+ var(--pf-font,
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ sans-serif);
+ font-size: 16px;
+ line-height: 1.5;
+ color: CanvasText;
+ contain: layout style;
+}
+
+pagefind-searchbox,
+pagefind-filter-dropdown {
+ position: relative;
+}
+
+pagefind-searchbox:has(.pf-searchbox.open),
+pagefind-filter-dropdown:has(.pf-dropdown-trigger.open) {
+ z-index: var(--pf-dropdown-z-index);
+}
+
+pagefind-config {
+ display: none;
+}
+
+pagefind-modal-trigger {
+ display: inline-block;
+}
+
+:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *) {
+ all: revert;
+ box-sizing: border-box;
+}
+
+:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *)::before,
+:is(*, #\#):is(*, #\#) :is([class^="pf-"], [class*=" pf-"]):not(svg, svg *)::after {
+ box-sizing: border-box;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) [class^="pf-"][hidden],
+:is(*, #\#):is(*, #\#):is(*, #\#) [class*=" pf-"][hidden] {
+ display: none;
+}
+
+[data-pf-hidden] {
+ display: none !important;
+}
+
+[data-pf-suppressed] {
+ opacity: 0 !important;
+ pointer-events: none !important;
+}
+
+[data-pf-sr-hidden] {
+ clip: rect(0 0 0 0) !important;
+ -webkit-clip-path: inset(100%) !important;
+ clip-path: inset(100%) !important;
+ height: 1px !important;
+ overflow: hidden !important;
+ position: absolute !important;
+ white-space: nowrap !important;
+ width: 1px !important;
+}
+
+/*
+* Suppress native browser outlines.
+* This is only okay because we exhaustively
+* provide our own high-contrast custom focus styles.
+*/
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options:focus-visible {
+ outline: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible {
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
+ outline-offset: var(--pf-outline-offset);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-key,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0 4px;
+ background: var(--pf-hover);
+ border: 1px solid var(--pf-border);
+ border-radius: 3px;
+ font-weight: 500;
+ color: var(--pf-text-secondary);
+ font-family: var(--pf-font);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-key--sm,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-key {
+ min-width: 16px;
+ height: 16px;
+ font-size: 9px;
+ padding: 0 3px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper {
+ position: relative;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-wrapper::before,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before {
+ content: "";
+ position: absolute;
+ background-color: var(--pf-text-muted);
+ width: 14px;
+ height: 14px;
+ top: calc((var(--pf-input-height) - 14px) / 2);
+ inset-inline-start: 10px;
+ -webkit-mask-image: var(--pf-icon-search);
+ mask-image: var(--pf-icon-search);
+ -webkit-mask-size: 100%;
+ mask-size: 100%;
+ pointer-events: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper::before {
+ z-index: 1;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input {
+ width: 100%;
+ height: var(--pf-input-height);
+ background-color: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-radius: var(--pf-border-radius);
+ font-family: var(--pf-font, inherit);
+ font-size: var(--pf-input-font-size);
+ color: var(--pf-text);
+ box-sizing: border-box;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input {
+ padding: 0;
+ padding-inline-start: 32px;
+ padding-inline-end: 36px;
+ font-weight: 400;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible {
+ border-color: var(--pf-outline-focus);
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::placeholder,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input::placeholder {
+ color: var(--pf-text-muted);
+}
+
+/* Hide native search clear button - we have our own */
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-decoration,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-cancel-button,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-results-button,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input::-webkit-search-results-decoration {
+ display: none;
+ appearance: none;
+ -webkit-appearance: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear {
+ position: absolute;
+ inset-inline-end: 2px;
+ top: 50%;
+ transform: translateY(-50%);
+ height: calc(100% - 4px);
+ min-width: 44px;
+ padding: 0 8px;
+ background: none;
+ border: none;
+ font-size: 12px;
+ color: var(--pf-text-muted);
+ cursor: pointer;
+ border-radius: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:hover {
+ background: var(--pf-hover);
+ color: var(--pf-text-secondary);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear[data-pf-suppressed] {
+ display: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-summary {
+ font-size: var(--pf-summary-font-size);
+ color: var(--pf-text-muted);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-results {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: var(--pf-results-display);
+ flex-direction: var(--pf-results-flex-direction);
+ flex-wrap: var(--pf-results-flex-wrap);
+ grid-template-columns: var(--pf-results-columns);
+ gap: var(--pf-results-gap);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card {
+ position: relative;
+ display: flex;
+ gap: 12px;
+ padding: 12px;
+ background: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-radius: var(--pf-border-radius);
+ transition:
+ border-color 0.15s,
+ box-shadow 0.15s;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:hover {
+ border-color: var(--pf-border-focus);
+ box-shadow: var(--pf-shadow-sm);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-result-card:has(.pf-result-link:focus-visible) {
+ border-color: var(--pf-outline-focus);
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-card:has([data-pf-selected]) {
+ border-color: var(--pf-border-focus);
+ background: var(--pf-hover);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-image {
+ width: var(--pf-image-width);
+ height: var(--pf-image-height);
+ border-radius: 4px;
+ object-fit: cover;
+ background: var(--pf-skeleton);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-content {
+ flex: 1;
+ min-width: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-title {
+ font-size: var(--pf-result-title-font-size);
+ font-weight: 500;
+ margin: 0;
+ line-height: 1.4;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link {
+ color: var(--pf-text);
+ text-decoration: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-link:hover {
+ text-decoration: underline;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt {
+ font-size: var(--pf-result-excerpt-font-size);
+ color: var(--pf-text-secondary);
+ margin: 4px 0 0 0;
+ line-height: 1.5;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-result-excerpt mark,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt mark,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt mark {
+ background: transparent;
+ font-weight: 500;
+ color: var(--pf-mark);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton {
+ background: var(--pf-skeleton);
+ border-radius: 4px;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton {
+ background: linear-gradient(
+ 90deg,
+ var(--pf-skeleton) 25%,
+ var(--pf-skeleton-shine) 50%,
+ var(--pf-skeleton) 75%
+ );
+ background-size: 200% 100%;
+ animation: pf-shimmer 1.5s infinite;
+ }
+
+ @keyframes pf-shimmer {
+ 0% {
+ background-position: 200% 0;
+ }
+ 100% {
+ background-position: -200% 0;
+ }
+ }
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-title {
+ height: 14px;
+ width: 60%;
+ margin-bottom: 8px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-excerpt {
+ height: 13px;
+ width: 90%;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-skeleton-image {
+ width: var(--pf-image-width);
+ height: var(--pf-image-height);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty {
+ text-align: center;
+ padding: 32px 16px;
+ color: var(--pf-text-muted);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-icon {
+ font-size: 24px;
+ margin-bottom: 8px;
+ opacity: 0.4;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-empty-text {
+ font-size: 14px;
+ margin: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error {
+ padding: 12px 16px;
+ background: var(--pf-error-bg);
+ border: 1px solid var(--pf-error-border);
+ border-radius: var(--pf-border-radius);
+ color: var(--pf-error-text);
+ font-size: 13px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error strong {
+ font-weight: 600;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-error small {
+ display: block;
+ margin-top: 4px;
+ color: var(--pf-error-text-secondary);
+ font-size: 12px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chips {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ margin: 0;
+ padding: 0;
+ padding-inline-start: 12px;
+ list-style: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip {
+ display: inline-flex;
+ flex-direction: column;
+ gap: 2px;
+ padding: 8px 10px;
+ background: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-radius: 6px;
+ font-size: 12px;
+ transition:
+ border-color 0.15s,
+ box-shadow 0.15s;
+ position: relative;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:hover {
+ border-color: var(--pf-border-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-heading-chip:has(.pf-heading-link:focus-visible) {
+ border-color: var(--pf-outline-focus);
+ box-shadow: 0 0 0 var(--pf-outline-width) var(--pf-outline-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-chip:has([data-pf-selected]) {
+ border-color: var(--pf-border-focus);
+ background: var(--pf-hover);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link {
+ color: var(--pf-text);
+ font-weight: 500;
+ text-decoration: none;
+ line-height: 1.3;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::before {
+ content: "#";
+ color: var(--pf-text-muted);
+ margin-inline-end: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-link:hover {
+ text-decoration: underline;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-heading-excerpt {
+ margin: 0;
+ font-size: 12px;
+ color: var(--pf-text-secondary);
+ line-height: 1.4;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ padding: 16px;
+ background: var(--pf-skeleton);
+ border-radius: var(--pf-border-radius);
+ border: 1px solid var(--pf-border);
+ overflow: hidden;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group {
+ display: block;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) details.pf-filter-group > .pf-filter-options {
+ margin-top: 8px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ details.pf-filter-group
+ > .pf-filter-fieldset {
+ margin-top: 8px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-fieldset {
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-title {
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.3px;
+ color: var(--pf-text-muted);
+ margin: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-name,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ min-width: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title {
+ cursor: pointer;
+ list-style: none;
+ display: flex;
+ align-items: center;
+ padding: 4px 0;
+ margin: -4px 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ summary.pf-filter-group-title::-webkit-details-marker {
+ display: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title::after {
+ content: "";
+ width: 10px;
+ height: 6px;
+ flex-shrink: 0;
+ margin-inline-start: 8px;
+ background: var(--pf-text-muted);
+ -webkit-mask-image: var(--pf-icon-arrow);
+ mask-image: var(--pf-icon-arrow);
+ -webkit-mask-size: 100% 100%;
+ mask-size: 100% 100%;
+ transition: transform 0.15s;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ details.pf-filter-group:not([open])
+ > summary.pf-filter-group-title::after {
+ transform: rotate(-90deg);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ [dir="rtl"]
+ details.pf-filter-group:not([open])
+ > summary.pf-filter-group-title::after {
+ transform: rotate(90deg);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) summary.pf-filter-group-title:hover {
+ color: var(--pf-text-secondary);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-selected-badge {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ background: var(--pf-text);
+ color: var(--pf-background);
+ font-size: 11px;
+ font-weight: 500;
+ height: 18px;
+ min-width: 18px;
+ padding: 0 5px;
+ border-radius: 9px;
+ flex-shrink: 0;
+ box-sizing: border-box;
+ font-variant-numeric: tabular-nums;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-group-count {
+ margin-inline-start: auto;
+ text-transform: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-filter-group-count[data-pf-hidden],
+:is(*, #\#):is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-selected-badge[data-pf-hidden] {
+ display: inline-flex !important;
+ visibility: hidden;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-options {
+ display: flex;
+ flex-direction: column;
+ gap: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ min-height: 30px;
+ cursor: pointer;
+ font-size: 13px;
+ color: var(--pf-text-secondary);
+}
+
+@media (pointer: coarse) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox {
+ min-height: 44px;
+ }
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox:hover {
+ color: var(--pf-text);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-checkbox-input {
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ accent-color: var(--pf-text);
+ cursor: pointer;
+ color-scheme: light;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) [data-pf-theme="dark"] .pf-checkbox-input {
+ color-scheme: dark;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible) {
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
+ outline-offset: var(--pf-outline-offset);
+ border-radius: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-checkbox-count {
+ margin-inline-start: auto;
+ font-size: 11px;
+ color: var(--pf-text-muted);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-wrapper {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ height: var(--pf-input-height);
+ padding: 0 12px;
+ background: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-radius: var(--pf-border-radius);
+ font-size: 13px;
+ color: var(--pf-text-secondary);
+ cursor: pointer;
+ transition: border-color 0.15s;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:hover {
+ border-color: var(--pf-border-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open {
+ border-color: var(--pf-border-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.wrap {
+ height: auto;
+ min-height: var(--pf-input-height);
+ padding-top: 6px;
+ padding-bottom: 6px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger-label.wrap,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label.wrap {
+ white-space: normal;
+ line-height: 1.3;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-arrow {
+ width: 10px;
+ height: 6px;
+ flex-shrink: 0;
+ background: var(--pf-text-muted);
+ -webkit-mask-image: var(--pf-icon-arrow);
+ mask-image: var(--pf-icon-arrow);
+ -webkit-mask-size: 100% 100%;
+ mask-size: 100% 100%;
+ -webkit-mask-repeat: no-repeat;
+ mask-repeat: no-repeat;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger.open .pf-dropdown-arrow {
+ transform: rotate(180deg);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu {
+ position: absolute;
+ top: calc(100% + 4px);
+ inset-inline-start: 0;
+ min-width: 180px;
+ max-height: var(--pf-dropdown-max-height);
+ overflow-y: auto;
+ border: 1px solid var(--pf-border);
+ border-radius: var(--pf-border-radius);
+ box-shadow: var(--pf-shadow-md);
+ padding: 4px;
+ z-index: 100;
+
+ background:
+ /* Top shadow cover (moves with content) */
+ linear-gradient(var(--pf-background) 30%, transparent) center top,
+ /* Bottom shadow cover (moves with content) */
+ linear-gradient(transparent, var(--pf-background) 70%) center bottom,
+ /* Top shadow (stays fixed) */
+ linear-gradient(var(--pf-scroll-shadow), transparent) center top,
+ /* Bottom shadow (stays fixed) */
+ linear-gradient(transparent, var(--pf-scroll-shadow)) center bottom,
+ var(--pf-background);
+ background-size:
+ 100% 40px,
+ 100% 40px,
+ 100% 14px,
+ 100% 14px,
+ 100% 100%;
+ background-repeat: no-repeat;
+ background-attachment: local, local, scroll, scroll, scroll;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 12px 10px;
+ min-height: 44px;
+ font-size: 13px;
+ color: var(--pf-text-secondary);
+ border-radius: 4px;
+ cursor: pointer;
+ box-sizing: border-box;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option:hover {
+ background: var(--pf-hover);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option.pf-dropdown-option-focused {
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
+ outline-offset: -2px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option.wrap {
+ align-items: flex-start;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-checkbox {
+ width: 16px;
+ height: 16px;
+ flex-shrink: 0;
+ border: 1px solid var(--pf-border);
+ border-radius: 3px;
+ background: var(--pf-background);
+ position: relative;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option.wrap
+ .pf-dropdown-checkbox {
+ margin-top: 2px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option[aria-selected="true"]
+ .pf-dropdown-checkbox {
+ background: var(--pf-text);
+ border-color: var(--pf-text);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option[aria-selected="true"]
+ .pf-dropdown-checkbox::after {
+ content: "";
+ position: absolute;
+ inset-inline-start: 5px;
+ top: 2px;
+ width: 4px;
+ height: 8px;
+ border: solid var(--pf-background);
+ border-width: 0 2px 2px 0;
+ transform: rotate(45deg);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-label {
+ flex: 1;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-count {
+ margin-inline-start: auto;
+ font-size: 11px;
+ color: var(--pf-text-muted);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option.wrap
+ .pf-dropdown-option-count {
+ margin-top: 2px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-option-loading {
+ pointer-events: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option-loading
+ .pf-dropdown-checkbox {
+ width: 16px;
+ height: 16px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option-loading
+ .pf-dropdown-option-label {
+ height: 13px;
+ border-radius: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-error {
+ padding: 12px 10px;
+ font-size: 13px;
+ color: var(--pf-error-text);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear {
+ display: inline-flex;
+ align-items: center;
+ height: 44px;
+ padding: 0 10px;
+ margin-inline-start: 4px;
+ background: transparent;
+ border: 1px solid transparent;
+ border-radius: var(--pf-border-radius);
+ font-size: 12px;
+ color: var(--pf-text-secondary);
+ cursor: pointer;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-clear:hover:not([aria-disabled="true"]) {
+ background: var(--pf-hover);
+ border-color: var(--pf-border);
+ color: var(--pf-text);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-clear[aria-disabled="true"] {
+ color: var(--pf-text-muted);
+ cursor: default;
+ opacity: 0.4;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-options {
+ max-height: var(--pf-dropdown-max-height);
+ overflow-y: auto;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ height: var(--pf-input-height);
+ padding: 0 14px;
+ background: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-radius: var(--pf-border-radius);
+ font-size: 14px;
+ color: var(--pf-text-muted);
+ cursor: pointer;
+ transition:
+ border-color 0.15s,
+ box-shadow 0.15s;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:hover {
+ border-color: var(--pf-border-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-icon {
+ width: 14px;
+ height: 14px;
+ background: var(--pf-text-muted);
+ -webkit-mask-image: var(--pf-icon-search);
+ mask-image: var(--pf-icon-search);
+ -webkit-mask-size: 100%;
+ mask-size: 100%;
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-text {
+ flex: 1;
+ text-align: start;
+ color: var(--pf-text-muted);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-shortcut {
+ display: inline-flex;
+ align-items: center;
+ gap: 2px;
+ margin-inline-start: 8px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-key {
+ min-width: 20px;
+ height: 18px;
+ font-size: 11px;
+ border-radius: 4px;
+}
+
+/*
+ NB: Background scrolling is prevented with the overscroll-behavior: contain
+ values below, plus overflow: hidden on the backdrop.
+ As of writing, this only works on Chrome 144. Tracking:
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1837436
+ https://bugs.webkit.org/show_bug.cgi?id=243452
+*/
+
+:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal {
+ position: fixed;
+ width: 100%;
+ max-width: var(--pf-modal-max-width);
+ max-height: var(--pf-modal-max-height);
+ margin: var(--pf-modal-top) auto;
+ padding: 0;
+ background: var(--pf-background);
+ border: none;
+ border-radius: 12px;
+ box-shadow: var(--pf-shadow-lg);
+ flex-direction: column;
+ overflow: hidden;
+ overscroll-behavior: contain;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal::backdrop {
+ background: var(--pf-modal-backdrop);
+ overflow: hidden;
+ overscroll-behavior: contain;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
+ display: flex;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
+ animation: pf-modal-appear 0.15s ease-out;
+ }
+
+ @keyframes pf-modal-appear {
+ from {
+ opacity: 0;
+ transform: scale(0.95);
+ }
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+ }
+}
+
+@media (max-width: 640px) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) dialog.pf-modal[open] {
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100dvh;
+ max-width: none;
+ max-height: none;
+ margin: 0;
+ padding: 0;
+ border-radius: 0;
+ animation: none;
+ }
+
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header {
+ padding-top: max(16px, env(safe-area-inset-top));
+ padding-left: max(16px, env(safe-area-inset-left));
+ padding-right: max(16px, env(safe-area-inset-right));
+ }
+
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body {
+ padding-left: max(16px, env(safe-area-inset-left));
+ padding-right: max(16px, env(safe-area-inset-right));
+ }
+
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer {
+ padding-bottom: max(12px, env(safe-area-inset-bottom));
+ padding-left: max(16px, env(safe-area-inset-left));
+ padding-right: max(16px, env(safe-area-inset-right));
+ }
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 16px;
+ border-bottom: 1px solid var(--pf-border);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header-content {
+ flex: 1;
+ min-width: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close {
+ display: none;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+ padding: 0;
+ background: transparent;
+ border: none;
+ border-radius: 8px;
+ color: var(--pf-text-secondary);
+ cursor: pointer;
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:hover {
+ background: var(--pf-hover);
+ color: var(--pf-text);
+}
+
+@media (max-width: 640px) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close {
+ display: flex;
+ }
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ pagefind-modal-header
+ .pf-input-wrapper::before,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input-wrapper::before {
+ top: 50%;
+ transform: translateY(-50%);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-header .pf-input,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-header .pf-input {
+ border: none;
+ background: transparent;
+ font-size: var(--pf-input-font-size);
+ height: 40px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body {
+ flex: 1 1 auto;
+ overflow-y: auto;
+ overscroll-behavior: contain;
+ padding: 8px 16px 16px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-body .pf-summary,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-body .pf-summary {
+ margin-bottom: 8px;
+}
+
+/* Modal body uses the base card styles - only minor adjustments needed */
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ pagefind-modal-body
+ .pf-result-card:has([data-pf-selected]),
+:is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-modal-body
+ .pf-result-card:has([data-pf-selected]) {
+ background: var(--pf-skeleton);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-modal-footer,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer {
+ padding: 10px 16px;
+ border-top: 1px solid var(--pf-border);
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ font-size: 12px;
+ color: var(--pf-text-muted);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hint {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-key,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-key {
+ min-width: 18px;
+ height: 18px;
+ font-size: 10px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints,
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 16px;
+ font-size: 12px;
+ color: var(--pf-text-muted);
+ min-height: 20px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ max-width: var(--pf-searchbox-max-width);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper {
+ position: relative;
+}
+
+/* Override trigger-shortcut positioning when inside searchbox */
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper .pf-trigger-shortcut {
+ position: absolute;
+ inset-inline-end: 12px;
+ top: 50%;
+ transform: translateY(-50%);
+ pointer-events: none;
+ margin-inline-start: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input {
+ padding: 0;
+ padding-inline-start: 32px;
+ padding-inline-end: 12px;
+}
+
+/* Add padding when shortcut is present */
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input-wrapper:has(.pf-trigger-shortcut) .pf-searchbox-input {
+ padding-inline-end: 72px;
+}
+
+/* Hide shortcut badge when input is focused */
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus ~ .pf-trigger-shortcut {
+ display: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus {
+ padding-inline-end: 12px;
+ border-color: var(--pf-border-focus);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-input {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-color: var(--pf-border);
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown {
+ display: none;
+ flex-direction: column;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ right: 0;
+ background: var(--pf-background);
+ border: 1px solid var(--pf-border);
+ border-top: none;
+ border-radius: 0 0 var(--pf-border-radius) var(--pf-border-radius);
+ box-shadow: var(--pf-shadow-md);
+ max-height: var(--pf-searchbox-dropdown-max-height);
+ z-index: 100;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox.open .pf-searchbox-dropdown {
+ display: flex;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-results {
+ list-style: none;
+ padding: 4px;
+ margin: 0;
+ flex: 1;
+ overflow-y: auto;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result {
+ display: block;
+ padding: 12px 10px;
+ min-height: 44px;
+ border-radius: 4px;
+ cursor: pointer;
+ text-decoration: none;
+ color: inherit;
+ box-sizing: border-box;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result:hover {
+ background: var(--pf-hover);
+}
+
+/* Placeholder skeleton - non-interactive */
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder {
+ cursor: default;
+ pointer-events: none;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-placeholder:hover {
+ background: transparent;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] {
+ background: var(--pf-hover);
+ outline: var(--pf-outline-width) solid var(--pf-outline-focus);
+ outline-offset: -2px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-title {
+ font-size: 13px;
+ font-weight: 500;
+ color: var(--pf-text);
+ margin: 0;
+ line-height: 1.3;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-excerpt {
+ font-size: 12px;
+ color: var(--pf-text-secondary);
+ margin: 2px 0 0 0;
+ line-height: 1.4;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-subresult {
+ padding-inline-start: 20px;
+ border-inline-start: 2px solid var(--pf-border);
+ margin-inline-start: 10px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result-meta {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin-top: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer {
+ padding: 8px 10px;
+ border-top: 1px solid var(--pf-border);
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ gap: 12px;
+ font-size: 11px;
+ color: var(--pf-text-muted);
+ flex-shrink: 0;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer-hint {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-empty {
+ padding: 20px 10px;
+ text-align: center;
+ color: var(--pf-text-muted);
+ font-size: 13px;
+}
+
+:is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-loading {
+ padding: 16px 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ color: var(--pf-text-muted);
+ font-size: 13px;
+}
+
+/* Ensure focus indicators are visible in Windows High Contrast Mode */
+@media (forced-colors: active) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-input:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-input-clear:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-trigger-btn:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-close:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-trigger:focus-visible,
+ :is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-result-card:has(.pf-result-link:focus-visible),
+ :is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-heading-chip:has(.pf-heading-link:focus-visible),
+ :is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-filter-checkbox:has(.pf-checkbox-input:focus-visible),
+ :is(*, #\#):is(*, #\#):is(*, #\#)
+ .pf-dropdown-option.pf-dropdown-option-focused,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-result[data-pf-selected] {
+ outline: 2px solid CanvasText;
+ outline-offset: 2px;
+ }
+}
+
+/* Hide keyboard hints on touch-only devices (no hover capability) */
+@media (hover: none) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) pagefind-keyboard-hints,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-keyboard-hints,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-footer,
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-modal-footer-hint {
+ display: none;
+ }
+}
+
+@media (max-width: 640px) {
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-dropdown-menu {
+ min-width: unset;
+ width: max(180px, calc(100vw - 32px));
+ max-width: calc(100vw - 32px);
+ inset-inline-start: unset;
+ left: 50%;
+ transform: translateX(-50%);
+ max-height: min(var(--pf-dropdown-max-height), 50vh);
+ }
+
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-searchbox-dropdown {
+ max-height: min(var(--pf-searchbox-dropdown-max-height), 60vh);
+ }
+
+ :is(*, #\#):is(*, #\#):is(*, #\#) .pf-filter-pane {
+ padding: 12px;
+ gap: 16px;
+ }
+}
diff --git a/pagefind/pagefind-component-ui.js b/pagefind/pagefind-component-ui.js
new file mode 100644
index 0000000..d8c1351
--- /dev/null
+++ b/pagefind/pagefind-component-ui.js
@@ -0,0 +1,56 @@
+"use strict";(()=>{var ls=Object.defineProperty;var h=(n,s)=>{for(var e in s)ls(n,e,{get:s[e],enumerable:!0})};var Bt={};h(Bt,{PagefindConfig:()=>Re,PagefindElement:()=>f,PagefindFilterDropdown:()=>Me,PagefindFilterPane:()=>Ne,PagefindInput:()=>ke,PagefindKeyboardHints:()=>Le,PagefindModal:()=>Oe,PagefindModalBody:()=>Ie,PagefindModalFooter:()=>Ue,PagefindModalHeader:()=>we,PagefindModalTrigger:()=>He,PagefindResults:()=>Se,PagefindSearchbox:()=>Fe,PagefindSummary:()=>Ae,configureInstanc [...]
+`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location"),this.__dispatch__("error",{type:"bundle_load_failed",message:"Could not load search bundle",bundlePath:this.options.bundlePath,error:t}),this.hasAnnouncementCapability()||this.announce("error_search",{},"assertive");return}let e=s.createInstance(this.pagefindOptions||{});f [...]
+\r`.includes(s[e]);)e++},r=u=>s.slice(e,e+u.length)===u,i=u=>{r(u)&&(e+=u.length)},a=()=>{let u="";for(;e<s.length&&/\w/.test(s[e]);)u+=s[e++];return u},l=()=>{t();let u=e,d,_=s[e];if(_==='"'||_==="'"){let p=s[e++],g="";for(;e<s.length&&s[e]!==p;){if(s[e]==="\\"&&e+1<s.length){e++;let E=s[e];g+=E==="n"?`
+`:E==="t"?" ":E==="r"?"\r":E,e++;continue}g+=s[e++]}e<s.length?e++:g="",d={t:"L",val:g}}else if(/[-0-9.]/.test(_)){let p="",g=0;for(s[e]==="-"&&(p+=s[e++]),s[e]==="."&&(p+=s[e++],g=1);e<s.length&&(/[0-9]/.test(s[e])||s[e]==="."&&!g++);)p+=s[e++];d=p==="-"||p==="."||p===""?{t:"V",path:[p||"-"]}:{t:"L",val:parseFloat(p)}}else{let p=a();if(p==="true")d={t:"L",val:!0};else if(p==="false")d={t:"L",val:!1};else if(p==="null")d={t:"L",val:null};else if(t(),s[e]==="("){e++;let g=[];for(t();e<s.l [...]
+ <strong>Pagefind Error:</strong> ${this.escapeHtml(e.message||"Unknown error")}
+ ${e.details?`<br><small>${this.escapeHtml(e.details)}</small>`:""}
+ `,this.appendChild(t),this.dispatchEvent(new CustomEvent("pagefind-error",{detail:e,bubbles:!0,composed:!0}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var Re=class extends f{init(){this.setAttribute("hidden","")}register(s){s.registerUtility(this);let e=this.getAttribute("bundle-path");e&&(s.options.bundlePath=e);let t=this.getAttribute("base-url");t&&(s.pagefindOptions.baseUrl=t);let r=this.getAttribute("excerpt-length");r&&(s.pagefi [...]
+ <div class="pf-result-card">
+ {{#if and(options.show_images, meta.image)}}
+ <img class="pf-result-image" src="{{ meta.image | resolveUrl(meta.url | default(url)) }}" alt="{{ meta.image_alt | default(meta.title) }}">
+ {{/if}}
+ <div class="pf-result-content">
+ <p class="pf-result-title">
+ <a class="pf-result-link" href="{{ meta.url | default(url) | safeUrl }}"{{#if options.link_target}} target="{{ options.link_target }}"{{/if}}{{#if eq(options.link_target, "_blank")}} rel="noopener"{{/if}}>{{ meta.title }}</a>
+ </p>
+ {{#if excerpt}}
+ <p class="pf-result-excerpt">{{+ excerpt +}}</p>
+ {{/if}}
+ </div>
+ </div>
+ {{#if sub_results}}
+ <ul class="pf-heading-chips">
+ {{#each sub_results as sub}}
+ <li class="pf-heading-chip">
+ <a class="pf-heading-link" href="{{ sub.url | safeUrl }}"{{#if options.link_target}} target="{{ options.link_target }}"{{/if}}{{#if eq(options.link_target, "_blank")}} rel="noopener"{{/if}}>{{ sub.title }}</a>
+ <p class="pf-heading-excerpt">{{+ sub.excerpt +}}</p>
+ </li>
+ {{/each}}
+ </ul>
+ {{/if}}
+</li>`,Ta=`<li class="pf-result" aria-hidden="true">
+ <div class="pf-result-card">
+ <div class="pf-skeleton pf-skeleton-image"></div>
+ <div class="pf-result-content">
+ <p class="pf-result-title pf-skeleton pf-skeleton-title"></p>
+ <p class="pf-result-excerpt pf-skeleton pf-skeleton-excerpt"></p>
+ </div>
+ </div>
+</li>`,Ca=R(ba),ya=R(Ta),rs=(n,s)=>{for(let e of n)if(e instanceof Element){e.setAttribute("data-pf-result-index",String(s));break}},zt=n=>{if(!(n instanceof HTMLElement))return null;let s=window.getComputedStyle(n).overflowY;return s!=="visible"&&s!=="hidden"?n:zt(n.parentNode)},Dt=class{constructor(s){this.result=null;this.loading=!1;this.observer=null;this.rawResult=s.result,this.index=s.index,this.placeholderNodes=s.placeholderNodes,this.resultFn=s.resultFn,this.intersectionEl=s.inte [...]
+ <p class="pf-searchbox-result-title" id="{{ aria.title_id }}">{{ meta.title | default("Untitled") }}</p>
+ {{#if excerpt}}
+ <p class="pf-searchbox-result-excerpt" id="{{ aria.excerpt_id }}">{{+ excerpt +}}</p>
+ {{/if}}
+</a>{{#if and(options.show_sub_results, sub_results)}}
+{{#each sub_results as sub}}
+<a class="pf-searchbox-result pf-searchbox-subresult" id="{{ sub.aria.result_id }}" href="{{ sub.url | safeUrl }}" role="option" aria-selected="false" aria-labelledby="{{ sub.aria.title_id }}"{{#if sub.excerpt}} aria-describedby="{{ sub.aria.excerpt_id }}"{{/if}}>
+ <p class="pf-searchbox-result-title" id="{{ sub.aria.title_id }}">{{ sub.title | default("Section") }}</p>
+ {{#if sub.excerpt}}
+ <p class="pf-searchbox-result-excerpt" id="{{ sub.aria.excerpt_id }}">{{+ sub.excerpt +}}</p>
+ {{/if}}
+</a>
+{{/each}}
+</div>{{/if}}`,ns=R(Ra),ka=`<div class="pf-searchbox-result pf-searchbox-placeholder" aria-hidden="true">
+ <p class="pf-searchbox-result-title pf-skeleton pf-skeleton-title"></p>
+ <p class="pf-searchbox-result-excerpt pf-skeleton pf-skeleton-excerpt"></p>
+</div>`,Aa=R(ka),jt=class{constructor(s){this.data=null;this.cachedOptions=null;this.loading=!1;this.retryDelay=0;this.observer=null;this.rawResult=s.rawResult,this.placeholderEl=s.placeholderEl,this.renderFn=s.renderFn,this.intersectionRoot=s.intersectionRoot,this.index=s.index,this.onLoad=s.onLoad,this.setupObserver()}setupObserver(){if(this.data!==null||this.observer!==null)return;let s={root:this.intersectionRoot,rootMargin:"50px",threshold:.01};this.observer=new IntersectionObserver [...]
diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json
new file mode 100644
index 0000000..f0f528d
--- /dev/null
+++ b/pagefind/pagefind-entry.json
@@ -0,0 +1 @@
+{"version":"1.5.2","languages":{"en":{"hash":"en_29e16dd0ca","wasm":"en","page_count":5}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]}
\ No newline at end of file
diff --git a/pagefind/pagefind-highlight.js b/pagefind/pagefind-highlight.js
new file mode 100644
index 0000000..0e538a5
--- /dev/null
+++ b/pagefind/pagefind-highlight.js
@@ -0,0 +1,1070 @@
+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 __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+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
+));
+var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+
+// 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 = /* @__PURE__ */ (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", " [...]
+ 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
+ }) {
+ __publicField(this, "highlightParam");
+ __publicField(this, "markContext");
+ __publicField(this, "markOptions");
+ __publicField(this, "addStyles");
+ 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/pagefind/pagefind-modular-ui.css b/pagefind/pagefind-modular-ui.css
new file mode 100644
index 0000000..9c6793e
--- /dev/null
+++ b/pagefind/pagefind-modular-ui.css
@@ -0,0 +1,214 @@
+: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.255Z [...]
+ 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 [...]
+ -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/pagefind/pagefind-modular-ui.js b/pagefind/pagefind-modular-ui.js
new file mode 100644
index 0000000..6caacd6
--- /dev/null
+++ b/pagefind/pagefind-modular-ui.js
@@ -0,0 +1,8 @@
+(()=>{var w=Object.defineProperty;var b=(i,e)=>{for(var t in e)w(i,t,{get:e[t],enumerable:!0})};var f={};b(f,{FilterPills:()=>c,Input:()=>a,Instance:()=>p,ResultList:()=>o,Summary:()=>h});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 [...]
+ <div class="pagefind-modular-list-thumb" data-pfmod-loading></div>
+ <div class="pagefind-modular-list-inner">
+ <p class="pagefind-modular-list-title" data-pfmod-loading>${i(30)}</p>
+ <p class="pagefind-modular-list-excerpt" data-pfmod-loading>${i(40)}</p>
+ </div>
+</li>`},y=(i,e)=>{let t=new r("li").class("pagefind-modular-list-result");if(e){let l=new r("div").class("pagefind-modular-list-thumb").addTo(t);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(l)}let s=new r("div").class("pagefind-modular-list-inner").addTo(t),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 [...]
+`)),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 thi [...]
diff --git a/pagefind/pagefind-ui.css b/pagefind/pagefind-ui.css
new file mode 100644
index 0000000..c17a1d4
--- /dev/null
+++ b/pagefind/pagefind-ui.css
@@ -0,0 +1 @@
+.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 [...]
diff --git a/pagefind/pagefind-ui.js b/pagefind/pagefind-ui.js
new file mode 100644
index 0000000..6a8a4d7
--- /dev/null
+++ b/pagefind/pagefind-ui.js
@@ -0,0 +1,2 @@
+(()=>{var Os=Object.defineProperty;var x=(l,e)=>{for(var t in e)Os(l,t,{get:e[t],enumerable:!0})};function R(){}function Bt(l){return l()}function ct(){return Object.create(null)}function H(l){l.forEach(Bt)}function ut(l){return typeof l=="function"}function O(l,e){return l!=l?e==e:l!==e||l&&typeof l=="object"||typeof l=="function"}var ot;function ge(l,e){return l===e?!0:(ot||(ot=document.createElement("a")),ot.href=e,l===ot.href)}function Wl(l){return Object.keys(l).length===0}var ht=ty [...]
+`)),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||t(24,u=C?12:30);let X={...m||{},excerptLength:u};await Q.options(X);for(let L of f){if(!L.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let Y=L.bundlePath;delete L.bundlePath,await Q.mergeIndex(Y,L)}E=Q,Ws()}},Ws=async()=>{E&&(Xl=await E.filter [...]
diff --git a/pagefind/pagefind-worker.js b/pagefind/pagefind-worker.js
new file mode 100644
index 0000000..e2b1dd2
--- /dev/null
+++ b/pagefind/pagefind-worker.js
@@ -0,0 +1,6 @@
+const pagefind_version="1.5.2";let wasm_bindgen=(function(exports){let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString();}function add_synthetic_filter(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;}exports.add_synthetic_filter=add_synthetic_filter;function enter_pl [...]
+${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 this.throttledFetch(`${this [...]
+${e?.toString()}`);}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await this.throttledFetch(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({module_or_path: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 this.throttledFetch(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 [...]
\ No newline at end of file
diff --git a/pagefind/pagefind.en_29e16dd0ca.pf_meta b/pagefind/pagefind.en_29e16dd0ca.pf_meta
new file mode 100644
index 0000000..861c2af
Binary files /dev/null and b/pagefind/pagefind.en_29e16dd0ca.pf_meta differ
diff --git a/pagefind/pagefind.js b/pagefind/pagefind.js
new file mode 100644
index 0000000..1e38c36
--- /dev/null
+++ b/pagefind/pagefind.js
@@ -0,0 +1,6 @@
+const pagefind_version="1.5.2";let wasm_bindgen=(function(exports){let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString();}function add_synthetic_filter(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;}exports.add_synthetic_filter=add_synthetic_filter;function enter_pl [...]
+${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 this.throttledFetch(`${this [...]
+${e?.toString()}`);}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await this.throttledFetch(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({module_or_path: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 this.throttledFetch(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 [...]
\ No newline at end of file
diff --git a/pagefind/wasm.en.pagefind b/pagefind/wasm.en.pagefind
new file mode 100644
index 0000000..92f8022
Binary files /dev/null and b/pagefind/wasm.en.pagefind differ
diff --git a/pagefind/wasm.unknown.pagefind b/pagefind/wasm.unknown.pagefind
new file mode 100644
index 0000000..76d1c77
Binary files /dev/null and b/pagefind/wasm.unknown.pagefind differ
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..87404f3
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,3 @@
+# Allow crawling the public project website.
+User-agent: *
+Allow: /
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@asyncband.apache.org
For additional commands, e-mail: commits-help@asyncband.apache.org