diff --git a/astro.config.mjs b/astro.config.mjs index c4386b93..908fb3db 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,9 +2,11 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; +import tailwindcss from '@tailwindcss/vite'; import starlightLinksValidator from 'starlight-links-validator'; import starlightAutoSidebar from 'starlight-auto-sidebar'; import starlightImageZoom from 'starlight-image-zoom'; +import starlightThemeNova from 'starlight-theme-nova'; import opengraphImages from 'astro-opengraph-images'; import { renderer } from './src/og/renderer.tsx'; import { readFileSync } from 'node:fs'; @@ -15,8 +17,12 @@ const site = 'https://docs.shorebird.dev/'; // https://astro.build/config export default defineConfig({ site, + vite: { + plugins: [tailwindcss()], + }, integrations: [ starlight({ + expressiveCode: false, title: 'Shorebird', tagline: 'Flutter Code Push', logo: { @@ -38,9 +44,23 @@ export default defineConfig({ ], editLink: { baseUrl: 'https://github.com/shorebirdtech/docs/edit/main/' }, favicon: 'favicon.svg', - components: { Head: './src/components/starlight/Head.astro' }, - customCss: ['./src/tailwind.css'], - expressiveCode: { themes: ['dark-plus', 'github-light'] }, + head: [ + { + tag: 'link', + attrs: { + rel: 'preload', + href: '/fonts/GeneralSans-Variable.woff2', + as: 'font', + type: 'font/woff2', + crossorigin: '', + }, + }, + ], + components: { + Head: './src/components/starlight/Head.astro', + ThemeSelect: './src/components/ThemeSelect.astro', + }, + customCss: ['./src/styles/custom.css'], sidebar: [ { label: 'Welcome', link: '/' }, { @@ -78,6 +98,7 @@ export default defineConfig({ }, ], plugins: [ + starlightThemeNova(), starlightAutoSidebar(), starlightImageZoom(), starlightLinksValidator({ diff --git a/package-lock.json b/package-lock.json index 8c372dc7..239f80d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,14 +10,15 @@ "dependencies": { "@astrojs/check": "^0.9.6", "@astrojs/starlight": "^0.37.6", - "@astrojs/starlight-tailwind": "^4.0.2", "@lavamoat/preinstall-always-fail": "^2.1.1", + "@tailwindcss/vite": "^4.1.18", "astro": "^5.17.3", "astro-opengraph-images": "^1.14.3", "sharp": "^0.34.5", "starlight-auto-sidebar": "^0.1.4", "starlight-image-zoom": "^0.13.2", "starlight-llms-txt": "^0.7.0", + "starlight-theme-nova": "^0.11.5", "tailwindcss": "^4.2.0", "typescript": "^5.9.3" }, @@ -50,6 +51,203 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@aria-ui/core": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@aria-ui/core/-/core-0.0.22.tgz", + "integrity": "sha512-N/UC2JJ8fA46WAc5TBNM9NZMcmQ3ghqDt1DNa7XdXHqHhDYkZ7Mn0Yn6KEciiIvlP+yuxLrPO/Q1oB4CNV21kg==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-attributes": "^1.0.2", + "@ariatype/aria-roles": "^1.0.2", + "@preact/signals-core": "^1.11.0", + "@zag-js/dom-query": "^1.21.6", + "just-kebab-case": "^4.2.0", + "just-map-values": "^3.2.0", + "server-dom-shim": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/@aria-ui/overlay": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.25.tgz", + "integrity": "sha512-YpOFpB1KNQaGLgRsnN5BcY64A+akHOqlLhH/ft7YU/l7E/9Sm0yscriiBvEi+vVwqYUOveNuh5vDVVmWeRjLpQ==", + "license": "MIT", + "dependencies": { + "@aria-ui/core": "^0.0.22", + "@floating-ui/dom": "^1.7.3", + "@floating-ui/utils": "^0.2.10", + "@zag-js/dom-query": "^1.21.6" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/@aria-ui/presence": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.20.tgz", + "integrity": "sha512-K/n60HLCGG0XX+sAEJ7aOScevXrfDet7+gxt+QXlELxxjrlpP0sZq/iS6KCdr6n7piaW6zfY7EtKxOriWUv8tw==", + "license": "MIT", + "dependencies": { + "@aria-ui/core": "^0.0.22", + "@zag-js/dom-query": "^1.21.6" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/@aria-ui/tooltip": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.30.tgz", + "integrity": "sha512-XYctHrJOSRNW2iQc1IHkozlK2H6edX+uD/p1Oo5yHNMA28mFrxKUOJEiA297jAvlLwASKTaAT+40cOTZ2bTyTQ==", + "license": "MIT", + "dependencies": { + "@aria-ui/core": "^0.0.22", + "@aria-ui/overlay": "^0.0.25", + "@aria-ui/presence": "^0.0.20", + "nanoid": "^5.1.5" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/@aria-ui/tooltip/node_modules/nanoid": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@ariatype/aria-attributes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes/-/aria-attributes-1.0.2.tgz", + "integrity": "sha512-fI6gnJwPaspKbpDruU21P/2RE5AGj7ZUtMXXfsTAHV+IFodd16HCBvifF8yQpFCU8bDvJjhaDaUoBt+89okE0w==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-attributes-drag-and-drop": "1.0.2", + "@ariatype/aria-attributes-global": "1.0.2", + "@ariatype/aria-attributes-live-region": "1.0.2", + "@ariatype/aria-attributes-relationship": "1.0.2", + "@ariatype/aria-attributes-widget": "1.0.2" + } + }, + "node_modules/@ariatype/aria-attributes-drag-and-drop": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes-drag-and-drop/-/aria-attributes-drag-and-drop-1.0.2.tgz", + "integrity": "sha512-JbbKaKkYMN/zc//irXYb6QFIMm+A4tpwgs6x4BrNtqU/Jeq2vk4i3LhnHBB1SaMfihGtcH8/Sj++o4jaIBXyCw==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-attributes-global": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes-global/-/aria-attributes-global-1.0.2.tgz", + "integrity": "sha512-7SFhMMqiO8bd1/bePd+QTxJTkRKQpl1nsgFSpfeXFV3bypl93JYTkQyspbmkmSSqV6yQDwgfOA4XPapWDKiU9Q==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-attributes-live-region": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes-live-region/-/aria-attributes-live-region-1.0.2.tgz", + "integrity": "sha512-WXlPVXAtaOShNnthxYAeA0L1OdJyMORyg+fOVdgQPw5hVI0zkF4tq/TA/k39QZOc82Ox5hDJBZqSTmg0pfk45g==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-attributes-relationship": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes-relationship/-/aria-attributes-relationship-1.0.2.tgz", + "integrity": "sha512-pMhhosfqc42Pp0mQ5zMoyLNnrLTqB3dHrxD2hPyd4ahLjn7uty2SBvfjpEMRUmVpYzVskk3TkOogceQdGE1dCQ==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-attributes-widget": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes-widget/-/aria-attributes-widget-1.0.2.tgz", + "integrity": "sha512-jhTD9Hsjj3s/UpCX1/0JeEVyH/MlSspwxMkdrUjjYN2fOZuScSlv2uhxQs7L7CAYprcESu7ze9PCILOwaIcuWw==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-roles": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles/-/aria-roles-1.0.2.tgz", + "integrity": "sha512-ZhQTwM1Q5TdoJlFIdaveZMjE0sMGZ4qTpZLbn1b9HqXoixHLzbWWZlmeAPXpSrYjQsCsJlnuIlL9LeYCLT61ag==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-composite": "1.0.2", + "@ariatype/aria-roles-document-structure": "1.0.2", + "@ariatype/aria-roles-generic": "1.0.2", + "@ariatype/aria-roles-landmark": "1.0.2", + "@ariatype/aria-roles-live-region": "1.0.2", + "@ariatype/aria-roles-widget": "1.0.2", + "@ariatype/aria-roles-window": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-composite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-composite/-/aria-roles-composite-1.0.2.tgz", + "integrity": "sha512-PchMV4wxWsFeR2b774ZYXgUdBCDwpVUOGrhxgVG2NLK4y6BNbL4NvGgujvxEa3US5QHaeDk9nXF1t2HGprXtbg==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-document-structure": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-document-structure/-/aria-roles-document-structure-1.0.2.tgz", + "integrity": "sha512-luBB23nVL8jdfLZZBjZ7SaNTs7cgiEMqsfPdJGgvXFUjWPYC46pDwkz7GoFgkgCTUB4/PuDh/DzYw3ySUHYNWQ==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-generic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-generic/-/aria-roles-generic-1.0.2.tgz", + "integrity": "sha512-dYmVwqWZ4vKR8dygp60JHbVbjorEOSK72Tktpfw7q35bcH455Fj81GtMtw4Mq/71RWsTaR7coQRwBbqwsGCOpw==", + "license": "MIT" + }, + "node_modules/@ariatype/aria-roles-landmark": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-landmark/-/aria-roles-landmark-1.0.2.tgz", + "integrity": "sha512-f8SoNedYsZp2R9+huGFkkAbb2AgI7ofMSnPdjRpcNrM2hkqqrIVzpbDazkV0YtoEpbgHdmRnFE3xxWknKRIOoQ==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-live-region": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-live-region/-/aria-roles-live-region-1.0.2.tgz", + "integrity": "sha512-k/HxYoquWwyHS11lm4+M1UHgH0UFEvtxU/DQZGaUOIFG7gjDDX1e+M9hsgGgEHMEsD1ev75PLdNRTAmZwbH+kA==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-widget": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-widget/-/aria-roles-widget-1.0.2.tgz", + "integrity": "sha512-uGEIXgu0dnDtBahcBHoo8mT+OZOXj3sZhPH067p+D+WViumb0yLbPtdqnVaLVeCDeuyLopWMp7OW6SD6h+5IDw==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, + "node_modules/@ariatype/aria-roles-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ariatype/aria-roles-window/-/aria-roles-window-1.0.2.tgz", + "integrity": "sha512-zd1f5nzc+3FfrpjSz8HfbOyiVxlRfi2Xrs8Rk5JHIw9kkZIa5Mf2M55bBlTZVNLCO8l5oUrIPxhi0seR3kN9bA==", + "license": "MIT", + "dependencies": { + "@ariatype/aria-roles-generic": "1.0.2" + } + }, "node_modules/@asamuzakjp/css-color": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.0.tgz", @@ -274,16 +472,6 @@ "astro": "^5.5.0" } }, - "node_modules/@astrojs/starlight-tailwind": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/starlight-tailwind/-/starlight-tailwind-4.0.2.tgz", - "integrity": "sha512-SYN/6zq6hJO5tWqbQ2tWT9/jd8ubUkzkBCcF94vByC/ZJ20Mi5GPjFvAh89Yky/aIM+jXxT6W5q4p6l58GKHiQ==", - "license": "MIT", - "peerDependencies": { - "@astrojs/starlight": ">=0.34.0", - "tailwindcss": "^4.0.0" - } - }, "node_modules/@astrojs/telemetry": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", @@ -1071,6 +1259,31 @@ "@expressive-code/core": "^0.41.1" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz", + "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz", + "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.4", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, "node_modules/@img/colour": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", @@ -1554,18 +1767,26 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", - "peer": true, "engines": { "node": ">=6.0.0" } @@ -1581,7 +1802,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1634,6 +1854,12 @@ "node": "^16.20.0 || ^18.0.0 || ^20.0.0 || ^22.0.0 || ^24.0.0" } }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", + "license": "BSD-3-Clause" + }, "node_modules/@mdx-js/mdx": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", @@ -1852,9 +2078,9 @@ ] }, "node_modules/@pagefind/default-ui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.3.0.tgz", - "integrity": "sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", "license": "MIT" }, "node_modules/@pagefind/linux-arm64": { @@ -1896,6 +2122,16 @@ "win32" ] }, + "node_modules/@preact/signals-core": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.13.0.tgz", + "integrity": "sha512-slT6XeTCAbdql61GVLlGU4x7XHI7kCZV5Um5uhE4zLX4ApgiiXc0UYFvVOKq06xcovzp7p+61l68oPi563ARKg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/@resvg/resvg-js": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", @@ -2475,6 +2711,74 @@ "@shikijs/types": "3.21.0" } }, + "node_modules/@shikijs/transformers": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.22.0.tgz", + "integrity": "sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.22.0", + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", + "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/twoslash": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.22.0.tgz", + "integrity": "sha512-GO27UPN+kegOMQvC+4XcLt0Mttyg+n16XKjmoKjdaNZoW+sOJV7FLdv2QKauqUDws6nE3EQPD+TFHEdyyoUBDw==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.22.0", + "@shikijs/types": "3.22.0", + "twoslash": "^0.3.6" + }, + "peerDependencies": { + "typescript": ">=5.5.0" + } + }, + "node_modules/@shikijs/twoslash/node_modules/@shikijs/core": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", + "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/twoslash/node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/@shikijs/types": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", @@ -2507,6 +2811,272 @@ "node": ">= 8.0.0" } }, + "node_modules/@tailwindcss/node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", + "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.31.1", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.1" + } + }, + "node_modules/@tailwindcss/node/node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", + "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.1", + "@tailwindcss/oxide-darwin-arm64": "4.2.1", + "@tailwindcss/oxide-darwin-x64": "4.2.1", + "@tailwindcss/oxide-freebsd-x64": "4.2.1", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", + "@tailwindcss/oxide-linux-x64-musl": "4.2.1", + "@tailwindcss/oxide-wasm32-wasi": "4.2.1", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", + "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", + "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", + "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", + "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", + "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", + "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", + "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", + "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", + "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", + "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", + "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", + "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.1", + "@tailwindcss/oxide": "4.2.1", + "tailwindcss": "4.2.1" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, "node_modules/@types/braces": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz", @@ -2632,6 +3202,18 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "license": "MIT" }, + "node_modules/@typescript/vfs": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.4.tgz", + "integrity": "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3" + }, + "peerDependencies": { + "typescript": "*" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -2728,6 +3310,24 @@ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", "license": "MIT" }, + "node_modules/@zag-js/dom-query": { + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.34.1.tgz", + "integrity": "sha512-7GaxMaShtWsGgsz9jPfi+aJSQrx7aVFnCi5edGet76Tcytv0MRTqFKUcpSCWu3W3znBt8tQO07Mu1SBSNQk07Q==", + "license": "MIT", + "dependencies": { + "@zag-js/types": "1.34.1" + } + }, + "node_modules/@zag-js/types": { + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.34.1.tgz", + "integrity": "sha512-DAg2cD5g0PvYGIC08GWa71aSyO2IEGlQCIIdOtmUSN2PdLyRi3IllNHlnDYFCkTGbb0GUunCro8FLvE9Aj2BOA==", + "license": "MIT", + "dependencies": { + "csstype": "3.2.3" + } + }, "node_modules/abbrev": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", @@ -3064,6 +3664,15 @@ "tw-to-css": "^0.0.12" } }, + "node_modules/astro-theme-toggle": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/astro-theme-toggle/-/astro-theme-toggle-0.8.0.tgz", + "integrity": "sha512-7ngEKDfCLKoVbxX4yxrggtBr8i6W8eT0un0TpNKHUeOG/Pq2g7BrjH+etP/l/XQYYSWQmeOIAI02LvLXDMvOWw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, "node_modules/astro/node_modules/@esbuild/aix-ppc64": { "version": "0.27.3", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", @@ -4214,7 +4823,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, "license": "MIT" }, "node_modules/data-urls": { @@ -4468,6 +5076,19 @@ "iconv-lite": "^0.6.2" } }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -4933,7 +5554,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/h3": { @@ -5897,6 +6517,18 @@ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", "license": "MIT" }, + "node_modules/just-kebab-case": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/just-kebab-case/-/just-kebab-case-4.2.0.tgz", + "integrity": "sha512-p2BdO7o4BI+pMun3J+dhaOfYan5JsZrw9wjshRjkWY9+p+u+kKSMhNWYnot2yHDR9CSahZ9iT3dcqJ+V72qHMw==", + "license": "MIT" + }, + "node_modules/just-map-values": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/just-map-values/-/just-map-values-3.2.0.tgz", + "integrity": "sha512-TyqCKtK3NxiUgOjRYMIKURvBTHesi3XzomDY0QVPZ3rYzLCF+nNq5rSi0B/L5aOd/WMTZo6ukzA4wih4HUbrDg==", + "license": "MIT" + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -5915,6 +6547,255 @@ "node": ">= 8" } }, + "node_modules/lightningcss": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", + "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.31.1", + "lightningcss-darwin-arm64": "1.31.1", + "lightningcss-darwin-x64": "1.31.1", + "lightningcss-freebsd-x64": "1.31.1", + "lightningcss-linux-arm-gnueabihf": "1.31.1", + "lightningcss-linux-arm64-gnu": "1.31.1", + "lightningcss-linux-arm64-musl": "1.31.1", + "lightningcss-linux-x64-gnu": "1.31.1", + "lightningcss-linux-x64-musl": "1.31.1", + "lightningcss-win32-arm64-msvc": "1.31.1", + "lightningcss-win32-x64-msvc": "1.31.1" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", + "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", + "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", + "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", + "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", + "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", + "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", + "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", + "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", + "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", + "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", + "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -8464,6 +9345,22 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-custom-header-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-custom-header-id/-/remark-custom-header-id-1.0.0.tgz", + "integrity": "sha512-xs1MAgCg1HoiIfqSVV5BPydB4/sc1tT8OHDoqt8Lnf1JHPMUDVumY2Szm/P9MIxIzOT9+tu4IYJTql0vCzldoA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.2", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/remark-directive": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", @@ -8842,6 +9739,18 @@ "node": ">=10" } }, + "node_modules/server-dom-shim": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/server-dom-shim/-/server-dom-shim-1.1.0.tgz", + "integrity": "sha512-oyKhBZtkr/SGB9YE2r0VtQxQCxaVx/Ix1fMz0XMd6K4T1/TMfDs9K2GR9QjpUtD+siyeLXr+3CzzGSvhTI1sEw==", + "license": "MIT", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -8902,6 +9811,22 @@ "@types/hast": "^3.0.4" } }, + "node_modules/shiki-twoslash-renderer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/shiki-twoslash-renderer/-/shiki-twoslash-renderer-0.1.0.tgz", + "integrity": "sha512-8ho1tRDDqTFg5RRJIKGihLSv0Z4zRQG/uWWa+HbxobbT479vZ1ZrNsMRj2CvnQGbHgKr+9cj6sSRChoCeXtEaA==", + "license": "MIT", + "dependencies": { + "@aria-ui/core": "^0.0.22", + "@aria-ui/tooltip": "^0.0.30", + "@shikijs/twoslash": "^3.12.2", + "@shikijs/types": "^3.12.2", + "@types/hast": "^3.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -9176,6 +10101,36 @@ "astro": "^5.15.9" } }, + "node_modules/starlight-theme-nova": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/starlight-theme-nova/-/starlight-theme-nova-0.11.5.tgz", + "integrity": "sha512-lrrOIfYbZLqqvk8G9MaQFvfIu4jXGgdtSkQzAm4Zzrho662itelYoIJG9DOD3j/t2/7AIRiJDuXlq19Nv0dNLA==", + "license": "MIT", + "dependencies": { + "@aria-ui/core": "^0.0.22", + "@pagefind/default-ui": "^1.4.0", + "@shikijs/transformers": "^3.21.0", + "@shikijs/twoslash": "^3.21.0", + "@shikijs/types": "^3.21.0", + "@types/hast": "^3.0.4", + "astro-theme-toggle": "^0.8.0", + "hast-util-is-element": "^3.0.0", + "rehype": "^13.0.2", + "remark-custom-header-id": "^1.0.0", + "shiki-twoslash-renderer": "^0.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + }, + "peerDependencies": { + "@astrojs/starlight": "*" + }, + "peerDependenciesMeta": { + "@astrojs/starlight": { + "optional": true + } + } + }, "node_modules/stream-replace-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", @@ -9369,11 +10324,24 @@ "license": "MIT" }, "node_modules/tailwindcss": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.0.tgz", - "integrity": "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", + "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", "license": "MIT" }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/tar": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", @@ -9743,6 +10711,25 @@ "node": ">=10.13.0" } }, + "node_modules/twoslash": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.6.tgz", + "integrity": "sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==", + "license": "MIT", + "dependencies": { + "@typescript/vfs": "^1.6.2", + "twoslash-protocol": "0.3.6" + }, + "peerDependencies": { + "typescript": "^5.5.0" + } + }, + "node_modules/twoslash-protocol": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.6.tgz", + "integrity": "sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==", + "license": "MIT" + }, "node_modules/type-fest": { "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", diff --git a/package.json b/package.json index 685aeb2a..43d4dd92 100644 --- a/package.json +++ b/package.json @@ -14,14 +14,15 @@ "dependencies": { "@astrojs/check": "^0.9.6", "@astrojs/starlight": "^0.37.6", - "@astrojs/starlight-tailwind": "^4.0.2", "@lavamoat/preinstall-always-fail": "^2.1.1", + "@tailwindcss/vite": "^4.1.18", "astro": "^5.17.3", "astro-opengraph-images": "^1.14.3", "sharp": "^0.34.5", "starlight-auto-sidebar": "^0.1.4", "starlight-image-zoom": "^0.13.2", "starlight-llms-txt": "^0.7.0", + "starlight-theme-nova": "^0.11.5", "tailwindcss": "^4.2.0", "typescript": "^5.9.3" }, diff --git a/public/fonts/GeneralSans-Variable.woff2 b/public/fonts/GeneralSans-Variable.woff2 new file mode 100644 index 00000000..55e906ba Binary files /dev/null and b/public/fonts/GeneralSans-Variable.woff2 differ diff --git a/public/fonts/GeneralSans-VariableItalic.woff2 b/public/fonts/GeneralSans-VariableItalic.woff2 new file mode 100644 index 00000000..5c1e1caf Binary files /dev/null and b/public/fonts/GeneralSans-VariableItalic.woff2 differ diff --git a/src/components/RemoteCode.astro b/src/components/RemoteCode.astro index fba8a13c..7c5b2f78 100644 --- a/src/components/RemoteCode.astro +++ b/src/components/RemoteCode.astro @@ -1,5 +1,5 @@ --- -import { Code } from '@astrojs/starlight/components'; +import { Code } from 'starlight-theme-nova/components'; import { z } from 'astro/zod'; interface Props { @@ -15,7 +15,7 @@ const propsSchema = z.object({ const { url, title } = propsSchema.parse(Astro.props); const segments = url.split('.'); -const lang = segments[segments.length - 1]; +const lang = segments[segments.length - 1] as any; const response = await fetch(url); const code = await response.text(); --- diff --git a/src/components/ThemeSelect.astro b/src/components/ThemeSelect.astro new file mode 100644 index 00000000..fe01a654 --- /dev/null +++ b/src/components/ThemeSelect.astro @@ -0,0 +1,162 @@ +--- +import MoonIcon from './icons/tabler-moon-filled.svg' +import SunIcon from './icons/tabler-sun-high-filled.svg' +--- + +
+ +
+ +
+
+ +
+
+
+ + + + diff --git a/src/components/guides/development-workflow/CICheckSnippet.astro b/src/components/guides/development-workflow/CICheckSnippet.astro index 4594c388..8c7d7b77 100644 --- a/src/components/guides/development-workflow/CICheckSnippet.astro +++ b/src/components/guides/development-workflow/CICheckSnippet.astro @@ -1,5 +1,5 @@ --- -import { Code } from '@astrojs/starlight/components'; +import { Code } from 'starlight-theme-nova/components'; const code = ` name: ci diff --git a/src/components/icons/tabler-moon-filled.svg b/src/components/icons/tabler-moon-filled.svg new file mode 100644 index 00000000..e4ae8b43 --- /dev/null +++ b/src/components/icons/tabler-moon-filled.svg @@ -0,0 +1 @@ + diff --git a/src/components/icons/tabler-sun-high-filled.svg b/src/components/icons/tabler-sun-high-filled.svg new file mode 100644 index 00000000..aa847e0f --- /dev/null +++ b/src/components/icons/tabler-sun-high-filled.svg @@ -0,0 +1 @@ + diff --git a/src/content/docs/code-push/ci/generic.mdx b/src/content/docs/code-push/ci/generic.mdx index e59cc338..e2d45e36 100644 --- a/src/content/docs/code-push/ci/generic.mdx +++ b/src/content/docs/code-push/ci/generic.mdx @@ -9,6 +9,7 @@ sidebar: {/* cspell:words proto tlsv codemagic */} import Authentication from './_authentication.mdx'; +import { LinkCard } from 'starlight-theme-nova/components'; Building with Shorebird in CI should be a very small change from your existing Flutter CI builds. Changes required: @@ -18,13 +19,21 @@ Flutter CI builds. Changes required: 3. Replacing `flutter build --release` with `shorebird release` or `shorebird patch`. -We have detailed instructions for integrating into - -- [GitHub](/code-push/ci/github) -- [Codemagic](/code-push/ci/codemagic) - -However if you do not use these providers, we've also provided generic -instructions below: +We have detailed instructions for integrating into these providers: + + + + +If you do not use these providers, we've also provided generic instructions +below: ## Installing Shorebird diff --git a/src/content/docs/code-push/ci/github.mdx b/src/content/docs/code-push/ci/github.mdx index be885d53..cb947ca9 100644 --- a/src/content/docs/code-push/ci/github.mdx +++ b/src/content/docs/code-push/ci/github.mdx @@ -9,6 +9,7 @@ sidebar: {/* cspell:words shorebirdtech */} import Authentication from './_authentication.mdx'; +import { LinkCard } from 'starlight-theme-nova/components'; The [Setup Shorebird](https://github.com/shorebirdtech/setup-shorebird) GitHub Action allows you to integrate Shorebird into your existing GitHub Workflows. @@ -209,5 +210,11 @@ tip The `shorebird-patch` action also outputs the patch number: ::: -For an example of a fully automated development workflow, see our -[Development Workflow Guide](/code-push/guides/development-workflow). +For an example of a fully automated development workflow, see our Development +Workflow Guide. + + diff --git a/src/content/docs/code-push/guides/security-tools.mdx b/src/content/docs/code-push/guides/security-tools.mdx index 97914daf..d145e55a 100644 --- a/src/content/docs/code-push/guides/security-tools.mdx +++ b/src/content/docs/code-push/guides/security-tools.mdx @@ -6,15 +6,23 @@ sidebar: order: 40 --- +import { LinkCard } from 'starlight-theme-nova/components'; + This article is about how Shorebird interacts with obfuscation and security tooling. For other Security-related topics: -- _Company Security_ see our Handbook for - [Security and Compliance](https://handbook.shorebird.dev/compliance/). -- [_Patch Signing_](/code-push/guides/patch-signing) -- to cryptographically - guarantee only you can change your app. + + ## Obfuscation diff --git a/src/content/docs/code-push/guides/staging-patches.mdx b/src/content/docs/code-push/guides/staging-patches.mdx index a433f92b..5ad95296 100644 --- a/src/content/docs/code-push/guides/staging-patches.mdx +++ b/src/content/docs/code-push/guides/staging-patches.mdx @@ -5,6 +5,7 @@ sidebar: order: 17 --- +import { CodeTabs } from 'starlight-theme-nova/components'; import { Image } from 'astro:assets'; import goLive from '~/assets/staging_patches_change_track_dropdown.png'; import switchTrack from '~/assets/staging_patches_patch_context_menu.png'; @@ -53,17 +54,21 @@ Now that we've created our apps on shorebird, we need to create releases (one for each platform). To create a release, we'll use the `shorebird release` command. -```sh -# Create a release for Android + +```bash title="Android" shorebird release android +``` -# Create a release for iOS +```bash title="iOS" shorebird release ios +``` -# Create a release for macOS +```bash title="macOS" shorebird release macos ``` + + We can verify the releases were created successfully by visiting [Shorebird console](https://console.shorebird.dev). @@ -105,17 +110,21 @@ class MainApp extends StatelessWidget { Now that we've applied the changes, let's create a patch: -```sh -# Stage a patch on Android + +```bash title="Android" shorebird patch android --track=staging +``` -# Stage a patch on iOS +```bash title="iOS" shorebird patch ios --track=staging +``` -# Stage a patch on macOS +```bash title="macOS" shorebird patch macos --track=staging ``` + + ## Preview the release Next, preview the app release locally on a device or emulator, use diff --git a/src/content/docs/code-push/guides/testing-patches.mdx b/src/content/docs/code-push/guides/testing-patches.mdx index 05e7ec69..c2773958 100644 --- a/src/content/docs/code-push/guides/testing-patches.mdx +++ b/src/content/docs/code-push/guides/testing-patches.mdx @@ -5,6 +5,8 @@ sidebar: order: 18 --- +import { LinkCard } from 'starlight-theme-nova/components'; + We recommend that you test your patches with a subset of users before distributing to all users. @@ -20,9 +22,14 @@ As part of our privacy stance, we _never_ know anything about your users, so we have no way to tell users apart or to specify which users should receive a patch from within our product. However, we do provide you mechanisms for controlling updates via Shorebird with user information you have access to from within your -company and your application. See the -[Percentage Based Rollouts guide](/code-push/guides/percentage-based-rollouts) -for examples. +company and your application. See the Percentage Based Rollouts guide for +examples. + + We recommend using one of the following three approaches to distribute patches to a subset of users (e.g. your QA team) for testing without affecting your diff --git a/src/content/docs/code-push/initialize.mdx b/src/content/docs/code-push/initialize.mdx index 216a0029..d6dbd850 100644 --- a/src/content/docs/code-push/initialize.mdx +++ b/src/content/docs/code-push/initialize.mdx @@ -6,6 +6,8 @@ sidebar: order: 3 --- +import { LinkCard } from 'starlight-theme-nova/components'; + :::note If you are starting a new project, you can use @@ -136,3 +138,16 @@ project, use `shorebird init --force`. This will overwrite your existing by re-initializing shorebird. ::: + +## What's Next + + + diff --git a/src/content/docs/code-push/patch.mdx b/src/content/docs/code-push/patch.mdx index 3d28f975..8aeed735 100644 --- a/src/content/docs/code-push/patch.mdx +++ b/src/content/docs/code-push/patch.mdx @@ -6,52 +6,33 @@ sidebar: order: 6 --- -import { Tabs, TabItem } from '@astrojs/starlight/components'; +import { CodeTabs } from 'starlight-theme-nova/components'; Once you have published a release of your app, you can push updates using one of the `shorebird patch` commands. - - - -``` + +```bash title="Android" shorebird patch android ``` - - - - -``` +```bash title="iOS" shorebird patch ios ``` - - - - -``` +```bash title="Linux" shorebird patch linux ``` - - - - -``` +```bash title="macOS" shorebird patch macos ``` - - - - -``` +```bash title="Windows" shorebird patch windows ``` - - + This will do several things: diff --git a/src/content/docs/code-push/preview.mdx b/src/content/docs/code-push/preview.mdx index 5e686a0a..b733b5b0 100644 --- a/src/content/docs/code-push/preview.mdx +++ b/src/content/docs/code-push/preview.mdx @@ -6,6 +6,8 @@ sidebar: order: 5 --- +import { LinkCard } from 'starlight-theme-nova/components'; + Once you have [created a release](/code-push/release), you can preview your release on an Android device, Android emulator, or iOS device using the `shorebird preview` command. @@ -37,3 +39,16 @@ artifacts that Shorebird creates. For example, if you launch your app normally from Xcode or Android Studio _with a Release configuration_, you will see Shorebird logs in its output. If you have published a patch, it should be downloaded on the first run of your app and visible on subsequent runs. + +## What's Next + + + diff --git a/src/content/docs/code-push/release.mdx b/src/content/docs/code-push/release.mdx index 650a52ed..74e126e8 100644 --- a/src/content/docs/code-push/release.mdx +++ b/src/content/docs/code-push/release.mdx @@ -7,6 +7,7 @@ sidebar: --- import { Tabs, TabItem } from '@astrojs/starlight/components'; +import { LinkCard } from 'starlight-theme-nova/components'; import { Image } from 'astro:assets'; import releaseDeleteDialog from '~/assets/release_delete_dialog.png'; @@ -454,3 +455,21 @@ shorebird release android --artifact=apk That will produce _both_ .apk and .aab files. You can distribute either or both as needed. + +## What's Next + + + + diff --git a/src/content/docs/code-push/rollback.mdx b/src/content/docs/code-push/rollback.mdx index 37ad9f1f..708d64e7 100644 --- a/src/content/docs/code-push/rollback.mdx +++ b/src/content/docs/code-push/rollback.mdx @@ -6,6 +6,7 @@ sidebar: order: 7 --- +import { LinkCard } from 'starlight-theme-nova/components'; import { Image } from 'astro:assets'; import rollbackButton from '~/assets/rollback_button.png'; import rollbackPatch3Active from '~/assets/rollback_patch3_active.png'; @@ -117,5 +118,20 @@ available for review on [GitHub](https://github.com/shorebirdtech/). An overview of our code locations is available under [System Architecture](/code-push/system-architecture). -See also -[Shorebird Public Security Policies](https://handbook.shorebird.dev/security/). +## Related + + + + diff --git a/src/content/docs/getting-started/index.mdx b/src/content/docs/getting-started/index.mdx index c9947f84..fd6436c2 100644 --- a/src/content/docs/getting-started/index.mdx +++ b/src/content/docs/getting-started/index.mdx @@ -5,11 +5,15 @@ sidebar: order: 1 --- -import { Tabs, TabItem } from '@astrojs/starlight/components'; +import { + CodeTabs, + LinkButton, + LinkCard, +} from 'starlight-theme-nova/components'; Welcome to Shorebird! 👋 -In this guide, we’ll walk you through setting up Shorebird and integrating it +In this guide, we'll walk you through setting up Shorebird and integrating it into your app in just a few minutes. ## Sign up @@ -17,9 +21,9 @@ into your app in just a few minutes. The first thing you'll need to do is sign up for a Shorebird account. It's free to do and you can signup in a manner of seconds. -To create an account, head over to our -[Web Console](https://console.shorebird.dev) and authenticate with one of the -available authentication methods. + + Create an Account + ## Install @@ -31,26 +35,17 @@ as you continue using our services. To install the Shorebird command line interface (CLI): - - - -Open a terminal and run: - -```bash + +```bash title="Mac/Linux" curl --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/shorebirdtech/install/main/install.sh -sSf | bash ``` - - -Open a PowerShell terminal and run: - -```powershell +```powershell title="Windows" Set-ExecutionPolicy RemoteSigned -scope CurrentUser # Needed to execute remote scripts iwr -UseBasicParsing 'https://raw.githubusercontent.com/shorebirdtech/install/main/install.ps1'|iex ``` - - + :::note @@ -186,6 +181,21 @@ more info. ## Next Steps -Now that your account is set up and your app is initialized, you’re all set to -begin. Check out the detailed sections here in our docs to learn more about each -product and how to get the most out of them. +Now that your account is set up and your app is initialized, you're all set to +begin. + + + + diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index e1a50df8..055f6b65 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -5,21 +5,30 @@ sidebar: order: 1 --- +import { LinkButton, LinkCard } from 'starlight-theme-nova/components'; + Welcome to Shorebird! 👋 Whether you're just getting started or looking to dive deeper into advance usage of our products, you'll find everything you need here—from quick start guides to in-depth technical references. -Not sure how to get started? Check out -[our Quick Start guide](/getting-started/) to get going. + + Quick Start + ## Contact Us Still have questions? We are here to help and can be contacted in a variety of ways. -- We have an active Discord community where we're happy to help you. Join us at - https://discord.gg/shorebird -- If you have a private/confidential issue and would prefer email you can reach - us at contact@shorebird.dev + + diff --git a/src/styles/custom.css b/src/styles/custom.css new file mode 100644 index 00000000..cafb7fdf --- /dev/null +++ b/src/styles/custom.css @@ -0,0 +1,53 @@ +@import 'tailwindcss'; +@import 'starlight-theme-nova/tailwind.css'; + +@font-face { + font-family: 'General Sans'; + src: url('/fonts/GeneralSans-Variable.woff2') format('woff2'); + font-weight: 200 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'General Sans'; + src: url('/fonts/GeneralSans-VariableItalic.woff2') format('woff2'); + font-weight: 200 700; + font-style: italic; + font-display: swap; +} + +:root { + --sl-color-bg: #0d1117; + --sl-color-bg-nav: color-mix(in srgb, var(--sl-color-bg) 50%, transparent); + --sl-color-black: var(--sl-color-bg); + --sl-color-gray-6: oklch(0.23 0.02 257.3); +} + +:root[data-theme='light'] { + --sl-color-bg: white; + --sl-color-bg-nav: color-mix(in srgb, white 80%, transparent); + --sl-color-black: white; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'General Sans', sans-serif; +} + +/* Add spacing between paragraphs and interactive components (e.g. LinkButton) */ +.sl-markdown-content > p + .not-content { + margin-top: 1rem; +} + +/* Make code blocks stand out from surrounding content (dark mode only) */ +:root:not([data-theme='light']) { + .astro-code, + .code-tabs { + background-color: var(--sl-color-gray-6) !important; + } +} diff --git a/src/tailwind.css b/src/tailwind.css deleted file mode 100644 index 3fba7f0d..00000000 --- a/src/tailwind.css +++ /dev/null @@ -1,34 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* Dark mode colors. */ -:root { - --sl-color-accent-low: #002a2d; - --sl-color-accent: #007880; - --sl-color-accent-high: #8bd8de; - --sl-color-white: #ffffff; - --sl-color-gray-1: #edeeed; - --sl-color-gray-2: #c1c2c2; - --sl-color-gray-3: #8a8c8b; - --sl-color-gray-4: #575858; - --sl-color-gray-5: #373838; - --sl-color-gray-6: #262727; - --sl-color-black: #181818; -} - -/* Light mode colors. */ -:root[data-theme='light'] { - --sl-color-accent-low: #abe3e7; - --sl-color-accent: #007b83; - --sl-color-accent-high: #003a3e; - --sl-color-white: #181818; - --sl-color-gray-1: #262727; - --sl-color-gray-2: #373838; - --sl-color-gray-3: #575858; - --sl-color-gray-4: #8a8c8b; - --sl-color-gray-5: #c1c2c2; - --sl-color-gray-6: #edeeed; - --sl-color-gray-7: #f6f6f6; - --sl-color-black: #ffffff; -} diff --git a/tailwind.config.mjs b/tailwind.config.mjs deleted file mode 100644 index 17562ef6..00000000 --- a/tailwind.config.mjs +++ /dev/null @@ -1,32 +0,0 @@ -// cspell:words astrojs tailwindcss astro - -import starlightPlugin from '@astrojs/starlight-tailwind'; - -// Generated color palettes -const accent = { - 200: '#8bd8de', - 600: '#007b83', - 900: '#003a3e', - 950: '#002a2d', -}; -const gray = { - 100: '#f6f6f6', - 200: '#edeeed', - 300: '#c1c2c2', - 400: '#8a8c8b', - 500: '#575858', - 700: '#373838', - 800: '#262727', - 900: '#181818', -}; - -/** @type {import('tailwindcss').Config} */ -export default { - content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], - plugins: [starlightPlugin()], - theme: { - extend: { - colors: { accent, gray }, - }, - }, -};