@grove-dev/astro 0.2.10 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -18
- package/dist/lib/display.d.ts +11 -17
- package/dist/lib/display.d.ts.map +1 -1
- package/dist/lib/display.js +43 -43
- package/dist/lib/display.js.map +1 -1
- package/dist/lib/format.d.ts +6 -7
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +11 -12
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/lenses.d.ts +35 -73
- package/dist/lib/lenses.d.ts.map +1 -1
- package/dist/lib/lenses.js +144 -126
- package/dist/lib/lenses.js.map +1 -1
- package/dist/lib/repo.d.ts +12 -22
- package/dist/lib/repo.d.ts.map +1 -1
- package/dist/lib/repo.js +13 -25
- package/dist/lib/repo.js.map +1 -1
- package/dist/lib/scores.d.ts +15 -16
- package/dist/lib/scores.d.ts.map +1 -1
- package/dist/lib/scores.js +4 -11
- package/dist/lib/scores.js.map +1 -1
- package/dist/lib/search.d.ts +44 -129
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +192 -180
- package/dist/lib/search.js.map +1 -1
- package/dist/lib/taxonomy-counts.d.ts +7 -21
- package/dist/lib/taxonomy-counts.d.ts.map +1 -1
- package/dist/lib/taxonomy-counts.js +12 -31
- package/dist/lib/taxonomy-counts.js.map +1 -1
- package/package.json +4 -4
- package/src/components/CategoryGrid.astro +43 -31
- package/src/components/ContributorsGrid.astro +3 -3
- package/src/components/CurationGrid.astro +41 -0
- package/src/components/ExploreByStack.astro +6 -0
- package/src/components/FilterGroupMenu.astro +49 -0
- package/src/components/FilterOptions.astro +44 -0
- package/src/components/Hero.astro +198 -147
- package/src/components/Icon.astro +10 -3
- package/src/components/IndexRow.astro +75 -0
- package/src/components/ItemCard.astro +266 -248
- package/src/components/Pagination.astro +63 -0
- package/src/components/RecordSection.astro +70 -34
- package/src/components/RefinePanel.astro +115 -141
- package/src/components/StackGrid.astro +32 -24
- package/src/components/WhyThisExists.astro +32 -32
- package/src/layouts/BaseLayout.astro +104 -49
- package/src/layouts/Container.astro +5 -44
- package/src/layouts/Footer.astro +31 -20
- package/src/layouts/Header.astro +40 -19
- package/src/layouts/SectionHeader.astro +27 -43
- package/src/layouts/Seo.astro +38 -56
- package/src/layouts/ThemeToggle.astro +35 -48
- package/src/lib/display.ts +46 -53
- package/src/lib/format.ts +11 -12
- package/src/lib/lenses.ts +151 -172
- package/src/lib/repo.ts +17 -28
- package/src/lib/scores.ts +15 -19
- package/src/lib/search.ts +218 -291
- package/src/lib/taxonomy-counts.ts +12 -46
- package/src/styles.css +209 -1
- package/templates/default/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- package/templates/default/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/templates/default/.github/ISSUE_TEMPLATE/record_submission.md +48 -0
- package/templates/default/.github/pull_request_template.md +27 -0
- package/templates/default/.github/workflows/build.yml +55 -0
- package/templates/default/.github/workflows/cleanup-stale-records.yml +48 -0
- package/templates/default/.github/workflows/daily-refresh.yml +53 -0
- package/templates/default/.github/workflows/sync-contributors.yml +53 -0
- package/templates/default/.github/workflows/sync-github-metadata.yml +58 -0
- package/templates/default/.github/workflows/validate-data.yml +35 -0
- package/templates/default/data/records/coolify.yml +46 -0
- package/templates/default/data/records/gitea.yml +46 -0
- package/templates/default/data/records/hoppscotch.yml +47 -0
- package/templates/default/data/records/inventree.yml +47 -0
- package/templates/default/data/records/label-studio.yml +46 -0
- package/templates/default/data/records/logseq.yml +48 -0
- package/templates/default/data/records/private-gpt.yml +47 -0
- package/templates/default/data/records/wakapi.yml +44 -0
- package/templates/default/data/taxonomy/categories.yml +47 -0
- package/templates/default/data/taxonomy/distribution-channels.yml +43 -0
- package/templates/default/data/taxonomy/platforms.yml +27 -0
- package/templates/default/data/taxonomy/stacks.yml +41 -0
- package/templates/default/grove.config.ts +1 -1
- package/templates/default/package.json +5 -4
- package/templates/default/public/icons/stacks/bun.svg +1 -0
- package/templates/default/public/icons/stacks/clojure.svg +1 -0
- package/templates/default/public/icons/stacks/clojurescript.svg +1 -0
- package/templates/default/public/icons/stacks/deno.svg +1 -0
- package/templates/default/public/icons/stacks/django.svg +1 -0
- package/templates/default/public/icons/stacks/docker.svg +1 -0
- package/templates/default/public/icons/stacks/go.svg +1 -0
- package/templates/default/public/icons/stacks/llm.svg +1 -0
- package/templates/default/public/icons/stacks/node.js.svg +1 -0
- package/templates/default/public/icons/stacks/sveltekit.svg +1 -0
- package/templates/default/public/icons/stacks/vue.svg +1 -0
- package/templates/default/public/llms-full.txt +197 -5
- package/templates/default/public/llms.txt +107 -6
- package/templates/default/public/sitemap.xml +63 -0
- package/templates/default/scripts/build-llms.mjs +123 -0
- package/templates/default/scripts/build-records-json.mjs +27 -0
- package/templates/default/scripts/build-sitemap.mjs +20 -0
- package/templates/default/scripts/cleanup-stale-records.mjs +20 -0
- package/templates/default/scripts/enrich-github-metadata.mjs +99 -0
- package/templates/default/scripts/fetch-icons.mjs +137 -0
- package/templates/default/scripts/migrate-legacy-to-schema-v1.mjs +86 -0
- package/templates/default/scripts/parse-legacy-readme.mjs +59 -0
- package/templates/default/scripts/refresh-records-activity.mjs +24 -0
- package/templates/default/scripts/repair-license-format.mjs +72 -0
- package/templates/default/scripts/report-cleanup-candidates.mjs +21 -0
- package/templates/default/scripts/seed-from-github.mjs +62 -0
- package/templates/default/scripts/sync-contributors.mjs +145 -0
- package/templates/default/scripts/sync-github-metadata.mjs +28 -0
- package/templates/default/scripts/validate-records.mjs +27 -0
- package/templates/default/src/data/records.ts +138 -51
- package/templates/default/src/pages/404.astro +64 -0
- package/templates/default/src/pages/{projects/[slug].astro → [slug]/[recordSlug].astro} +236 -66
- package/templates/default/src/pages/[slug]/index.astro +477 -0
- package/templates/default/src/pages/about.astro +165 -82
- package/templates/default/src/pages/apps/[recordSlug].astro +33 -0
- package/templates/default/src/pages/contributors.astro +184 -0
- package/templates/default/src/pages/index.astro +119 -162
- package/templates/default/src/pages/submit.astro +276 -114
- package/templates/default/wrangler.jsonc +28 -0
- package/LICENSE +0 -21
- package/src/components/AppsIndexRow.astro +0 -204
- package/src/components/AppsPagination.astro +0 -126
- package/templates/default/.astro/content.d.ts +0 -155
- package/templates/default/.astro/settings.json +0 -5
- package/templates/default/.astro/types.d.ts +0 -1
- package/templates/default/data/generated/apps.json +0 -1
- package/templates/default/data/generated/records.full.json +0 -8
- package/templates/default/data/generated/records.index.json +0 -7
- package/templates/default/data/generated/records.json +0 -8
- package/templates/default/data/generated/repo-stats.json +0 -1
- package/templates/default/data/generated/site-config.json +0 -31
- package/templates/default/dist/_astro/BaseLayout.Dz_HR-68.css +0 -1
- package/templates/default/dist/about/index.html +0 -165
- package/templates/default/dist/icons/platforms/android.svg +0 -1
- package/templates/default/dist/icons/platforms/apple-dark.svg +0 -1
- package/templates/default/dist/icons/platforms/apple-light.svg +0 -1
- package/templates/default/dist/icons/platforms/chrome.svg +0 -1
- package/templates/default/dist/icons/platforms/chromeos.svg +0 -5
- package/templates/default/dist/icons/platforms/desktop.svg +0 -4
- package/templates/default/dist/icons/platforms/embedded.svg +0 -5
- package/templates/default/dist/icons/platforms/ios.svg +0 -1
- package/templates/default/dist/icons/platforms/linux.svg +0 -1
- package/templates/default/dist/icons/platforms/macos.svg +0 -1
- package/templates/default/dist/icons/platforms/ubuntu.svg +0 -1
- package/templates/default/dist/icons/platforms/web.svg +0 -5
- package/templates/default/dist/icons/platforms/windows.svg +0 -6
- package/templates/default/dist/icons/stacks/android.svg +0 -1
- package/templates/default/dist/icons/stacks/apple-dark.svg +0 -1
- package/templates/default/dist/icons/stacks/apple-light.svg +0 -1
- package/templates/default/dist/icons/stacks/capacitor.svg +0 -14
- package/templates/default/dist/icons/stacks/dart.svg +0 -1
- package/templates/default/dist/icons/stacks/firebase.svg +0 -1
- package/templates/default/dist/icons/stacks/flutter.svg +0 -1
- package/templates/default/dist/icons/stacks/graphql.svg +0 -1
- package/templates/default/dist/icons/stacks/ionic.svg +0 -4
- package/templates/default/dist/icons/stacks/java.svg +0 -1
- package/templates/default/dist/icons/stacks/javascript.svg +0 -1
- package/templates/default/dist/icons/stacks/kotlin.svg +0 -1
- package/templates/default/dist/icons/stacks/mongodb.svg +0 -1
- package/templates/default/dist/icons/stacks/nodejs.svg +0 -1
- package/templates/default/dist/icons/stacks/python.svg +0 -1
- package/templates/default/dist/icons/stacks/react-native.svg +0 -1
- package/templates/default/dist/icons/stacks/react.svg +0 -1
- package/templates/default/dist/icons/stacks/rust.svg +0 -1
- package/templates/default/dist/icons/stacks/solidity.svg +0 -1
- package/templates/default/dist/icons/stacks/swift.svg +0 -1
- package/templates/default/dist/icons/stacks/tensorflow.svg +0 -1
- package/templates/default/dist/icons/stacks/typescript.svg +0 -1
- package/templates/default/dist/index.html +0 -55
- package/templates/default/dist/llms-full.txt +0 -14
- package/templates/default/dist/llms.txt +0 -11
- package/templates/default/dist/og-image.svg +0 -48
- package/templates/default/dist/projects/index.html +0 -61
- package/templates/default/dist/robots.txt +0 -53
- package/templates/default/dist/sitemap.xml +0 -21
- package/templates/default/dist/submit/index.html +0 -69
- package/templates/default/node_modules/.bin/astro +0 -21
- package/templates/default/node_modules/.bin/astro-check +0 -21
- package/templates/default/node_modules/.bin/grove +0 -21
- package/templates/default/node_modules/.bin/jiti +0 -21
- package/templates/default/node_modules/.bin/prettier +0 -21
- package/templates/default/node_modules/.bin/rollup +0 -21
- package/templates/default/node_modules/.bin/tsc +0 -21
- package/templates/default/node_modules/.bin/tsserver +0 -21
- package/templates/default/node_modules/.bin/tsx +0 -21
- package/templates/default/node_modules/.bin/vite +0 -21
- package/templates/default/node_modules/.bin/yaml +0 -21
- package/templates/default/node_modules/.vite/deps/_metadata.json +0 -79
- package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js +0 -433
- package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___aria-query.js +0 -5
- package/templates/default/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___axobject-query.js +0 -5
- package/templates/default/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___html-escaper.js +0 -9
- package/templates/default/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -241
- package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js +0 -1592
- package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js +0 -30
- package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js +0 -186
- package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js +0 -48
- package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js +0 -6779
- package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js +0 -33
- package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js +0 -88
- package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js +0 -72
- package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js +0 -3757
- package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js +0 -54
- package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/package.json +0 -3
- package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js +0 -213
- package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js +0 -525
- package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js +0 -1020
- package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js +0 -147
- package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js.map +0 -7
- package/templates/default/src/components/layout/BaseLayout.astro +0 -47
- package/templates/default/src/components/layout/Container.astro +0 -18
- package/templates/default/src/components/layout/Footer.astro +0 -27
- package/templates/default/src/components/layout/Header.astro +0 -43
- package/templates/default/src/lib/markdown.ts +0 -171
- package/templates/default/src/pages/projects/index.astro +0 -193
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/badge.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/button.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/card.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/highlight.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/icon.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/radio-checkbox.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/select.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/toggle.js", "../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/tooltip.js"],
|
|
4
|
-
"sourcesContent": ["import { settings } from \"../settings.js\";\nconst sizes = [\"small\", \"large\"];\nconst styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarBadge extends HTMLElement {\n _size = \"small\";\n _badgeStyle = \"purple\";\n get size() {\n return this._size;\n }\n set size(value) {\n if (!sizes.includes(value)) {\n settings.logger.error(\n `Invalid size: ${value}, expected one of ${sizes.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._size = value;\n this.updateStyle();\n }\n get badgeStyle() {\n return this._badgeStyle;\n }\n set badgeStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(\n `Invalid style: ${value}, expected one of ${styles.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._badgeStyle = value;\n this.updateStyle();\n }\n shadowRoot;\n static observedAttributes = [\"badge-style\", \"size\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\t.badge {\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t\tborder: 1px solid transparent;\n\t\t\t\t\tpadding: 8px;\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tcolor: var(--text-color);\n\t\t\t\t\theight: var(--size);\n\t\t\t\t\tborder: 1px solid var(--border-color);\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tfont-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n\n\t\t\t\t\t--purple-text: rgba(224, 204, 250, 1);\n\t\t\t\t\t--purple-border: rgba(113, 24, 226, 1);\n\n\t\t\t\t\t--gray-text: rgba(191, 193, 201, 1);\n\t\t\t\t\t--gray-border:rgba(191, 193, 201, 1);\n\n\t\t\t\t\t--red-text: rgba(249, 196, 215, 1);\n\t\t\t\t\t--red-border: rgba(179, 62, 102, 1);\n\n\t\t\t\t\t--green-text: rgba(213, 249, 196, 1);\n\t\t\t\t\t--green-border: rgba(61, 125, 31, 1);\n\n\t\t\t\t\t--yellow-text: rgba(249, 233, 196, 1);\n\t\t\t\t\t--yellow-border: rgba(181, 138, 45, 1);\n\n\t\t\t\t\t--blue-text: rgba(189, 195, 255, 1);\n\t\t\t\t\t--blue-border: rgba(54, 69, 217, 1);\n\n\t\t\t\t\t--large: 24px;\n\t\t\t\t\t--small: 20px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<style id=\"selected-style\"></style>\n\n\t\t\t<div class=\"badge\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t\t`;\n }\n connectedCallback() {\n this.updateStyle();\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"badge-style\"))\n this.badgeStyle = this.getAttribute(\"badge-style\");\n if (this.hasAttribute(\"size\")) this.size = this.getAttribute(\"size\");\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n\t\t\t.badge {\n\t\t\t\t--text-color: var(--${this.badgeStyle}-text);\n\t\t\t\t--border-color: var(--${this.badgeStyle}-border);\n\t\t\t\t--size: var(--${this.size});\n\t\t\t}`;\n }\n }\n}\nexport {\n DevToolbarBadge\n};\n", "import { settings } from \"../settings.js\";\nconst sizes = [\"small\", \"medium\", \"large\"];\nconst styles = [\"ghost\", \"outline\", \"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nconst borderRadii = [\"normal\", \"rounded\"];\nclass DevToolbarButton extends HTMLElement {\n _size = \"small\";\n _buttonStyle = \"purple\";\n _buttonBorderRadius = \"normal\";\n get size() {\n return this._size;\n }\n set size(value) {\n if (!sizes.includes(value)) {\n settings.logger.error(\n `Invalid size: ${value}, expected one of ${sizes.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._size = value;\n this.updateStyle();\n }\n get buttonStyle() {\n return this._buttonStyle;\n }\n set buttonStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(\n `Invalid style: ${value}, expected one of ${styles.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._buttonStyle = value;\n this.updateStyle();\n }\n get buttonBorderRadius() {\n return this._buttonBorderRadius;\n }\n set buttonBorderRadius(value) {\n if (!borderRadii.includes(value)) {\n settings.logger.error(\n `Invalid border-radius: ${value}, expected one of ${borderRadii.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._buttonBorderRadius = value;\n this.updateStyle();\n }\n static observedAttributes = [\"button-style\", \"size\", \"button-border-radius\"];\n shadowRoot;\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\tbutton {\n\t\t\t\t\t--purple-background: rgba(113, 24, 226, 1);\n\t\t\t\t\t--purple-border: rgba(224, 204, 250, 0.33);\n\t\t\t\t\t--purple-text: #fff;\n\n\t\t\t\t\t--gray-background: rgba(52, 56, 65, 1);\n\t\t\t\t\t--gray-border: rgba(71, 78, 94, 1);\n\t\t\t\t\t--gray-text: #fff;\n\n\t\t\t\t\t--red-background: rgba(179, 62, 102, 1);\n\t\t\t\t\t--red-border: rgba(249, 196, 215, 0.33);\n\t\t\t\t\t--red-text: #fff;\n\n\t\t\t\t\t--green-background: rgba(213, 249, 196, 1);\n\t\t\t\t\t--green-border: rgba(61, 125, 31, 1);\n\t\t\t\t\t--green-text: #000;\n\n\t\t\t\t\t--yellow-background: rgba(255, 236, 179, 1);\n\t\t\t\t\t--yellow-border: rgba(255, 191, 0, 1);\n\t\t\t\t\t--yellow-text: #000;\n\n\t\t\t\t\t--blue-background: rgba(54, 69, 217, 1);\n\t\t\t\t\t--blue-border: rgba(189, 195, 255, 1);\n\t\t\t\t\t--blue-text: #fff;\n\n\t\t\t\t\t--outline-background: transparent;\n\t\t\t\t\t--outline-border: #fff;\n\t\t\t\t\t--outline-text: #fff;\n\n\t\t\t\t\t--ghost-background: transparent;\n\t\t\t\t\t--ghost-border: transparent;\n\t\t\t\t\t--ghost-text: #fff;\n\n\t\t\t\t\t--large-font-size: 16px;\n\t\t\t\t\t--medium-font-size: 14px;\n\t\t\t\t\t--small-font-size: 12px;\n\n\t\t\t\t\t--large-padding: 12px 16px;\n\t\t\t\t\t--large-rounded-padding: 12px 12px;\n\t\t\t\t\t--medium-padding: 8px 12px;\n\t\t\t\t\t--medium-rounded-padding: 8px 8px;\n\t\t\t\t\t--small-padding: 4px 8px;\n\t\t\t\t\t--small-rounded-padding: 4px 4px;\n\n\t\t\t\t\t--normal-border-radius: 4px;\n\t\t\t\t\t--rounded-border-radius: 9999px;\n\n\t\t\t\t\tborder: 1px solid var(--border);\n\t\t\t\t\tpadding: var(--padding);\n\t\t\t\t\tfont-size: var(--font-size);\n\t\t\t\t\tbackground: var(--background);\n\n\t\t\t\t\tcolor: var(--text-color);\n\t\t\t\t\tborder-radius: var(--border-radius);\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t}\n\n\t\t\t\tbutton:hover {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\n\t\t\t\t::slotted(astro-dev-toolbar-icon) {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\theight: 1em;\n\t\t\t\t\twidth: 1em;\n\t\t\t\t\tmargin-left: 0.5em;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<style id=\"selected-style\"></style>\n\n\t\t\t<button>\n\t\t\t\t<slot></slot>\n\t\t\t</button>\n\t\t`;\n }\n connectedCallback() {\n this.updateStyle();\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n\t\t\tbutton {\n\t\t\t\t--background: var(--${this.buttonStyle}-background);\n\t\t\t\t--border: var(--${this.buttonStyle}-border);\n\t\t\t\t--font-size: var(--${this.size}-font-size);\n\t\t\t\t--text-color: var(--${this.buttonStyle}-text);\n\t\t\t\t${this.buttonBorderRadius === \"normal\" ? \"--padding: var(--\" + this.size + \"-padding);\" : \"--padding: var(--\" + this.size + \"-rounded-padding);\"}\n\t\t\t\t--border-radius: var(--${this.buttonBorderRadius}-border-radius);\n\t\t\t}`;\n }\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"size\")) this.size = this.getAttribute(\"size\");\n if (this.hasAttribute(\"button-style\"))\n this.buttonStyle = this.getAttribute(\"button-style\");\n }\n}\nexport {\n DevToolbarButton\n};\n", "import { settings } from \"../settings.js\";\nconst styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarCard extends HTMLElement {\n link;\n clickAction;\n shadowRoot;\n _cardStyle = \"purple\";\n get cardStyle() {\n return this._cardStyle;\n }\n set cardStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(\n `Invalid style: ${value}, expected one of ${styles.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._cardStyle = value;\n this.updateStyle();\n }\n static observedAttributes = [\"card-style\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.link = this.getAttribute(\"link\");\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"card-style\"))\n this.cardStyle = this.getAttribute(\"card-style\");\n this.updateStyle();\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n\t\t\t\t:host {\n\t\t\t\t\t--hover-background: var(--${this.cardStyle}-hover-background);\n\t\t\t\t\t--hover-border: var(--${this.cardStyle}-hover-border);\n\t\t\t\t}\n\t\t\t`;\n }\n }\n connectedCallback() {\n const element = this.link ? \"a\" : this.clickAction ? \"button\" : \"div\";\n this.shadowRoot.innerHTML += `\n\t\t\t<style>\n\t\t\t\t:host {\n\t\t\t\t\t--purple-hover-background: rgba(136, 58, 234, 0.33);\n\t\t\t\t\t--purple-hover-border: 1px solid rgba(113, 24, 226, 1);\n\n\t\t\t\t\t--gray-hover-background: rgba(191, 193, 201, 0.33);\n\t\t\t\t\t--gray-hover-border: 1px solid rgba(191, 193, 201, 1);\n\n\t\t\t\t\t--red-hover-background: rgba(249, 196, 215, 0.33);\n\t\t\t\t\t--red-hover-border: 1px solid rgba(179, 62, 102, 1);\n\n\t\t\t\t\t--green-hover-background: rgba(213, 249, 196, 0.33);\n\t\t\t\t\t--green-hover-border: 1px solid rgba(61, 125, 31, 1);\n\n\t\t\t\t\t--yellow-hover-background: rgba(255, 236, 179, 0.33);\n\t\t\t\t\t--yellow-hover-border: 1px solid rgba(255, 191, 0, 1);\n\n\t\t\t\t\t--blue-hover-background: rgba(189, 195, 255, 0.33);\n\t\t\t\t\t--blue-hover-border: 1px solid rgba(54, 69, 217, 1);\n\t\t\t\t}\n\n\t\t\t\t:host>a, :host>button, :host>div {\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\tpadding: 16px;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tborder-radius: 8px;\n\t\t\t\t\tborder: 1px solid rgba(35, 38, 45, 1);\n\t\t\t\t\tcolor: rgba(191, 193, 201, 1);\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\tbackground-color: #13151A;\n\t\t\t\t\tbox-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.10), 0px 1px 2px 0px rgba(0, 0, 0, 0.10), 0px 4px 4px 0px rgba(0, 0, 0, 0.09), 0px 10px 6px 0px rgba(0, 0, 0, 0.05), 0px 17px 7px 0px rgba(0, 0, 0, 0.01), 0px 26px 7px 0px rgba(0, 0, 0, 0.00);\n\t\t\t\t\twidth: 100%;\n \t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t\th1, h2, h3, h4, h5, h6 {\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t}\n\n\t\t\t\ta:hover, button:hover {\n\t\t\t\t\tbackground: var(--hover-background);\n\t\t\t\t\tborder: var(--hover-border);\n\t\t\t\t}\n\n\t\t\t\tsvg {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin: 0 auto;\n\t\t\t\t}\n\n\t\t\t\tspan {\n\t\t\t\t\tmargin-top: 8px;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<style id=\"selected-style\"></style>\n\n\t\t\t<${element}${this.link ? ` href=\"${this.link}\" target=\"_blank\"` : ``} id=\"astro-overlay-card\">\n\t\t\t\t<slot />\n\t\t\t</${element}>\n\t\t`;\n this.updateStyle();\n if (this.clickAction) {\n this.shadowRoot.getElementById(\"astro-overlay-card\")?.addEventListener(\"click\", this.clickAction);\n }\n }\n}\nexport {\n DevToolbarCard\n};\n", "import { settings } from \"../settings.js\";\nimport { getIconElement, isDefinedIcon } from \"./icons.js\";\nconst styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarHighlight extends HTMLElement {\n icon;\n _highlightStyle = \"purple\";\n get highlightStyle() {\n return this._highlightStyle;\n }\n set highlightStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(\n `Invalid style: ${value}, expected one of ${styles.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._highlightStyle = value;\n this.updateStyle();\n }\n static observedAttributes = [\"highlight-style\"];\n shadowRoot;\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.icon = this.hasAttribute(\"icon\") ? this.getAttribute(\"icon\") : void 0;\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\t:host {\n\t\t\t\t\t--purple-background: linear-gradient(180deg, rgba(224, 204, 250, 0.33) 0%, rgba(224, 204, 250, 0.0825) 100%);\n\t\t\t\t\t--purple-border: 1px solid rgba(113, 24, 226, 1);\n\n\t\t\t\t\t--gray-background: linear-gradient(180deg, rgba(191, 193, 201, 0.33) 0%, rgba(191, 193, 201, 0.0825) 100%);\n\t\t\t\t\t--gray-border: 1px solid rgba(191, 193, 201, 1);\n\n\t\t\t\t\t--red-background: linear-gradient(180deg, rgba(249, 196, 215, 0.33) 0%, rgba(249, 196, 215, 0.0825) 100%);\n\t\t\t\t\t--red-border: 1px solid rgba(179, 62, 102, 1);\n\n\t\t\t\t\t--green-background: linear-gradient(180deg, rgba(213, 249, 196, 0.33) 0%, rgba(213, 249, 196, 0.0825) 100%);\n\t\t\t\t\t--green-border: 1px solid rgba(61, 125, 31, 1);\n\n\t\t\t\t\t--yellow-background: linear-gradient(180deg, rgba(255, 236, 179, 0.33) 0%, rgba(255, 236, 179, 0.0825) 100%);\n\t\t\t\t\t--yellow-border: 1px solid rgba(181, 138, 45, 1);\n\n\t\t\t\t\t--blue-background: linear-gradient(180deg, rgba(189, 195, 255, 0.33) 0%, rgba(189, 195, 255, 0.0825) 100%);\n\t\t\t\t\t--blue-border: 1px solid rgba(54, 69, 217, 1);\n\n\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tz-index: 2000000000;\n\n\t\t\t\t\tbackground: var(--background);\n\t\t\t\t\tborder: var(--border);\n\t\t\t\t}\n\n\t\t\t\t.icon {\n\t\t\t\t\twidth: 24px;\n\t\t\t\t\theight: 24px;\n\t\t\t\t\tcolor: white;\n\t\t\t\t\tbackground: linear-gradient(0deg, #B33E66, #B33E66), linear-gradient(0deg, #351722, #351722);\n\t\t\t\t\tborder: 1px solid rgba(53, 23, 34, 1);\n\t\t\t\t\tborder-radius: 9999px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: -15px;\n\t\t\t\t\tright: -15px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<style id=\"selected-style\"></style>\n\t\t`;\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n\t\t\t:host {\n\t\t\t\t--background: var(--${this.highlightStyle}-background);\n\t\t\t\t--border: var(--${this.highlightStyle}-border);\n\t\t\t}`;\n }\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"highlight-style\"))\n this.highlightStyle = this.getAttribute(\"highlight-style\");\n }\n connectedCallback() {\n this.updateStyle();\n if (this.icon) {\n let iconContainer = document.createElement(\"div\");\n iconContainer.classList.add(\"icon\");\n let iconElement;\n if (isDefinedIcon(this.icon)) {\n iconElement = getIconElement(this.icon);\n } else {\n iconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n iconElement.setAttribute(\"viewBox\", \"0 0 16 16\");\n iconElement.innerHTML = this.icon;\n }\n if (iconElement) {\n iconElement?.style.setProperty(\"width\", \"16px\");\n iconElement?.style.setProperty(\"height\", \"16px\");\n iconContainer.append(iconElement);\n this.shadowRoot.append(iconContainer);\n }\n }\n }\n}\nexport {\n DevToolbarHighlight\n};\n", "import { getIconElement, isDefinedIcon } from \"./icons.js\";\nclass DevToolbarIcon extends HTMLElement {\n _icon = void 0;\n shadowRoot;\n get icon() {\n return this._icon;\n }\n set icon(name) {\n this._icon = name;\n this.buildTemplate();\n }\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n if (this.hasAttribute(\"icon\")) {\n this.icon = this.getAttribute(\"icon\");\n } else {\n this.buildTemplate();\n }\n }\n getIconHTML(icon) {\n if (icon && isDefinedIcon(icon)) {\n return getIconElement(icon)?.outerHTML ?? \"\";\n }\n return \"<slot />\";\n }\n buildTemplate() {\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\tsvg {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t\t@media (forced-colors: active) {\n\t\t\t\t\tsvg path[fill=\"#fff\"] {\n\t\t\t\t\t\tfill: black;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</style>\n${this.getIconHTML(this._icon)}`;\n }\n}\nexport {\n DevToolbarIcon\n};\n", "const styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarRadioCheckbox extends HTMLElement {\n _radioStyle = \"purple\";\n input;\n shadowRoot;\n get radioStyle() {\n return this._radioStyle;\n }\n set radioStyle(value) {\n if (!styles.includes(value)) {\n console.error(`Invalid style: ${value}, expected one of ${styles.join(\", \")}.`);\n return;\n }\n this._radioStyle = value;\n this.updateStyle();\n }\n static observedAttributes = [\"radio-style\", \"checked\", \"disabled\", \"name\", \"value\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = `\n\t\t<style>\n\t\t\t:host {\n\t\t\t\t--purple-unchecked: rgba(224, 204, 250, 0.33);\n\t\t\t\t--purple-checked: rgba(224, 204, 250, 1);\n\n\t\t\t\t--gray-unchecked: rgba(191, 193, 201, 0.33);\n\t\t\t\t--gray-checked: rgba(191, 193, 201, 1);\n\n\t\t\t\t--red-unchecked: rgba(249, 196, 215, 0.33);\n\t\t\t\t--red-checked: rgba(179, 62, 102, 1);\n\n\t\t\t\t--green-unchecked: rgba(213, 249, 196, 0.33);\n\t\t\t\t--green-checked: rgba(61, 125, 31, 1);\n\n\t\t\t\t--yellow-unchecked: rgba(255, 236, 179, 0.33);\n\t\t\t\t--yellow-checked: rgba(181, 138, 45, 1);\n\n\t\t\t\t--blue-unchecked: rgba(189, 195, 255, 0.33);\n\t\t\t\t--blue-checked: rgba(54, 69, 217, 1);\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"] {\n\t\t\t\tappearance: none;\n\t\t\t\t-webkit-appearance: none;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-content: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tborder: 2px solid var(--unchecked-color);\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"]::before {\n\t\t\t\tcontent: \"\";\n\t\t\t\tbackground-color: var(--checked-color);\n\t\t\t\twidth: 8px;\n\t\t\t\theight: 8px;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\tvisibility: hidden;\n\t\t\t\tmargin: 2px;\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"]:checked {\n\t\t\t\tborder-color: var(--checked-color);\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"]:checked::before {\n\t\t\t\tvisibility: visible;\n\t\t\t}\n\t\t</style>\n\t\t<style id=\"selected-style\"></style>\n\t\t`;\n this.input = document.createElement(\"input\");\n this.input.type = \"radio\";\n this.shadowRoot.append(this.input);\n }\n connectedCallback() {\n this.updateInputState();\n this.updateStyle();\n }\n updateStyle() {\n const styleElement = this.shadowRoot.querySelector(\"#selected-style\");\n if (styleElement) {\n styleElement.innerHTML = `\n\t\t\t\t:host {\n\t\t\t\t\t--unchecked-color: var(--${this._radioStyle}-unchecked);\n\t\t\t\t\t--checked-color: var(--${this._radioStyle}-checked);\n\t\t\t\t}\n\t\t\t`;\n }\n }\n updateInputState() {\n this.input.checked = this.hasAttribute(\"checked\");\n this.input.disabled = this.hasAttribute(\"disabled\");\n this.input.name = this.getAttribute(\"name\") || \"\";\n this.input.value = this.getAttribute(\"value\") || \"\";\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"radio-style\")) {\n this.radioStyle = this.getAttribute(\"radio-style\");\n }\n this.updateInputState();\n }\n}\nexport {\n DevToolbarRadioCheckbox\n};\n", "import { settings } from \"../settings.js\";\nconst styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarSelect extends HTMLElement {\n shadowRoot;\n element;\n _selectStyle = \"gray\";\n get selectStyle() {\n return this._selectStyle;\n }\n set selectStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(`Invalid style: ${value}, expected one of ${styles.join(\", \")}.`);\n return;\n }\n this._selectStyle = value;\n this.updateStyle();\n }\n static observedAttributes = [\"select-style\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = `\n <style>\n :host {\n --purple-text: rgba(224, 204, 250, 1);\n\t\t\t\t\t--purple-border: rgba(113, 24, 226, 1);\n\n --gray-text: rgba(191, 193, 201, 1);\n\t\t\t\t\t--gray-border:rgba(191, 193, 201, 1);\n\n\t\t\t\t\t--red-text: rgba(249, 196, 215, 1);\n\t\t\t\t\t--red-border: rgba(179, 62, 102, 1);\n\n\t\t\t\t\t--green-text: rgba(213, 249, 196, 1);\n\t\t\t\t\t--green-border: rgba(61, 125, 31, 1);\n\n\t\t\t\t\t--yellow-text: rgba(249, 233, 196, 1);\n\t\t\t\t\t--yellow-border: rgba(181, 138, 45, 1);\n\n\t\t\t\t\t--blue-text: rgba(189, 195, 255, 1);\n\t\t\t\t\t--blue-border: rgba(54, 69, 217, 1);\n\n --text-color: var(--gray-text);\n --border-color: var(--gray-border);\n }\n select {\n appearance: none;\n text-align-last: center;\n display: inline-block;\n font-family: system-ui, sans-serif;\n font-size: 14px;\n padding: 4px 24px 4px 8px;\n border: 1px solid var(--border-color);\n border-radius: 4px;\n color: var(--text-color);\n background-color: transparent;\n background-image:\n linear-gradient(45deg, transparent 50%, var(--text-color) 50%),\n linear-gradient(135deg, var(--text-color) 50%, transparent 50%);\n background-position:\n calc(100% - 12px) calc(1em - 2px),\n calc(100% - 8px) calc(1em - 2px);\n background-size: 4px 4px;\n background-repeat: no-repeat;\n }\n </style>\n <style id=\"selected-style\"></style>\n <slot></slot>\n `;\n this.element = document.createElement(\"select\");\n this.shadowRoot.addEventListener(\"slotchange\", (event) => {\n if (event.target instanceof HTMLSlotElement) {\n this.element.append(...event.target.assignedNodes());\n }\n });\n }\n connectedCallback() {\n this.element.name = \"dev-toolbar-select\";\n this.shadowRoot.append(this.element);\n this.updateStyle();\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"select-style\")) {\n this.selectStyle = this.getAttribute(\"select-style\");\n }\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n :host {\n --text-color: var(--${this.selectStyle}-text);\n --border-color: var(--${this.selectStyle}-border);\n }\n `;\n }\n }\n}\nexport {\n DevToolbarSelect\n};\n", "import { settings } from \"../settings.js\";\nconst styles = [\"purple\", \"gray\", \"red\", \"green\", \"yellow\", \"blue\"];\nclass DevToolbarToggle extends HTMLElement {\n shadowRoot;\n input;\n _toggleStyle = \"gray\";\n get toggleStyle() {\n return this._toggleStyle;\n }\n set toggleStyle(value) {\n if (!styles.includes(value)) {\n settings.logger.error(`Invalid style: ${value}, expected one of ${styles.join(\", \")}.`);\n return;\n }\n this._toggleStyle = value;\n this.updateStyle();\n }\n static observedAttributes = [\"toggle-style\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = `\n\t\t<style>\n\t\t\t:host {\n\t\t\t\t--purple-bg-on: rgba(113, 24, 226, 1);\n\t\t\t\t--purple-border-off: rgba(113, 24, 226, 1);\n\t\t\t\t--purple-border-on: rgba(224, 204, 250, 1);\n\n\t\t\t\t--gray-bg-on: rgba(61, 125, 31, 1);\n\t\t\t\t--gray-border-off: rgba(145, 152, 173, 1);\n\t\t\t\t--gray-border-on: rgba(213, 249, 196, 1);\n\n\t\t\t\t--red-bg-on: rgba(179, 62, 102, 1);\n\t\t\t\t--red-border-off: rgba(179, 62, 102, 1);\n\t\t\t\t--red-border-on: rgba(249, 196, 215, 1);\n\n\t\t\t\t--green-bg-on: rgba(61, 125, 31, 1);\n\t\t\t\t--green-border-off: rgba(61, 125, 31, 1);\n\t\t\t\t--green-border-on: rgba(213, 249, 196, 1);\n\n\t\t\t\t--yellow-bg-on: rgba(181, 138, 45, 1);\n\t\t\t\t--yellow-border-off: rgba(181, 138, 45, 1);\n\t\t\t\t--yellow-border-on: rgba(255, 236, 179, 1);\n\n\t\t\t\t--blue-bg-on: rgba(54, 69, 217, 1);\n\t\t\t\t--blue-border-off: rgba(54, 69, 217, 1);\n\t\t\t\t--blue-border-on: rgba(189, 195, 255, 1);\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\tappearance: none;\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder: 1px solid var(--border-off);\n\t\t\t\ttransition: background-color 0.2s ease, border-color 0.2s ease;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t}\n\n\t\t\tinput::after {\n\t\t\t\tcontent: '';\n\t\t\t\twidth: 16px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: 16px;\n\t\t\t\tbackground-color: var(--border-off);\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\ttransition: transform 0.2s ease, background-color 0.2s ease;\n\t\t\t\ttop: 1px;\n\t\t\t\tleft: 1px;\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\t@media (forced-colors: active) {\n\t\t\t\tinput::after {\n\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\ttop: 0px;\n\t\t\t\t\tleft: 0px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput:checked {\n\t\t\t\tborder: 1px solid var(--border-on);\n\t\t\t\tbackground-color: var(--bg-on);\n\t\t\t}\n\n\t\t\tinput:checked::after {\n\t\t\t\ttransform: translateX(12px);\n\t\t\t\tbackground: var(--border-on);\n\t\t\t}\n\t\t</style>\n\t\t<style id=\"selected-style\"></style>\n\t\t`;\n this.input = document.createElement(\"input\");\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"toggle-style\"))\n this.toggleStyle = this.getAttribute(\"toggle-style\");\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n style.innerHTML = `\n\t\t\t:host {\n\t\t\t\t--bg-on: var(--${this.toggleStyle}-bg-on);\n\t\t\t\t--border-off: var(--${this.toggleStyle}-border-off);\n\t\t\t\t--border-on: var(--${this.toggleStyle}-border-on);\n\t\t\t}\n\t\t`;\n }\n }\n connectedCallback() {\n this.input.type = \"checkbox\";\n this.input.name = \"dev-toolbar-toggle\";\n this.shadowRoot.append(this.input);\n this.updateStyle();\n }\n get value() {\n return this.input.value;\n }\n set value(val) {\n this.input.value = val;\n }\n}\nexport {\n DevToolbarToggle\n};\n", "import { getIconElement, isDefinedIcon } from \"./icons.js\";\nclass DevToolbarTooltip extends HTMLElement {\n sections = [];\n shadowRoot;\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n connectedCallback() {\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t:host {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: none;\n\t\t\t\tcolor: white;\n\t\t\t\tbackground: linear-gradient(0deg, #310A65, #310A65), linear-gradient(0deg, #7118E2, #7118E2);\n\t\t\t\tborder: 1px solid rgba(113, 24, 226, 1);\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tpadding: 0;\n\t\t\t\tfont-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n\t\t\t\tfont-size: 14px;\n\t\t\t\tmargin: 0;\n\t\t\t\tz-index: 2000000001;\n\t\t\t\tmax-width: 45ch;\n\t\t\t\twidth: fit-content;\n\t\t\t\tmin-width: 30ch;\n\t\t\t\tbox-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.30), 0px 1px 2px 0px rgba(0, 0, 0, 0.29), 0px 4px 4px 0px rgba(0, 0, 0, 0.26), 0px 10px 6px 0px rgba(0, 0, 0, 0.15), 0px 17px 7px 0px rgba(0, 0, 0, 0.04), 0px 26px 7px 0px rgba(0, 0, 0, 0.01);\n\t\t\t}\n\n\t\t\t:host([data-show=\"true\"]) {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\tsvg {\n\t\t\t\tvertical-align: bottom;\n\t\t\t\tmargin-inline-end: 4px;\n\t\t\t}\n\n\t\t\thr {\n\t\t\t\tborder: 1px solid rgba(136, 58, 234, 0.33);\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\tsection {\n\t\t\t\tpadding: 8px;\n\t\t\t}\n\n\t\t\t.section-content {\n\t\t\t\tmax-height: 250px;\n \t\toverflow-y: auto;\n\t\t\t}\n\n\t\t\t.modal-title {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.modal-main-title {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\n\t\t\t.modal-title + div {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\n\t\t\t.modal-cta {\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 0.9em;\n\t\t\t}\n\n\t\t\t.clickable-section {\n\t\t\t\tbackground: rgba(113, 24, 226, 1);\n\t\t\t\tpadding: 8px;\n\t\t\t\tborder: 0;\n\t\t\t\tcolor: white;\n\t\t\t\tfont-family: system-ui, sans-serif;\n\t\t\t\ttext-align: left;\n\t\t\t\tline-height: 1.2;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tmargin: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.clickable-section:hover {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\tpre, code {\n\t\t\t\tbackground: rgb(78, 27, 145);\n\t\t\t\tfont-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n\t\t\t\tborder-radius: 2px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tpadding: 2px;\n\t\t\t}\n\t\t\tpre {\n\t\t\t\tpadding: 1em;\n\t\t\t\tmargin: 0 0;\n\t\t\t\toverflow: auto;\n\t\t\t}\n\t\t\t`;\n const fragment = new DocumentFragment();\n this.sections.forEach((section, index) => {\n const sectionElement = section.clickAction ? document.createElement(\"button\") : document.createElement(\"section\");\n if (section.clickAction) {\n sectionElement.classList.add(\"clickable-section\");\n sectionElement.addEventListener(\"click\", async () => {\n await section.clickAction();\n });\n }\n sectionElement.innerHTML = `\n\t\t\t\t${section.title ? `<div class=\"modal-title\"><span class=\"modal-main-title\">\n\t\t\t\t\t\t${section.icon ? this.getElementForIcon(section.icon) : \"\"}${section.title}</span>${section.inlineTitle ?? \"\"}</div>` : \"\"}\n\t\t\t\t${section.content ? `<div class=\"section-content\">${section.content}</div>` : \"\"}\n\t\t\t\t${section.clickDescription ? `<span class=\"modal-cta\">${section.clickDescription}</span>` : \"\"}\n\t\t\t`;\n fragment.append(sectionElement);\n if (index < this.sections.length - 1) {\n fragment.append(document.createElement(\"hr\"));\n }\n });\n this.shadowRoot.append(fragment);\n }\n getElementForIcon(icon) {\n let iconElement;\n if (isDefinedIcon(icon)) {\n iconElement = getIconElement(icon);\n } else {\n iconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n iconElement.setAttribute(\"viewBox\", \"0 0 16 16\");\n iconElement.innerHTML = icon;\n }\n iconElement?.style.setProperty(\"width\", \"16px\");\n iconElement?.style.setProperty(\"height\", \"16px\");\n return iconElement?.outerHTML ?? \"\";\n }\n}\nexport {\n DevToolbarTooltip\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["sizes", "styles", "styles", "styles", "styles", "styles", "styles"]
|
|
7
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
attachTooltipToHighlight,
|
|
3
|
-
createHighlight,
|
|
4
|
-
getElementsPositionInDocument,
|
|
5
|
-
positionHighlight
|
|
6
|
-
} from "./chunk-HBSVDAQD.js";
|
|
7
|
-
import {
|
|
8
|
-
escape
|
|
9
|
-
} from "./chunk-FHJ3XBDE.js";
|
|
10
|
-
import {
|
|
11
|
-
closeOnOutsideClick,
|
|
12
|
-
createWindowElement,
|
|
13
|
-
synchronizePlacementOnUpdate
|
|
14
|
-
} from "./chunk-XEBKRCNE.js";
|
|
15
|
-
import "./chunk-7P4KIK53.js";
|
|
16
|
-
import "./chunk-5WRI5ZAA.js";
|
|
17
|
-
|
|
18
|
-
// ../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/apps/xray.js
|
|
19
|
-
var icon = '<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true"><path fill="#fff" d="M7.9 1.5v-.4a1.1 1.1 0 0 1 2.2 0v.4a1.1 1.1 0 1 1-2.2 0Zm-6.4 8.6a1.1 1.1 0 1 0 0-2.2h-.4a1.1 1.1 0 0 0 0 2.2h.4ZM12 3.7a1.1 1.1 0 0 0 1.4-.7l.4-1.1a1.1 1.1 0 0 0-2.1-.8l-.4 1.2a1.1 1.1 0 0 0 .7 1.4Zm-9.7 7.6-1.2.4a1.1 1.1 0 1 0 .8 2.1l1-.4a1.1 1.1 0 1 0-.6-2ZM20.8 17a1.9 1.9 0 0 1 0 2.6l-1.2 1.2a1.9 1.9 0 0 1-2.6 0l-4.3-4.2-1.6 3.6a1.9 1.9 0 0 1-1.7 1.2A1.9 1.9 0 0 1 7.5 20L2.7 5a1.9 1.9 0 0 1 2.4-2.4l15 5a1.9 1.9 0 0 1 .2 3.4l-3.7 1.6 4.2 4.3ZM19 18.3 14.6 14a1.9 1.9 0 0 1 .6-3l3.2-1.5L5.1 5.1l4.3 13.3 1.5-3.2a1.9 1.9 0 0 1 3-.6l4.4 4.4.7-.7Z"/></svg>';
|
|
20
|
-
var xray_default = {
|
|
21
|
-
id: "astro:xray",
|
|
22
|
-
name: "Inspect",
|
|
23
|
-
icon,
|
|
24
|
-
init(canvas, eventTarget) {
|
|
25
|
-
let islandsOverlays = [];
|
|
26
|
-
addIslandsOverlay();
|
|
27
|
-
document.addEventListener("astro:after-swap", addIslandsOverlay);
|
|
28
|
-
document.addEventListener("astro:page-load", refreshIslandsOverlayPositions);
|
|
29
|
-
closeOnOutsideClick(eventTarget);
|
|
30
|
-
synchronizePlacementOnUpdate(eventTarget, canvas);
|
|
31
|
-
function addIslandsOverlay() {
|
|
32
|
-
islandsOverlays.forEach(({ highlightElement }) => {
|
|
33
|
-
highlightElement.remove();
|
|
34
|
-
});
|
|
35
|
-
islandsOverlays = [];
|
|
36
|
-
const islands = document.querySelectorAll("astro-island");
|
|
37
|
-
if (islands.length === 0) {
|
|
38
|
-
const window2 = createWindowElement(
|
|
39
|
-
`<style>
|
|
40
|
-
header {
|
|
41
|
-
display: flex;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
h1 {
|
|
45
|
-
display: flex;
|
|
46
|
-
align-items: center;
|
|
47
|
-
gap: 8px;
|
|
48
|
-
font-weight: 600;
|
|
49
|
-
color: #fff;
|
|
50
|
-
margin: 0;
|
|
51
|
-
font-size: 22px;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
astro-dev-toolbar-icon {
|
|
55
|
-
width: 1em;
|
|
56
|
-
height: 1em;
|
|
57
|
-
padding: 8px;
|
|
58
|
-
display: block;
|
|
59
|
-
background: #5f9ea0;
|
|
60
|
-
border-radius: 9999px;
|
|
61
|
-
}
|
|
62
|
-
</style>
|
|
63
|
-
<header>
|
|
64
|
-
<h1><astro-dev-toolbar-icon icon="lightbulb"></astro-dev-toolbar-icon>No islands detected.</h1>
|
|
65
|
-
</header>
|
|
66
|
-
<p>
|
|
67
|
-
It looks like there are no interactive component islands on this page. Did you forget to add a client directive to your interactive UI component?
|
|
68
|
-
</p>
|
|
69
|
-
`
|
|
70
|
-
);
|
|
71
|
-
canvas.append(window2);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
islands.forEach((island) => {
|
|
75
|
-
const computedStyle = window.getComputedStyle(island);
|
|
76
|
-
const islandElement = island.children[0] || island;
|
|
77
|
-
if (islandElement.offsetParent === null || computedStyle.display === "none") {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const rect = islandElement.getBoundingClientRect();
|
|
81
|
-
const highlight = createHighlight(rect);
|
|
82
|
-
const tooltip = buildIslandTooltip(island);
|
|
83
|
-
const { isFixed } = getElementsPositionInDocument(islandElement);
|
|
84
|
-
if (isFixed) {
|
|
85
|
-
tooltip.style.position = highlight.style.position = "fixed";
|
|
86
|
-
}
|
|
87
|
-
attachTooltipToHighlight(highlight, tooltip, islandElement);
|
|
88
|
-
canvas.append(highlight);
|
|
89
|
-
islandsOverlays.push({ highlightElement: highlight, island: islandElement });
|
|
90
|
-
});
|
|
91
|
-
["scroll", "resize"].forEach((event) => {
|
|
92
|
-
window.addEventListener(event, refreshIslandsOverlayPositions);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
function refreshIslandsOverlayPositions() {
|
|
96
|
-
islandsOverlays.forEach(({ highlightElement, island: islandElement }) => {
|
|
97
|
-
const rect = islandElement.getBoundingClientRect();
|
|
98
|
-
positionHighlight(highlightElement, rect);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
function buildIslandTooltip(island) {
|
|
102
|
-
const tooltip = document.createElement("astro-dev-toolbar-tooltip");
|
|
103
|
-
tooltip.sections = [];
|
|
104
|
-
const islandProps = island.getAttribute("props") ? JSON.parse(island.getAttribute("props")) : {};
|
|
105
|
-
const islandClientDirective = island.getAttribute("client");
|
|
106
|
-
if (islandClientDirective) {
|
|
107
|
-
tooltip.sections.push({
|
|
108
|
-
title: "Client directive",
|
|
109
|
-
inlineTitle: `<code>client:${islandClientDirective}</code>`
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
const islandPropsEntries = Object.entries(islandProps).filter(
|
|
113
|
-
(prop) => !prop[0].startsWith("data-astro-cid-")
|
|
114
|
-
);
|
|
115
|
-
if (islandPropsEntries.length > 0) {
|
|
116
|
-
const stringifiedProps = JSON.stringify(
|
|
117
|
-
Object.fromEntries(islandPropsEntries.map((prop) => [prop[0], prop[1][1]])),
|
|
118
|
-
void 0,
|
|
119
|
-
2
|
|
120
|
-
);
|
|
121
|
-
tooltip.sections.push({
|
|
122
|
-
title: "Props",
|
|
123
|
-
content: `<pre><code>${escape(stringifiedProps)}</code></pre>`
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
const islandComponentPath = island.getAttribute("component-url");
|
|
127
|
-
if (islandComponentPath) {
|
|
128
|
-
tooltip.sections.push({
|
|
129
|
-
content: islandComponentPath,
|
|
130
|
-
clickDescription: "Click to go to file",
|
|
131
|
-
async clickAction() {
|
|
132
|
-
await fetch(
|
|
133
|
-
"/__open-in-editor?file=" + encodeURIComponent(
|
|
134
|
-
window.__astro_dev_toolbar__.root + islandComponentPath.slice(1)
|
|
135
|
-
)
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
return tooltip;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
export {
|
|
145
|
-
xray_default as default
|
|
146
|
-
};
|
|
147
|
-
//# sourceMappingURL=xray-EFCQOW4E.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/dist/runtime/client/dev-toolbar/apps/xray.js"],
|
|
4
|
-
"sourcesContent": ["import { escape as escapeHTML } from \"html-escaper\";\nimport {\n attachTooltipToHighlight,\n createHighlight,\n getElementsPositionInDocument,\n positionHighlight\n} from \"./utils/highlight.js\";\nimport {\n closeOnOutsideClick,\n createWindowElement,\n synchronizePlacementOnUpdate\n} from \"./utils/window.js\";\nconst icon = '<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"#fff\" d=\"M7.9 1.5v-.4a1.1 1.1 0 0 1 2.2 0v.4a1.1 1.1 0 1 1-2.2 0Zm-6.4 8.6a1.1 1.1 0 1 0 0-2.2h-.4a1.1 1.1 0 0 0 0 2.2h.4ZM12 3.7a1.1 1.1 0 0 0 1.4-.7l.4-1.1a1.1 1.1 0 0 0-2.1-.8l-.4 1.2a1.1 1.1 0 0 0 .7 1.4Zm-9.7 7.6-1.2.4a1.1 1.1 0 1 0 .8 2.1l1-.4a1.1 1.1 0 1 0-.6-2ZM20.8 17a1.9 1.9 0 0 1 0 2.6l-1.2 1.2a1.9 1.9 0 0 1-2.6 0l-4.3-4.2-1.6 3.6a1.9 1.9 0 0 1-1.7 1.2A1.9 1.9 0 0 1 7.5 20L2.7 5a1.9 1.9 0 0 1 2.4-2.4l15 5a1.9 1.9 0 0 1 .2 3.4l-3.7 1.6 4.2 4.3ZM19 18.3 14.6 14a1.9 1.9 0 0 1 .6-3l3.2-1.5L5.1 5.1l4.3 13.3 1.5-3.2a1.9 1.9 0 0 1 3-.6l4.4 4.4.7-.7Z\"/></svg>';\nvar xray_default = {\n id: \"astro:xray\",\n name: \"Inspect\",\n icon,\n init(canvas, eventTarget) {\n let islandsOverlays = [];\n addIslandsOverlay();\n document.addEventListener(\"astro:after-swap\", addIslandsOverlay);\n document.addEventListener(\"astro:page-load\", refreshIslandsOverlayPositions);\n closeOnOutsideClick(eventTarget);\n synchronizePlacementOnUpdate(eventTarget, canvas);\n function addIslandsOverlay() {\n islandsOverlays.forEach(({ highlightElement }) => {\n highlightElement.remove();\n });\n islandsOverlays = [];\n const islands = document.querySelectorAll(\"astro-island\");\n if (islands.length === 0) {\n const window2 = createWindowElement(\n `<style>\n\t\t\t\t\t\theader {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\th1 {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\tgap: 8px;\n\t\t\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\t\t\tcolor: #fff;\n\t\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t\t\tfont-size: 22px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tastro-dev-toolbar-icon {\n\t\t\t\t\t\t\twidth: 1em;\n\t\t\t\t\t\t height: 1em;\n\t\t\t\t\t\t padding: 8px;\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\tbackground: #5f9ea0;\n\t\t\t\t\t\t\tborder-radius: 9999px;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t\t<header>\n\t\t\t\t\t\t<h1><astro-dev-toolbar-icon icon=\"lightbulb\"></astro-dev-toolbar-icon>No islands detected.</h1>\n\t\t\t\t\t</header>\n\t\t\t\t\t<p>\n\t\t\t\t\t\tIt looks like there are no interactive component islands on this page. Did you forget to add a client directive to your interactive UI component?\n\t\t\t\t\t</p>\n\t\t\t\t\t`\n );\n canvas.append(window2);\n return;\n }\n islands.forEach((island) => {\n const computedStyle = window.getComputedStyle(island);\n const islandElement = island.children[0] || island;\n if (islandElement.offsetParent === null || computedStyle.display === \"none\") {\n return;\n }\n const rect = islandElement.getBoundingClientRect();\n const highlight = createHighlight(rect);\n const tooltip = buildIslandTooltip(island);\n const { isFixed } = getElementsPositionInDocument(islandElement);\n if (isFixed) {\n tooltip.style.position = highlight.style.position = \"fixed\";\n }\n attachTooltipToHighlight(highlight, tooltip, islandElement);\n canvas.append(highlight);\n islandsOverlays.push({ highlightElement: highlight, island: islandElement });\n });\n [\"scroll\", \"resize\"].forEach((event) => {\n window.addEventListener(event, refreshIslandsOverlayPositions);\n });\n }\n function refreshIslandsOverlayPositions() {\n islandsOverlays.forEach(({ highlightElement, island: islandElement }) => {\n const rect = islandElement.getBoundingClientRect();\n positionHighlight(highlightElement, rect);\n });\n }\n function buildIslandTooltip(island) {\n const tooltip = document.createElement(\"astro-dev-toolbar-tooltip\");\n tooltip.sections = [];\n const islandProps = island.getAttribute(\"props\") ? JSON.parse(island.getAttribute(\"props\")) : {};\n const islandClientDirective = island.getAttribute(\"client\");\n if (islandClientDirective) {\n tooltip.sections.push({\n title: \"Client directive\",\n inlineTitle: `<code>client:${islandClientDirective}</code>`\n });\n }\n const islandPropsEntries = Object.entries(islandProps).filter(\n (prop) => !prop[0].startsWith(\"data-astro-cid-\")\n );\n if (islandPropsEntries.length > 0) {\n const stringifiedProps = JSON.stringify(\n Object.fromEntries(islandPropsEntries.map((prop) => [prop[0], prop[1][1]])),\n void 0,\n 2\n );\n tooltip.sections.push({\n title: \"Props\",\n content: `<pre><code>${escapeHTML(stringifiedProps)}</code></pre>`\n });\n }\n const islandComponentPath = island.getAttribute(\"component-url\");\n if (islandComponentPath) {\n tooltip.sections.push({\n content: islandComponentPath,\n clickDescription: \"Click to go to file\",\n async clickAction() {\n await fetch(\n \"/__open-in-editor?file=\" + encodeURIComponent(\n window.__astro_dev_toolbar__.root + islandComponentPath.slice(1)\n )\n );\n }\n });\n }\n return tooltip;\n }\n }\n};\nexport {\n xray_default as default\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import "../../styles/global.css";
|
|
3
|
-
import Header from "./Header.astro";
|
|
4
|
-
import Footer from "./Footer.astro";
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
title: string;
|
|
8
|
-
description: string;
|
|
9
|
-
noindex?: boolean;
|
|
10
|
-
jsonLd?: Record<string, unknown> | Record<string, unknown>[];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const { title, description, noindex, jsonLd } = Astro.props;
|
|
14
|
-
|
|
15
|
-
const favicon =
|
|
16
|
-
"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' rx='3' fill='%2318181b'/%3E%3C/svg%3E";
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
<!doctype html>
|
|
20
|
-
<html lang="en">
|
|
21
|
-
<head>
|
|
22
|
-
<meta charset="UTF-8" />
|
|
23
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
24
|
-
<meta name="generator" content={Astro.generator} />
|
|
25
|
-
<meta name="description" content={description} />
|
|
26
|
-
<meta name="theme-color" content="#0a0a0c" media="(prefers-color-scheme: dark)" />
|
|
27
|
-
<meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)" />
|
|
28
|
-
<link rel="icon" href={favicon} />
|
|
29
|
-
<link rel="sitemap" href="/sitemap.xml" />
|
|
30
|
-
<link rel="alternate" type="text/plain" href="/llms.txt" title="LLM usage guidance" />
|
|
31
|
-
{noindex && <meta name="robots" content="noindex,nofollow" />}
|
|
32
|
-
<title>{title}</title>
|
|
33
|
-
{jsonLd && (
|
|
34
|
-
<script
|
|
35
|
-
type="application/ld+json"
|
|
36
|
-
set:html={JSON.stringify(jsonLd)}
|
|
37
|
-
/>
|
|
38
|
-
)}
|
|
39
|
-
</head>
|
|
40
|
-
<body class="min-h-screen bg-white text-ink-900 dark:bg-ink-950 dark:text-ink-100">
|
|
41
|
-
<Header />
|
|
42
|
-
<main>
|
|
43
|
-
<slot />
|
|
44
|
-
</main>
|
|
45
|
-
<Footer />
|
|
46
|
-
</body>
|
|
47
|
-
</html>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
interface Props {
|
|
3
|
-
size?: "default" | "wide" | "narrow";
|
|
4
|
-
class?: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
const { size = "default", class: className = "" } = Astro.props;
|
|
8
|
-
const sizeClass =
|
|
9
|
-
size === "wide"
|
|
10
|
-
? "max-w-wide"
|
|
11
|
-
: size === "narrow"
|
|
12
|
-
? "max-w-narrow"
|
|
13
|
-
: "max-w-container";
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
<div class={`${sizeClass} mx-auto px-5 sm:px-7 ${className}`}>
|
|
17
|
-
<slot />
|
|
18
|
-
</div>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import siteConfig from "../../data/generated/site-config.json";
|
|
3
|
-
|
|
4
|
-
const year = new Date().getFullYear();
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<footer class="mt-16 border-t border-ink-200 bg-white text-ink-500 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-400">
|
|
8
|
-
<div class="mx-auto max-w-6xl px-5 py-8 sm:px-7">
|
|
9
|
-
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
|
10
|
-
<p class="m-0 text-sm">
|
|
11
|
-
© {year} {siteConfig.name}.
|
|
12
|
-
</p>
|
|
13
|
-
<p class="m-0 text-2xs text-ink-500 dark:text-ink-400">
|
|
14
|
-
Built with{" "}
|
|
15
|
-
<a
|
|
16
|
-
href="https://github.com/tortuvshin/grove"
|
|
17
|
-
target="_blank"
|
|
18
|
-
rel="noopener noreferrer"
|
|
19
|
-
class="hover:text-ink-900 dark:hover:text-ink-100"
|
|
20
|
-
>
|
|
21
|
-
Grove
|
|
22
|
-
</a>
|
|
23
|
-
{" "}— an open-source framework for community knowledge sites.
|
|
24
|
-
</p>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</footer>
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import siteConfig from "../../data/generated/site-config.json";
|
|
3
|
-
import { indexSlug } from "../../data/records";
|
|
4
|
-
|
|
5
|
-
const navItems = siteConfig.nav.length > 0
|
|
6
|
-
? siteConfig.nav
|
|
7
|
-
: [
|
|
8
|
-
{ label: "Home", href: "/" },
|
|
9
|
-
{ label: "Browse", href: `/${indexSlug()}` },
|
|
10
|
-
{ label: "About", href: "/about" },
|
|
11
|
-
{ label: "Submit", href: "/submit" },
|
|
12
|
-
];
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
<header class="border-b border-ink-200 bg-white/85 backdrop-blur dark:border-ink-800 dark:bg-ink-950/85">
|
|
16
|
-
<div class="mx-auto flex max-w-6xl items-center gap-6 px-5 py-3 sm:px-7">
|
|
17
|
-
<a
|
|
18
|
-
href="/"
|
|
19
|
-
class="inline-flex items-center gap-2 text-base font-semibold tracking-tight text-ink-900 dark:text-ink-100"
|
|
20
|
-
>
|
|
21
|
-
<span
|
|
22
|
-
aria-hidden="true"
|
|
23
|
-
class="inline-block h-4 w-4 rounded bg-ink-900 dark:bg-ink-100"
|
|
24
|
-
></span>
|
|
25
|
-
<span>{siteConfig.name}</span>
|
|
26
|
-
</a>
|
|
27
|
-
|
|
28
|
-
<nav class="hidden flex-1 md:block" aria-label="Primary">
|
|
29
|
-
<ul class="m-0 flex list-none gap-5 p-0">
|
|
30
|
-
{navItems.map((item) => (
|
|
31
|
-
<li>
|
|
32
|
-
<a
|
|
33
|
-
href={item.href}
|
|
34
|
-
class="text-sm font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"
|
|
35
|
-
>
|
|
36
|
-
{item.label}
|
|
37
|
-
</a>
|
|
38
|
-
</li>
|
|
39
|
-
))}
|
|
40
|
-
</ul>
|
|
41
|
-
</nav>
|
|
42
|
-
</div>
|
|
43
|
-
</header>
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tiny markdown → HTML converter for page-level content bodies.
|
|
3
|
-
*
|
|
4
|
-
* Scope is intentionally narrow: it handles the markdown the
|
|
5
|
-
* `content/pages/*.md` files actually use (headings, paragraphs,
|
|
6
|
-
* unordered + ordered lists, fenced code, inline `code` and
|
|
7
|
-
* links). Anything more elaborate (tables, footnotes, autolinks)
|
|
8
|
-
* is out of scope — consumers can swap in a real renderer
|
|
9
|
-
* (marked, remark, ...) by overriding the page-level helper.
|
|
10
|
-
*
|
|
11
|
-
* The output is HTML-escaped at the source so a stray `<` in the
|
|
12
|
-
* markdown file can't break the page. Inline `code` and links are
|
|
13
|
-
* processed before the escape pass.
|
|
14
|
-
*/
|
|
15
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
-
|
|
17
|
-
function escapeHtml(s: string): string {
|
|
18
|
-
return s
|
|
19
|
-
.replace(/&/g, "&")
|
|
20
|
-
.replace(/</g, "<")
|
|
21
|
-
.replace(/>/g, ">");
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function renderInline(line: string): string {
|
|
25
|
-
let out = escapeHtml(line);
|
|
26
|
-
// Inline code: `…` — render first so its content doesn't get
|
|
27
|
-
// further processed.
|
|
28
|
-
out = out.replace(/`([^`]+)`/g, (_, code: string) => `<code>${code}</code>`);
|
|
29
|
-
// Links: [text](url)
|
|
30
|
-
out = out.replace(
|
|
31
|
-
/\[([^\]]+)\]\(([^)]+)\)/g,
|
|
32
|
-
(_, text: string, url: string) =>
|
|
33
|
-
`<a href="${url}" class="text-ink-900 underline hover:text-ink-700 dark:text-ink-100 dark:hover:text-white" rel="noopener noreferrer">${text}</a>`,
|
|
34
|
-
);
|
|
35
|
-
// Bold: **…**
|
|
36
|
-
out = out.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
|
|
37
|
-
// Italic: *…*
|
|
38
|
-
out = out.replace(/\*([^*]+)\*/g, "<em>$1</em>");
|
|
39
|
-
return out;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
interface Block {
|
|
43
|
-
type: "h2" | "h3" | "p" | "ul" | "ol" | "pre";
|
|
44
|
-
lines: string[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function parseBlocks(md: string): Block[] {
|
|
48
|
-
const lines = md.split(/\r?\n/);
|
|
49
|
-
const blocks: Block[] = [];
|
|
50
|
-
let i = 0;
|
|
51
|
-
while (i < lines.length) {
|
|
52
|
-
const line = lines[i];
|
|
53
|
-
if (!line.trim()) {
|
|
54
|
-
i++;
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
if (line.startsWith("## ")) {
|
|
58
|
-
blocks.push({ type: "h2", lines: [line.slice(3)] });
|
|
59
|
-
i++;
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
if (line.startsWith("### ")) {
|
|
63
|
-
blocks.push({ type: "h3", lines: [line.slice(4)] });
|
|
64
|
-
i++;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (line.startsWith("```")) {
|
|
68
|
-
const buf: string[] = [];
|
|
69
|
-
i++;
|
|
70
|
-
while (i < lines.length && !lines[i].startsWith("```")) {
|
|
71
|
-
buf.push(lines[i]);
|
|
72
|
-
i++;
|
|
73
|
-
}
|
|
74
|
-
i++; // skip closing fence
|
|
75
|
-
blocks.push({ type: "pre", lines: buf });
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
if (/^[-*] /.test(line)) {
|
|
79
|
-
const buf: string[] = [];
|
|
80
|
-
while (i < lines.length && /^[-*] /.test(lines[i])) {
|
|
81
|
-
buf.push(lines[i].slice(2));
|
|
82
|
-
i++;
|
|
83
|
-
}
|
|
84
|
-
blocks.push({ type: "ul", lines: buf });
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (/^\d+\. /.test(line)) {
|
|
88
|
-
const buf: string[] = [];
|
|
89
|
-
while (i < lines.length && /^\d+\. /.test(lines[i])) {
|
|
90
|
-
buf.push(lines[i].replace(/^\d+\. /, ""));
|
|
91
|
-
i++;
|
|
92
|
-
}
|
|
93
|
-
blocks.push({ type: "ol", lines: buf });
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
// Default: paragraph (consume contiguous non-blank lines).
|
|
97
|
-
const buf: string[] = [line];
|
|
98
|
-
i++;
|
|
99
|
-
while (
|
|
100
|
-
i < lines.length &&
|
|
101
|
-
lines[i].trim() &&
|
|
102
|
-
!lines[i].startsWith("## ") &&
|
|
103
|
-
!lines[i].startsWith("### ") &&
|
|
104
|
-
!lines[i].startsWith("```") &&
|
|
105
|
-
!/^[-*] /.test(lines[i]) &&
|
|
106
|
-
!/^\d+\. /.test(lines[i])
|
|
107
|
-
) {
|
|
108
|
-
buf.push(lines[i]);
|
|
109
|
-
i++;
|
|
110
|
-
}
|
|
111
|
-
blocks.push({ type: "p", lines: buf });
|
|
112
|
-
}
|
|
113
|
-
return blocks;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export function renderMarkdown(md: string): string {
|
|
117
|
-
const blocks = parseBlocks(md);
|
|
118
|
-
const html: string[] = [];
|
|
119
|
-
for (const b of blocks) {
|
|
120
|
-
switch (b.type) {
|
|
121
|
-
case "h2":
|
|
122
|
-
html.push(
|
|
123
|
-
`<h2 class="m-0 mt-10 text-[1.375rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">${renderInline(b.lines[0])}</h2>`,
|
|
124
|
-
);
|
|
125
|
-
break;
|
|
126
|
-
case "h3":
|
|
127
|
-
html.push(
|
|
128
|
-
`<h3 class="m-0 mt-8 text-[1.125rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">${renderInline(b.lines[0])}</h3>`,
|
|
129
|
-
);
|
|
130
|
-
break;
|
|
131
|
-
case "p":
|
|
132
|
-
html.push(
|
|
133
|
-
`<p class="m-0 mt-4 text-[0.9375rem] leading-relaxed text-ink-700 dark:text-ink-200">${b.lines.map(renderInline).join(" ")}</p>`,
|
|
134
|
-
);
|
|
135
|
-
break;
|
|
136
|
-
case "ul":
|
|
137
|
-
html.push(
|
|
138
|
-
`<ul class="m-0 mt-4 list-disc space-y-1.5 pl-6 text-[0.9375rem] leading-relaxed text-ink-700 dark:text-ink-200">${b.lines
|
|
139
|
-
.map((l) => `<li>${renderInline(l)}</li>`)
|
|
140
|
-
.join("")}</ul>`,
|
|
141
|
-
);
|
|
142
|
-
break;
|
|
143
|
-
case "ol":
|
|
144
|
-
html.push(
|
|
145
|
-
`<ol class="m-0 mt-4 list-decimal space-y-1.5 pl-6 text-[0.9375rem] leading-relaxed text-ink-700 dark:text-ink-200">${b.lines
|
|
146
|
-
.map((l) => `<li>${renderInline(l)}</li>`)
|
|
147
|
-
.join("")}</ol>`,
|
|
148
|
-
);
|
|
149
|
-
break;
|
|
150
|
-
case "pre":
|
|
151
|
-
html.push(
|
|
152
|
-
`<pre class="mt-4 overflow-x-auto rounded-md border border-ink-200 bg-ink-50 p-4 text-xs leading-relaxed text-ink-800 dark:border-ink-800 dark:bg-ink-900/60 dark:text-ink-200"><code>${escapeHtml(b.lines.join("\n"))}</code></pre>`,
|
|
153
|
-
);
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return html.join("\n");
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/** Read a markdown file from a list of candidate paths, return null if missing. */
|
|
161
|
-
export function readMarkdownFile(candidates: string[]): string | null {
|
|
162
|
-
for (const path of candidates) {
|
|
163
|
-
try {
|
|
164
|
-
if (!existsSync(path)) continue;
|
|
165
|
-
return readFileSync(path, "utf8");
|
|
166
|
-
} catch {
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return null;
|
|
171
|
-
}
|