export {}; const prosefly = window.__prosefly ??= {}; const proseflyLotus = (prosefly.lotus ??= {}); const defaultCssUrl = 'https://cdn.jsdelivr.net/npm/@docsearch/css@4'; const defaultJsUrl = 'https://cdn.jsdelivr.net/npm/@docsearch/js@4'; function getOptionalBoolean(element: HTMLElement, name: string): boolean | undefined { const value = element.dataset[name]; if (value === undefined) { return undefined; } return value === 'true'; } function getOptionalNumber(element: HTMLElement, name: string): number | undefined { const value = element.dataset[name]; if (!value) { return undefined; } const number = Number(value); return Number.isFinite(number) ? number : undefined; } function getSearchParameters(element: HTMLElement): Record | undefined { const value = element.dataset.docsearchSearchParameters; if (!value) { return undefined; } try { const parsed = JSON.parse(value); return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed as Record : undefined; } catch { return undefined; } } function loadStylesheet(href: string): Promise { const existing = document.querySelector(`link[data-docsearch-css="${href}"]`); if (existing) { return Promise.resolve(); } return new Promise((resolve, reject) => { const link = document.createElement('link'); link.dataset.docsearchCss = href; link.href = href; link.rel = 'stylesheet'; link.addEventListener('load', () => resolve(), { once: true }); link.addEventListener('error', () => reject(new Error(`Unable to load DocSearch CSS: ${href}`)), { once: true }); document.head.append(link); }); } function loadScript(src: string): Promise { if (window.docsearch) { return Promise.resolve(); } const existing = document.querySelector(`script[data-docsearch-js="${src}"]`); if (existing) { return new Promise((resolve, reject) => { existing.addEventListener('load', () => resolve(), { once: true }); existing.addEventListener('error', () => reject(new Error(`Unable to load DocSearch JS: ${src}`)), { once: true }); }); } return new Promise((resolve, reject) => { const script = document.createElement('script'); script.async = true; script.dataset.docsearchJs = src; script.src = src; script.addEventListener('load', () => resolve(), { once: true }); script.addEventListener('error', () => reject(new Error(`Unable to load DocSearch JS: ${src}`)), { once: true }); document.head.append(script); }); } function injectThemeStyles(): void { if (document.querySelector('[data-docsearch-theme]')) { return; } const style = document.createElement('style'); style.dataset.docsearchTheme = ''; style.textContent = ` :root { --docsearch-primary-color: var(--lotus-accent); --docsearch-text-color: var(--lotus-text); --docsearch-muted-color: var(--lotus-text-muted); --docsearch-container-background: rgb(0 0 0 / 35%); --docsearch-modal-background: var(--lotus-background); --docsearch-searchbox-background: var(--lotus-surface); --docsearch-searchbox-focus-background: var(--lotus-background); --docsearch-hit-color: var(--lotus-text); --docsearch-hit-active-color: var(--lotus-accent-contrast); --docsearch-hit-background: var(--lotus-surface); --docsearch-footer-background: var(--lotus-background); --docsearch-key-gradient: none; --docsearch-key-shadow: none; --docsearch-modal-shadow: 0 24px 80px rgb(0 0 0 / 18%); --docsearch-modal-width: min(42rem, calc(100vw - 2rem)); --docsearch-modal-height: min(38rem, calc(100dvh - 4rem)); } .DocSearch-Button { display: none; } .DocSearch-Modal { border: 1px solid var(--lotus-border-muted); border-radius: min(var(--lotus-radius-lg), 1rem); } .DocSearch-SearchBar, .DocSearch-Footer { border-color: var(--lotus-border-subtle); } .DocSearch-Hit a { border-radius: min(var(--lotus-radius-md), 0.75rem); } `; document.head.append(style); } async function initDocSearch(): Promise { const container = document.querySelector('[data-docsearch]'); const triggers = Array.from(document.querySelectorAll('[data-search-trigger]')); if (!container || !triggers.length) { return; } const appId = container.dataset.docsearchAppId; const apiKey = container.dataset.docsearchApiKey; const indexName = container.dataset.docsearchIndexName; if (!appId || !apiKey || !indexName) { return; } await loadStylesheet(container.dataset.docsearchCssUrl || defaultCssUrl); injectThemeStyles(); await loadScript(container.dataset.docsearchJsUrl || defaultJsUrl); if (!window.docsearch) { return; } const instance = window.docsearch({ container, appId, apiKey, indexName, askAi: container.dataset.docsearchAskAi || undefined, disableUserPersonalization: getOptionalBoolean(container, 'docsearchDisableUserPersonalization'), insights: getOptionalBoolean(container, 'docsearchInsights'), keyboardShortcuts: { 'Ctrl/Cmd+K': true, '/': false, }, maxResultsPerGroup: getOptionalNumber(container, 'docsearchMaxResultsPerGroup'), placeholder: container.dataset.docsearchPlaceholder, searchParameters: getSearchParameters(container), }); triggers.forEach((trigger) => { trigger.addEventListener('click', () => { instance.open(); }); }); } if (!proseflyLotus.docSearchReady) { proseflyLotus.docSearchReady = true; proseflyLotus.initDocSearch = initDocSearch; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { void proseflyLotus.initDocSearch?.(); }, { once: true }); } else { void proseflyLotus.initDocSearch?.(); } }