@@ -35,8 +35,37 @@ import BaseLayout from '../layouts/BaseLayout.astro';
3535 `;
3636 };
3737
38+ const loadPagefindUI = () =>
39+ new Promise((resolve, reject) => {
40+ if (window.PagefindUI) {
41+ resolve(window.PagefindUI);
42+ return;
43+ }
44+
45+ const existing = document.querySelector('script[data-pagefind-ui]');
46+ if (existing) {
47+ existing.addEventListener('load', () => {
48+ if (window.PagefindUI) resolve(window.PagefindUI);
49+ else reject(new Error('Pagefind UI loaded without global constructor'));
50+ });
51+ existing.addEventListener('error', () => reject(new Error('Failed to load Pagefind UI')));
52+ return;
53+ }
54+
55+ const script = document.createElement('script');
56+ script.src = '/pagefind/pagefind-ui.js';
57+ script.async = true;
58+ script.dataset.pagefindUi = 'true';
59+ script.onload = () => {
60+ if (window.PagefindUI) resolve(window.PagefindUI);
61+ else reject(new Error('Pagefind UI loaded without global constructor'));
62+ };
63+ script.onerror = () => reject(new Error('Failed to load Pagefind UI'));
64+ document.head.appendChild(script);
65+ });
66+
3867 try {
39- const { PagefindUI } = await import('/pagefind/pagefind-ui.js' );
68+ const PagefindUI = await loadPagefindUI( );
4069 new PagefindUI({
4170 element: '#search-ui',
4271 showSubResults: true,
@@ -49,7 +78,8 @@ import BaseLayout from '../layouts/BaseLayout.astro';
4978 search_label: 'Search site',
5079 },
5180 });
52- } catch {
81+ } catch (error) {
82+ console.error(error);
5383 showFallback();
5484 }
5585</script >
0 commit comments