diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 258affdbf..af7135aae 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -36,6 +36,11 @@ export default defineConfig({
host: true
},
vite: {
+ server: {
+ watch: {
+ ignored: ['./public/pagefind/**/*.*'] // HERE
+ }
+ },
plugins: [
FullReload([
path.relative(__dirname, '../dist/custom-elements.json'),
diff --git a/docs/src/components/overrides/Head.astro b/docs/src/components/overrides/Head.astro
index 756537a3a..cab0e9aae 100644
--- a/docs/src/components/overrides/Head.astro
+++ b/docs/src/components/overrides/Head.astro
@@ -8,6 +8,7 @@ import Search from "../Search.astro"
import '../../styles/global.css'
import '../../styles/syntax-highlight.css'
import '../../styles/code-previews.css'
+import '../../styles/font-awesome.css'
import { customElementsManifest } from '../../js/cem';
const version = customElementsManifest().package.version
diff --git a/docs/src/components/overrides/Search.astro b/docs/src/components/overrides/Search.astro
index 0e3a157cb..073f68b59 100644
--- a/docs/src/components/overrides/Search.astro
+++ b/docs/src/components/overrides/Search.astro
@@ -52,12 +52,12 @@ const pagefindTranslations = {
+
diff --git a/docs/src/js/generate-search.js b/docs/src/js/generate-search.js
deleted file mode 100644
index e667a1813..000000000
--- a/docs/src/js/generate-search.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as pagefind from 'pagefind';
-import * as path from 'node:path';
-
-// clean up once complete
-import { getCollection } from 'astro:content';
-
-export async function generateSearch() {
- const { index } = await pagefind.createIndex({});
- if (!index) return;
-
- // Get all `src/content/docs/` entries
- let allContent = await getCollection('docs');
-
- allContent = allContent.filter(doc => {
- return doc.data.pagefind !== false;
- });
-
- await Promise.allSettled(
- allContent.map(async entry => {
- const { category, title, description } = entry.data;
- return await index?.addCustomRecord({
- content: entry.body,
- language: 'en',
- url: entry.slug,
- meta: {
- category: category || '',
- title,
- description: description || ''
- }
- });
- })
- );
-
- const { errors } = await index.writeFiles({
- outputPath: path.join(process.cwd(), 'public', 'pagefind')
- });
-}
diff --git a/docs/src/layouts/ComponentLayout.astro b/docs/src/layouts/ComponentLayout.astro
index fbe5af31d..f0b91d68c 100644
--- a/docs/src/layouts/ComponentLayout.astro
+++ b/docs/src/layouts/ComponentLayout.astro
@@ -94,7 +94,10 @@ const {
To import this component from the CDN
using a script tag:
- `)}>
+
@@ -102,23 +105,32 @@ const {
To import this component from the CDN
using a JavaScript import:
-
+
To import this component using a bundler:
-
+
To import this component as a React component:
-
+
diff --git a/docs/src/pages/pagefind-dev.json.ts b/docs/src/pages/pagefind-dev.json.ts
index 31593e9a9..dd73226c2 100644
--- a/docs/src/pages/pagefind-dev.json.ts
+++ b/docs/src/pages/pagefind-dev.json.ts
@@ -1,19 +1,51 @@
// import { APIContext } from "astro";
+import * as pagefind from 'pagefind';
+import * as path from 'node:path';
-import { generateSearch } from '../js/generate-search';
+// clean up once complete
+import { getCollection } from 'astro:content';
-if (process.env.DEV_SEARCH !== 'generated') {
- await generateSearch();
+export async function generateSearch() {
+ const { index } = await pagefind.createIndex({});
+ if (!index) return;
- process.env.DEV_SEARCH = 'generated';
+ let json: Array<{ url: string; content: string }> = [];
- // setTimeout(() => {
- // process.env.DEV_SEARCH = ""
- // }, 200)
+ // Get all `src/content/docs/` entries
+ let allContent = await getCollection('docs');
+
+ allContent = allContent.filter(doc => {
+ return doc.data.pagefind !== false;
+ });
+
+ await Promise.allSettled(
+ allContent.map(async entry => {
+ const { category, title, description } = entry.data;
+ const resp = await fetch('http://localhost:4000/' + entry.slug);
+ const html = await resp.text();
+
+ // json.push({
+ // content: html,
+ // url: entry.slug
+ // });
+ return await index?.addHTMLFile({
+ content: html,
+ url: entry.slug
+ });
+ })
+ );
+
+ const { errors } = await index.writeFiles({
+ outputPath: path.join(process.cwd(), 'public', 'pagefind')
+ });
+
+ return json;
}
export async function GET() {
- return new Response(null, {
+ await generateSearch();
+
+ return new Response(JSON.stringify({}), {
status: 200,
headers: {
'Content-Type': 'application/json'
diff --git a/docs/src/plugins/prism.ts b/docs/src/plugins/prism.ts
index 32b9c72b3..cb19e619e 100644
--- a/docs/src/plugins/prism.ts
+++ b/docs/src/plugins/prism.ts
@@ -66,10 +66,10 @@ function generateCodeBlock(node: Node) {
language = 'plaintext';
}
- node.value = html`${highlight(
- language,
- node.value
- )}${copyButton(`code-block-${count}`)}
`;
+ node.value = html`
+
${highlight(language, node.value)}
+ ${copyButton(`code-block-${count}`)}
+
`;
}
function generatePreviewCodeBlock(node: Node, reactCode: string) {
diff --git a/docs/src/styles/font-awesome.css b/docs/src/styles/font-awesome.css
new file mode 100644
index 000000000..f69face8b
--- /dev/null
+++ b/docs/src/styles/font-awesome.css
@@ -0,0 +1,285 @@
+:root {
+ --sl-font: 'cera-round-pro', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
+}
+
+div.ec-line {
+ /* Fixes extra spacing on code blocks */
+ margin-top: 0px !important;
+}
+
+/* Dark mode colors. */
+:root {
+ --sl-color-text: #ffffff;
+ --sl-color-accent-low: #1d242f;
+ --sl-color-accent: #506b92;
+ --sl-color-accent-high: #bfc9d8;
+ --sl-color-white: #ffffff;
+ --sl-color-gray-1: #e3efff;
+ --sl-color-gray-2: #b4c3d9;
+ --sl-color-gray-3: #708db5;
+ --sl-color-gray-4: #3e597e;
+ --sl-color-gray-5: #1f395b;
+ --sl-color-gray-6: #0e2748;
+ --sl-color-black: #0d1928;
+
+ --fa-dk-teal: #0ca678;
+ --fa-gravy: #c3c6d1;
+ --fa-md-gravy: rgb(97, 109, 138);
+ --fa-dk-red: #e03131;
+ --fa-dk-yellow: rgb(250, 176, 5);
+ --fa-yellow: #ffd43b;
+ --link-color: rgb(20, 110, 190);
+
+ --balloon-border-radius: 2px;
+ --balloon-color: rgb(24 49 83);
+ --balloon-font-size: 12px;
+ --balloon-move: 4px;
+ --balloon-text-color: #fff;
+}
+
+/* Light mode colors. */
+:root[data-theme='light'] {
+ --sl-color-text: rgb(24, 49, 83);
+
+ --sl-color-accent-low: #d0d7e3;
+ --sl-color-accent: #526d94;
+ --sl-color-accent-high: #273344;
+ --sl-color-white: #0d1928;
+ --sl-color-gray-1: #0e2748;
+ --sl-color-gray-2: #1f395b;
+ --sl-color-gray-3: #3e597e;
+ --sl-color-gray-4: #708db5;
+ --sl-color-gray-5: #b4c3d9;
+ --sl-color-gray-6: #e3efff;
+ --sl-color-gray-7: #f1f7ff;
+ --sl-color-black: #ffffff;
+
+ --fa-dk-teal: #0ca678;
+ --fa-gravy: #c3c6d1;
+ --fa-md-gravy: rgb(97, 109, 138);
+ --fa-dk-red: #e03131;
+ --fa-dk-yellow: rgb(250, 176, 5);
+ --fa-yellow: #ffd43b;
+ --link-color: rgb(20, 110, 190);
+
+ --balloon-border-radius: 2px;
+ --balloon-color: rgb(24 49 83);
+ --balloon-font-size: 12px;
+ --balloon-move: 4px;
+ --balloon-text-color: #fff;
+}
+
+.icon-padding {
+ padding: 0 8px 0 8px;
+}
+
+.remove-margins {
+ margin: 0px !important;
+}
+
+.action-button {
+ border-radius: 999rem;
+ text-decoration: none;
+ padding: 1rem 1.25rem;
+ background: var(--sl-color-text-accent);
+ color: var(--sl-color-black) !important;
+}
+
+.action-button > i {
+ vertical-align: middle;
+}
+
+/* table, */
+/* tr, */
+/* td, */
+/* th { */
+/* border: none !important; */
+/* } */
+/**/
+/* table thead { */
+/* text-align: left; */
+/* font-weight: bold; */
+/* color: rgb(24, 49, 83); */
+/* border-bottom: 2px solid rgb(195, 198, 209); */
+/* } */
+/**/
+/* table tr { */
+/* vertical-align: top; */
+/* } */
+/**/
+/* td { */
+/* border-bottom: 1px solid rgb(224, 226, 232); */
+/* } */
+/**/
+/* table tr:nth-child(odd) td { */
+/* background: #fff; */
+/* border-bottom: 1px solid rgb(224, 226, 232) !important; */
+/* } */
+/**/
+/* table tr:nth-child(even) td { */
+/* background: #fff; */
+/* border-bottom: 1px solid rgb(224, 226, 232) !important; */
+/* } */
+
+.frame.is-terminal pre {
+ margin: 0px !important;
+ /* margin-top: 1px !important; */
+ background: rgb(24 49 83) !important;
+}
+
+.frame.has-title pre {
+ margin: 0px !important;
+}
+
+figcaption.header {
+ background: rgb(0, 28, 64) !important;
+}
+
+img {
+ border-bottom-left-radius: 16px;
+ border-bottom-right-radius: 16px;
+ border-top-left-radius: 16px;
+ border-top-right-radius: 16px;
+}
+
+.site-title > img {
+ border-radius: 0px;
+ color: rgb(20, 110, 190);
+}
+
+.starlight-aside {
+ border-bottom-left-radius: 16px;
+ border-bottom-right-radius: 16px;
+ border-top-left-radius: 16px;
+ border-top-right-radius: 16px;
+}
+
+.starlight-aside__content > ul {
+ list-style-type: none;
+}
+
+.starlight-aside__content > ul > li:before {
+ display: inline-block;
+ font-style: normal;
+ font-feature-settings: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-family: 'Font Awesome 6 Pro', 'Font Awesome 5 Pro';
+ font-weight: 900;
+ content: '\f058';
+ margin-right: calc(1em * 1);
+ margin-right: 16px;
+ margin-left: -2em;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.display-block {
+ display: block;
+}
+
+.muted {
+ color: rgb(97, 109, 138);
+}
+
+img + em {
+ display: block;
+ color: rgb(97, 109, 138);
+ text-align: center;
+ font-size: 0.8em;
+}
+
+p > em {
+ color: rgb(97, 109, 138);
+ text-align: center;
+ font-size: 0.8em;
+}
+
+h1 h2 h3 {
+ font-weight: 600 !important;
+}
+
+.theme-ravenclaw {
+ --fa-secondary-opacity: 1;
+ --fa-primary-color: rgb(4, 56, 161);
+ --fa-secondary-color: rgb(108, 108, 108);
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+@media (min-width: 50em) {
+ :root {
+ --sl-text-h1: var(--sl-text-4xl);
+ --sl-text-h2: var(--sl-text-3xl);
+ --sl-text-h3: var(--sl-text-2xl);
+ --sl-text-h4: var(--sl-text-1xl);
+ }
+}
+
+img {
+ /* border: 2px solid rgb(24, 49, 83); */
+}
+
+.card {
+ border-bottom-left-radius: 16px;
+ border-bottom-right-radius: 16px;
+ border-top-left-radius: 16px;
+ border-top-right-radius: 16px;
+ padding: 0px 20px 10px 20px !important;
+ border: 2px solid rgb(24, 49, 83) !important;
+ margin-top: 0px !important;
+}
+
+.hero > img {
+ border: 0px;
+}
+
+a.site-title > img {
+ border: 0px;
+}
+
+.grid-container {
+ display: grid;
+ grid-template-columns: auto auto auto;
+ padding: 10px;
+}
+
+.grid-button {
+ padding: 10px 32px 10px 32px;
+ margin: 10px;
+ vertical-align: top;
+}
+
+.return-button {
+ border-radius: 999rem;
+ text-decoration: none;
+ padding: 0.5rem 1rem;
+ background: var(--sl-color-text-accent);
+ color: white !important;
+}
+
+.right-sidebar-panel h2 a {
+ display: inline-block;
+}
+
+.right-sidebar-container ul {
+ margin: 0;
+}
diff --git a/docs/src/styles/global.css b/docs/src/styles/global.css
index 2860f0ae2..dab0610ff 100644
--- a/docs/src/styles/global.css
+++ b/docs/src/styles/global.css
@@ -282,12 +282,12 @@ pre .token.italic {
background-color: color-mix(in oklab, var(--wa-color-neutral-fill-subtle), var(--wa-color-mix-active));
}
-:is(.code-preview__source, pre) .copy-code-button {
+:is(.code-preview__source, pre, .code-preview) > .copy-code-button {
opacity: 0;
scale: 0.75;
}
-:is(.code-preview__source, pre):hover .copy-code-button,
+:is(.code-preview__source, pre, .code-preview):hover > .copy-code-button,
.copy-code-button:focus-within {
opacity: 1;
scale: 1;