aboutsummaryrefslogtreecommitdiff
path: root/website/src/components/Search.astro
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-14 02:41:24 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-14 02:44:46 +0300
commitca7ae086e8d6e80f6efc969d541b390328a6d143 (patch)
tree85605d0551af1dd2a25dce633fd83a06281598d7 /website/src/components/Search.astro
parent2e5da968ea3fb7105c56f7674caf822de41ec176 (diff)
fix(website): scope docs search by locale and channel
Diffstat (limited to 'website/src/components/Search.astro')
-rw-r--r--website/src/components/Search.astro52
1 files changed, 52 insertions, 0 deletions
diff --git a/website/src/components/Search.astro b/website/src/components/Search.astro
new file mode 100644
index 00000000..2a31ea24
--- /dev/null
+++ b/website/src/components/Search.astro
@@ -0,0 +1,52 @@
+---
+import StarlightSearch from '@astrojs/starlight/components/Search.astro';
+import { docsChannel } from '../docs-path';
+
+const channel = docsChannel(Astro.url.pathname);
+---
+
+<channel-search data-channel={channel}>
+ <StarlightSearch />
+</channel-search>
+
+<script>
+ class ChannelSearch extends HTMLElement {
+ observer?: MutationObserver;
+
+ connectedCallback() {
+ const channel = this.dataset.channel;
+ if (!channel) return;
+
+ const selectChannel = () => {
+ const checkbox = this.querySelector<HTMLInputElement>(
+ `.pagefind-ui__filter-checkbox[name="channel"][value="${channel}"]`,
+ );
+ if (!checkbox) return false;
+ if (!checkbox.checked) checkbox.click();
+ this.observer?.disconnect();
+ return true;
+ };
+
+ if (selectChannel()) return;
+ // Starlight does not expose its PagefindUI instance, so wait for Pagefind's filter control.
+ this.observer = new MutationObserver(selectChannel);
+ this.observer.observe(this, { childList: true, subtree: true });
+ }
+
+ disconnectedCallback() {
+ this.observer?.disconnect();
+ }
+ }
+
+ customElements.define('channel-search', ChannelSearch);
+</script>
+
+<style>
+ channel-search {
+ display: contents;
+ }
+
+ channel-search :global(.pagefind-ui__filter-panel) {
+ display: none;
+ }
+</style>