@mdn/fred 0.0.3 → 0.0.5
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/.github/workflows/npm-publish.yml +18 -4
- package/.prettierignore +1 -0
- package/.release-please-manifest.json +3 -0
- package/CHANGELOG.md +30 -0
- package/components/advertising/server.js +1 -1
- package/components/blog-index/server.js +1 -1
- package/components/blog-post/server.js +1 -1
- package/components/color/global.css +2 -0
- package/components/homepage-hero/server.css +6 -0
- package/components/homepage-hero/server.js +0 -1
- package/components/observatory-landing/faq.js +1 -1
- package/components/observatory-landing/feedback.js +1 -1
- package/components/observatory-landing/server.js +1 -1
- package/components/observatory-results/server.js +1 -1
- package/components/placement-sidebar/element.css +7 -0
- package/components/reference-layout/server.css +2 -0
- package/components/reference-toc/server.js +1 -1
- package/components/search-modal/element.css +131 -4
- package/components/search-modal/element.js +60 -25
- package/dist/client/1739.1435a6d3f1a2dd88.js +8 -0
- package/dist/client/1739.1435a6d3f1a2dd88.js.map +1 -0
- package/dist/client/2776.435ecffa5f77c7eb.js +43 -0
- package/dist/client/2776.435ecffa5f77c7eb.js.map +1 -0
- package/dist/client/{5837.f6d4c078ffaaacdd.js → 5837.52bd8ccde0085adc.js} +2 -2
- package/dist/client/5837.52bd8ccde0085adc.js.map +1 -0
- package/dist/client/{7293.b60a1f58515f31a2.js → 7293.b57f88f90b72c988.js} +2 -2
- package/dist/client/{7293.b60a1f58515f31a2.js.map → 7293.b57f88f90b72c988.js.map} +1 -1
- package/dist/client/{8483.0c0da6fab68fab50.js → 8483.651683d5e2cbae52.js} +2 -2
- package/dist/client/{8483.0c0da6fab68fab50.js.map → 8483.651683d5e2cbae52.js.map} +1 -1
- package/dist/client/{8551.e33e50ee71f44812.js → 8551.4cf05a456e8b9b36.js} +2 -2
- package/dist/client/8551.4cf05a456e8b9b36.js.map +1 -0
- package/dist/client/9551.23d0a332e0083e6c.js +16 -0
- package/dist/client/9551.23d0a332e0083e6c.js.map +1 -0
- package/dist/client/{9565.5e45ab3e0d622510.js → 9565.faafbc9f4c1268c1.js} +2 -2
- package/dist/client/9565.faafbc9f4c1268c1.js.map +1 -0
- package/dist/client/{index.a2573f654d416e75.js → index.f81a73f443949b54.js} +2 -2
- package/dist/client/{index.a2573f654d416e75.js.map → index.f81a73f443949b54.js.map} +1 -1
- package/dist/client/{runtime.25188d4f5ff249c3.js → runtime.a1cce37ae8fd8f1d.js} +2 -2
- package/dist/client/{runtime.25188d4f5ff249c3.js.map → runtime.a1cce37ae8fd8f1d.js.map} +1 -1
- package/dist/client/stats.json +462 -462
- package/dist/client/styles-a11y-menu.3ddb63a73a9c8c9b.js +1 -0
- package/dist/client/styles-advertising.89daa4b1babb5d7c.js +1 -0
- package/dist/client/styles-article-footer.aad4b81dfb2f25aa.js +1 -0
- package/dist/client/styles-banner.b00e4ed105869308.js +1 -0
- package/dist/client/styles-baseline-indicator.b4fff7b664a71278.js +1 -0
- package/dist/client/styles-blog-index.bfa0b41dd840cec9.js +1 -0
- package/dist/client/styles-blog-post.589bea0672ef6cfe.js +1 -0
- package/dist/client/styles-breadcrumbs-bar.1135acbe7353b72f.js +1 -0
- package/dist/client/styles-breadcrumbs.41165c22e7482511.js +1 -0
- package/dist/client/styles-button.9f72d7a8fee3a671.js +1 -0
- package/dist/client/styles-content-section.ff53f1079444e3be.js +1 -0
- package/dist/client/styles-contributor-spotlight.9a65604ef7cf6f72.js +1 -0
- package/dist/client/styles-curriculum-about.8da72a5697ee54c6.js +1 -0
- package/dist/client/styles-curriculum-default.36e79c6e85e661a6.js +1 -0
- package/dist/client/styles-curriculum-landing.92b1373346b15e6a.js +1 -0
- package/dist/client/styles-curriculum-module.45185c94b78788e1.js +1 -0
- package/dist/client/styles-curriculum-overview.61995cbb01819033.js +1 -0
- package/dist/client/styles-featured-articles.616852431f1e0ee4.js +1 -0
- package/dist/client/styles-footer.f16abca2043e46bb.js +1 -0
- package/dist/client/styles-generic-about.14bc0114374d65e7.js +1 -0
- package/dist/client/styles-generic-community.614ed8dfbcb62ea7.js +1 -0
- package/dist/client/styles-generic-content.32ed38732d0f3b45.js +1 -0
- package/dist/client/styles-generic-layout.b69ebe87382c0d4a.js +1 -0
- package/dist/client/styles-generic-sidebar.08698c1b14c8b476.js +1 -0
- package/dist/client/styles-generic-toc.30e78be425cba070.js +1 -0
- package/dist/client/{styles-global.a3ba01d8e2fca47b.js → styles-global.29cd4720c8834abd.js} +1 -1
- package/dist/client/{styles-global.3d9e085f0247e92c.css → styles-global.f515b2bde4d7df93.css} +2 -2
- package/dist/client/styles-global.f515b2bde4d7df93.css.map +1 -0
- package/dist/client/styles-heading-anchor.e8129df53b41bd49.js +1 -0
- package/dist/client/styles-homepage-body.0b19b0a2038d4e78.js +1 -0
- package/dist/client/styles-homepage-contributor-spotlight.8daa31290a0a5f18.js +1 -0
- package/dist/client/styles-homepage-footer.78ba9c3277b58bf3.js +1 -0
- package/dist/client/styles-homepage-header.be93cd932f41267d.js +1 -0
- package/dist/client/styles-homepage-hero.4ed7235d37aa37cf.js +1 -0
- package/dist/client/{styles-homepage-hero.ca54e4bc0c0b420e.css → styles-homepage-hero.6d83a175f7f76d29.css} +2 -2
- package/dist/client/styles-homepage-hero.6d83a175f7f76d29.css.map +1 -0
- package/dist/client/styles-homepage.4da96775e9ab92bf.js +1 -0
- package/dist/client/styles-latest-news.80e70c9afcc04226.js +1 -0
- package/dist/client/styles-left-sidebar.58bfaf3c10109a49.js +1 -0
- package/dist/client/styles-logo.53efe8dc644a9839.js +1 -0
- package/dist/client/styles-mandala.52b580d4cf59fa4f.js +1 -0
- package/dist/client/styles-menu.ab201de6ebb3686a.js +1 -0
- package/dist/client/styles-navigation.176cffc5e646d9a9.js +1 -0
- package/dist/client/styles-not-found.a35e816ca45b2bf5.js +1 -0
- package/dist/client/styles-observatory-landing.b162eac949784932.js +1 -0
- package/dist/client/styles-observatory-results.d902d3f1dbcf45d7.js +1 -0
- package/dist/client/styles-page-layout.a371293b6209ae16.js +1 -0
- package/dist/client/styles-pagination.1310b1c891cb6a5a.js +1 -0
- package/dist/client/styles-playground.88e73c644d4c1008.js +1 -0
- package/dist/client/styles-recent-contributions.c27a16f4c3f97461.js +1 -0
- package/dist/client/{styles-reference-layout.4b0aca3ae954f961.css → styles-reference-layout.ac37f9e3a27faaac.css} +2 -2
- package/dist/client/styles-reference-layout.ac37f9e3a27faaac.css.map +1 -0
- package/dist/client/styles-reference-layout.f009e8667518e87e.js +1 -0
- package/dist/client/styles-reference-toc.f201a765d7115477.js +1 -0
- package/dist/client/styles-sandbox.7d80ef02b6c1e504.js +1 -0
- package/dist/client/styles-translation-banner.ccf3c42b9943fc48.js +1 -0
- package/dist/client/{styles.911adb13c338ef51.js → styles.4f05a7e79fd0f3ee.js} +2 -2
- package/dist/client/{styles.911adb13c338ef51.js.map → styles.4f05a7e79fd0f3ee.js.map} +1 -1
- package/dist/legacy/{index.420b003bd21312e0.js → index.b481dadaaa935e27.js} +3 -3
- package/dist/legacy/{index.420b003bd21312e0.js.map → index.b481dadaaa935e27.js.map} +1 -1
- package/dist/legacy/stats.json +6 -6
- package/dist/ssr/7293.js +1 -1
- package/dist/ssr/7293.js.map +1 -1
- package/dist/ssr/9551.js +4 -4
- package/dist/ssr/9551.js.map +1 -1
- package/dist/ssr/index.js +23 -12
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/stats.json +4 -4
- package/l10n/en-US.ftl +1 -1
- package/package.json +2 -2
- package/release-please-config.json +15 -0
- package/dist/client/1739.16064f8d04091fb6.js +0 -8
- package/dist/client/1739.16064f8d04091fb6.js.map +0 -1
- package/dist/client/2776.f1ca2b5f474ba69f.js +0 -32
- package/dist/client/2776.f1ca2b5f474ba69f.js.map +0 -1
- package/dist/client/5837.f6d4c078ffaaacdd.js.map +0 -1
- package/dist/client/8551.e33e50ee71f44812.js.map +0 -1
- package/dist/client/9551.495c74e2c7129b38.js +0 -16
- package/dist/client/9551.495c74e2c7129b38.js.map +0 -1
- package/dist/client/9565.5e45ab3e0d622510.js.map +0 -1
- package/dist/client/styles-a11y-menu.18fa89054eb7202a.js +0 -1
- package/dist/client/styles-advertising.90a05252519044ac.js +0 -1
- package/dist/client/styles-article-footer.2f72d43869e2fc04.js +0 -1
- package/dist/client/styles-banner.6c855e9feea9c071.js +0 -1
- package/dist/client/styles-baseline-indicator.0ee33f4434f78f8f.js +0 -1
- package/dist/client/styles-blog-index.63718eed7985555b.js +0 -1
- package/dist/client/styles-blog-post.e369a7b6bd7ee253.js +0 -1
- package/dist/client/styles-breadcrumbs-bar.0e5432b97f042a51.js +0 -1
- package/dist/client/styles-breadcrumbs.ffcf3e7f6aca4842.js +0 -1
- package/dist/client/styles-button.9ef7569f2eb2448b.js +0 -1
- package/dist/client/styles-content-section.8d683bcfa074d863.js +0 -1
- package/dist/client/styles-contributor-spotlight.08b1f6ed86daacc7.js +0 -1
- package/dist/client/styles-curriculum-about.399ca9fae70cdf42.js +0 -1
- package/dist/client/styles-curriculum-default.1d95308cf28d0cbe.js +0 -1
- package/dist/client/styles-curriculum-landing.75954cd6cee0580a.js +0 -1
- package/dist/client/styles-curriculum-module.1e885d2e7fbd00c6.js +0 -1
- package/dist/client/styles-curriculum-overview.7efe6d339fda7e6e.js +0 -1
- package/dist/client/styles-featured-articles.8a24cb5b80c4c61a.js +0 -1
- package/dist/client/styles-footer.c6cf58283ef90c67.js +0 -1
- package/dist/client/styles-generic-about.7b141a48f0710a55.js +0 -1
- package/dist/client/styles-generic-community.ab65d4d721e3667b.js +0 -1
- package/dist/client/styles-generic-content.c29785e714ffd1f5.js +0 -1
- package/dist/client/styles-generic-layout.5f207ab849f99ea7.js +0 -1
- package/dist/client/styles-generic-sidebar.7d35fed4f9bc1d3f.js +0 -1
- package/dist/client/styles-generic-toc.75b9d25451f88334.js +0 -1
- package/dist/client/styles-global.3d9e085f0247e92c.css.map +0 -1
- package/dist/client/styles-heading-anchor.723d7995b359e9c5.js +0 -1
- package/dist/client/styles-homepage-body.7804e89b5b1f5fb0.js +0 -1
- package/dist/client/styles-homepage-contributor-spotlight.99a49f2c25da44d8.js +0 -1
- package/dist/client/styles-homepage-footer.6110ddf33f932da9.js +0 -1
- package/dist/client/styles-homepage-header.9869e99567417f85.js +0 -1
- package/dist/client/styles-homepage-hero.ca54e4bc0c0b420e.css.map +0 -1
- package/dist/client/styles-homepage-hero.f3b9f1a51df08e48.js +0 -1
- package/dist/client/styles-homepage.3d3ddf3a45d9fb9f.js +0 -1
- package/dist/client/styles-latest-news.3ee704eb566845af.js +0 -1
- package/dist/client/styles-left-sidebar.b58f94d7797b94a3.js +0 -1
- package/dist/client/styles-logo.15cde079ff7cf413.js +0 -1
- package/dist/client/styles-mandala.fbf5df30c1569b80.js +0 -1
- package/dist/client/styles-menu.432117f56550a699.js +0 -1
- package/dist/client/styles-navigation.ae5b4029d77512c1.js +0 -1
- package/dist/client/styles-not-found.bb24f3d7153e6384.js +0 -1
- package/dist/client/styles-observatory-landing.6ccab12860b70065.js +0 -1
- package/dist/client/styles-observatory-results.8debe68c8c1054ba.js +0 -1
- package/dist/client/styles-page-layout.3855b7fd5c6c1e0f.js +0 -1
- package/dist/client/styles-pagination.5241370112fc2d33.js +0 -1
- package/dist/client/styles-playground.5fd947e80ea7bbbc.js +0 -1
- package/dist/client/styles-recent-contributions.96ef61f802ae3c05.js +0 -1
- package/dist/client/styles-reference-layout.4b0aca3ae954f961.css.map +0 -1
- package/dist/client/styles-reference-layout.f70ad6dcede0cc3e.js +0 -1
- package/dist/client/styles-reference-toc.4955096ec82f0e5e.js +0 -1
- package/dist/client/styles-sandbox.33cffca9447c527a.js +0 -1
- package/dist/client/styles-translation-banner.e5c9497137fa78db.js +0 -1
- /package/dist/legacy/{index.420b003bd21312e0.js.LICENSE.txt → index.b481dadaaa935e27.js.LICENSE.txt} +0 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
name: NPM Publish
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
5
7
|
|
|
6
|
-
permissions:
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
7
11
|
|
|
8
12
|
jobs:
|
|
9
13
|
build:
|
|
@@ -11,19 +15,29 @@ jobs:
|
|
|
11
15
|
runs-on: ubuntu-latest
|
|
12
16
|
|
|
13
17
|
steps:
|
|
14
|
-
-
|
|
18
|
+
- name: Release
|
|
19
|
+
uses: googleapis/release-please-action@v4
|
|
20
|
+
id: release
|
|
21
|
+
|
|
22
|
+
- name: Checkout
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
if: steps.release.outputs.release_created
|
|
15
25
|
|
|
16
26
|
- name: Setup
|
|
17
27
|
uses: actions/setup-node@v4
|
|
28
|
+
if: steps.release.outputs.release_created
|
|
18
29
|
with:
|
|
19
30
|
node-version-file: ".nvmrc"
|
|
20
|
-
cache: npm
|
|
21
31
|
registry-url: "https://registry.npmjs.org"
|
|
22
32
|
|
|
23
33
|
- name: Install
|
|
34
|
+
if: steps.release.outputs.release_created
|
|
24
35
|
run: npm ci
|
|
36
|
+
env:
|
|
37
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
25
38
|
|
|
26
39
|
- name: Publish
|
|
40
|
+
if: steps.release.outputs.release_created
|
|
27
41
|
run: npm publish --access public
|
|
28
42
|
env:
|
|
29
43
|
FRED_WRITER_MODE: true
|
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CHANGELOG.md
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.0.5](https://github.com/mdn/fred/compare/v0.0.4...v0.0.5) (2025-07-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **homepage-hero:** avoid non-link underline ([#287](https://github.com/mdn/fred/issues/287)) ([919f789](https://github.com/mdn/fred/commit/919f789b89e1afdb3610a509aa2e70c665616704))
|
|
9
|
+
* **placement:** add focus-visible to sidebar ([#280](https://github.com/mdn/fred/issues/280)) ([7381c00](https://github.com/mdn/fred/commit/7381c00b1fb9ca769d902da8bd7c76f1f6b33d76))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Enhancements
|
|
13
|
+
|
|
14
|
+
* **search-modal:** update blur, mark, links ([#309](https://github.com/mdn/fred/issues/309)) ([8ce49b3](https://github.com/mdn/fred/commit/8ce49b3b4f508ce0ba735e4c9d0b3f4155234b3c))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Miscellaneous
|
|
18
|
+
|
|
19
|
+
* **deps-dev:** bump the dev group with 2 updates ([#307](https://github.com/mdn/fred/issues/307)) ([48f89f3](https://github.com/mdn/fred/commit/48f89f3b1410bf7cb8d18d73a00cad6c396a012a))
|
|
20
|
+
* **search-modal:** add styles ([#304](https://github.com/mdn/fred/issues/304)) ([4e08eff](https://github.com/mdn/fred/commit/4e08effaf9a8080cea33c0b61ce44f509facee64))
|
|
21
|
+
|
|
22
|
+
## [0.0.4](https://github.com/mdn/fred/compare/v0.0.3...v0.0.4) (2025-06-30)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Miscellaneous
|
|
26
|
+
|
|
27
|
+
* **deps-dev:** bump @mdn/browser-compat-data from 6.0.26 to 6.0.27 ([#302](https://github.com/mdn/fred/issues/302)) ([81f9a32](https://github.com/mdn/fred/commit/81f9a32abca921d42889a8538b7620409f540d00))
|
|
28
|
+
* **deps-dev:** bump @mdn/rari from 0.1.44 to 0.1.45 ([#297](https://github.com/mdn/fred/issues/297)) ([0766a79](https://github.com/mdn/fred/commit/0766a794231306e05b3216278576c3296d41b071))
|
|
29
|
+
* **deps-dev:** bump the dev group with 9 updates ([#303](https://github.com/mdn/fred/issues/303)) ([62d68ed](https://github.com/mdn/fred/commit/62d68edbb3fa1ed6caf27a7040f321f5dde21f02))
|
|
30
|
+
* **homepage-hero:** remove link underline on hover ([c92a8b8](https://github.com/mdn/fred/commit/c92a8b80b9e1c60e478a4007d8718f02a26269d5))
|
|
@@ -35,7 +35,7 @@ const STATS = [
|
|
|
35
35
|
|
|
36
36
|
export class Advertising extends ServerComponent {
|
|
37
37
|
/**
|
|
38
|
-
* @param {import("@fred").Context<import("@rari").
|
|
38
|
+
* @param {import("@fred").Context<import("@rari").SPAPage>} context
|
|
39
39
|
* @returns {import("@lit").TemplateResult}
|
|
40
40
|
*/
|
|
41
41
|
render(context) {
|
|
@@ -60,7 +60,7 @@ function PostPreview(context, blogMeta) {
|
|
|
60
60
|
export class BlogIndex extends ServerComponent {
|
|
61
61
|
/**
|
|
62
62
|
*
|
|
63
|
-
* @param {import("@fred").Context<import("@rari").
|
|
63
|
+
* @param {import("@fred").Context<import("@rari").BlogPostPage>} context
|
|
64
64
|
* @returns {import("@lit").TemplateResult}
|
|
65
65
|
*/
|
|
66
66
|
render(context) {
|
|
@@ -74,7 +74,7 @@ function PrevNextLinks(context, { blogMeta }) {
|
|
|
74
74
|
export class BlogPost extends ServerComponent {
|
|
75
75
|
/**
|
|
76
76
|
*
|
|
77
|
-
* @param {import("@fred").Context<import("@rari").
|
|
77
|
+
* @param {import("@fred").Context<import("@rari").BlogPostPage>} context
|
|
78
78
|
* @returns {import("@lit").TemplateResult}
|
|
79
79
|
*/
|
|
80
80
|
render(context) {
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
:root {
|
|
17
17
|
--color-white: hsl(0deg 0% 100%);
|
|
18
18
|
--color-white-alpha-25: hsl(0deg 0% 100% / 25%);
|
|
19
|
+
--color-white-alpha-75: hsl(0deg 0% 100% / 75%);
|
|
19
20
|
|
|
20
21
|
--color-black: hsl(0deg 0% 0%);
|
|
21
22
|
--color-black-alpha-25: hsl(0deg 0% 0% / 25%);
|
|
23
|
+
--color-black-alpha-75: hsl(0deg 0% 0% / 75%);
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
/* Gray */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { html } from "lit";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @param {import("@fred").Context<import("@rari").
|
|
4
|
+
* @param {import("@fred").Context<import("@rari").SPAPage>} _context
|
|
5
5
|
* @returns {import("@lit").TemplateResult}
|
|
6
6
|
*/
|
|
7
7
|
export function Feedback(_context) {
|
|
@@ -15,7 +15,7 @@ import { Feedback } from "./feedback.js";
|
|
|
15
15
|
|
|
16
16
|
export class ObservatoryLanding extends ServerComponent {
|
|
17
17
|
/**
|
|
18
|
-
* @param {import("@fred").Context<import("@rari").
|
|
18
|
+
* @param {import("@fred").Context<import("@rari").SPAPage>} context
|
|
19
19
|
* @returns {import("@lit").TemplateResult}
|
|
20
20
|
*/
|
|
21
21
|
render(context) {
|
|
@@ -6,7 +6,7 @@ import { ServerComponent } from "../server/index.js";
|
|
|
6
6
|
|
|
7
7
|
export class ObservatoryResults extends ServerComponent {
|
|
8
8
|
/**
|
|
9
|
-
* @param {import("@fred").Context<import("@rari").
|
|
9
|
+
* @param {import("@fred").Context<import("@rari").SPAPage>} context
|
|
10
10
|
* @returns {import("@lit").TemplateResult}
|
|
11
11
|
*/
|
|
12
12
|
render(context) {
|
|
@@ -35,9 +35,16 @@
|
|
|
35
35
|
border: 1px solid var(--color-border-primary);
|
|
36
36
|
border-radius: var(--border-radius);
|
|
37
37
|
|
|
38
|
+
&:has(> .placement-link:focus-visible) {
|
|
39
|
+
outline: auto;
|
|
40
|
+
}
|
|
41
|
+
|
|
38
42
|
.placement-link {
|
|
43
|
+
display: block;
|
|
44
|
+
|
|
39
45
|
width: 100%;
|
|
40
46
|
height: 100%;
|
|
47
|
+
|
|
41
48
|
padding: 0;
|
|
42
49
|
|
|
43
50
|
> img {
|
|
@@ -6,7 +6,7 @@ import { ServerComponent } from "../server/index.js";
|
|
|
6
6
|
|
|
7
7
|
export class ReferenceToc extends ServerComponent {
|
|
8
8
|
/**
|
|
9
|
-
* @param {import("@fred").Context<import("@rari").DocPage | import("@rari").
|
|
9
|
+
* @param {import("@fred").Context<import("@rari").DocPage | import("@rari").BlogPostPage>} context
|
|
10
10
|
*/
|
|
11
11
|
render(context) {
|
|
12
12
|
return html`<nav class="reference-toc">
|
|
@@ -5,11 +5,138 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
dialog {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
padding: 0;
|
|
9
|
+
|
|
10
|
+
background-color: var(--color-background-primary);
|
|
11
|
+
border: 1px solid var(--color-border-primary);
|
|
12
|
+
border-radius: 0.5rem;
|
|
13
|
+
|
|
14
|
+
/* Desktop menu */
|
|
15
|
+
@media (width > 1006px) {
|
|
16
|
+
width: calc(var(--layout-content-max) + 1rem);
|
|
17
|
+
max-height: calc(100% - var(--sticky-header-height) - 2rem);
|
|
18
|
+
margin: calc(var(--sticky-header-height) + 1rem) auto 1rem;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Mobile menu */
|
|
22
|
+
@media (width <= 1006px) {
|
|
23
|
+
width: 100%;
|
|
24
|
+
max-height: calc(100% - 2rem);
|
|
25
|
+
margin: 1rem auto;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&[open] {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&::backdrop {
|
|
34
|
+
background-color: light-dark(
|
|
35
|
+
var(--color-white-alpha-75),
|
|
36
|
+
var(--color-black-alpha-75)
|
|
37
|
+
);
|
|
38
|
+
backdrop-filter: blur(3px);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
progress {
|
|
43
|
+
width: calc(100% - 2rem);
|
|
44
|
+
margin: 0 auto 0.5rem;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
form {
|
|
48
|
+
display: grid;
|
|
49
|
+
|
|
50
|
+
grid-template-columns: min-content 1fr;
|
|
51
|
+
|
|
52
|
+
gap: 0.5rem;
|
|
53
|
+
place-items: center;
|
|
54
|
+
|
|
55
|
+
padding: 1rem;
|
|
56
|
+
|
|
57
|
+
font-size: var(--font-size-large);
|
|
58
|
+
|
|
59
|
+
&::before {
|
|
60
|
+
width: 1em;
|
|
61
|
+
height: 1em;
|
|
62
|
+
|
|
63
|
+
content: "";
|
|
64
|
+
|
|
65
|
+
background-color: var(--color-border-secondary);
|
|
66
|
+
|
|
67
|
+
mask-image: url("../icon/search.svg");
|
|
68
|
+
mask-size: contain;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
input {
|
|
73
|
+
width: 100%;
|
|
74
|
+
|
|
75
|
+
padding: 0;
|
|
76
|
+
margin: 0;
|
|
77
|
+
|
|
78
|
+
font-size: inherit;
|
|
79
|
+
|
|
80
|
+
outline: none;
|
|
81
|
+
|
|
82
|
+
background-color: transparent;
|
|
83
|
+
border: none;
|
|
84
|
+
|
|
85
|
+
&::placeholder {
|
|
86
|
+
color: var(--color-text-secondary);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
ul {
|
|
91
|
+
padding: 0;
|
|
92
|
+
margin: 0;
|
|
93
|
+
|
|
94
|
+
overflow: auto;
|
|
95
|
+
|
|
96
|
+
overscroll-behavior: contain;
|
|
97
|
+
|
|
98
|
+
&:has(li) {
|
|
99
|
+
border-top: 1px solid var(--color-border-primary);
|
|
100
|
+
}
|
|
11
101
|
}
|
|
12
102
|
|
|
13
103
|
li[data-selected] {
|
|
14
|
-
background:
|
|
104
|
+
background: var(--color-background-blue);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
li {
|
|
108
|
+
list-style-type: none;
|
|
109
|
+
|
|
110
|
+
&:not([data-selected]):hover {
|
|
111
|
+
background-color: var(--color-background-secondary);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
li > * {
|
|
116
|
+
width: 100%;
|
|
117
|
+
padding: 0.5rem 1.5rem;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
a {
|
|
121
|
+
display: grid;
|
|
122
|
+
color: var(--color-link-normal);
|
|
123
|
+
text-decoration: none;
|
|
124
|
+
|
|
125
|
+
&:visited {
|
|
126
|
+
color: var(--color-link-visited);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.title {
|
|
131
|
+
font-size: var(--font-size-large);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.slug {
|
|
135
|
+
font-size: var(--font-size-small);
|
|
136
|
+
color: var(--color-text-secondary);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
mark {
|
|
140
|
+
color: var(--color-text-primary);
|
|
141
|
+
background-color: light-dark(var(--color-yellow-80), var(--color-yellow-20));
|
|
15
142
|
}
|
|
@@ -64,27 +64,46 @@ export class MDNSearchModal extends L10nMixin(LitElement) {
|
|
|
64
64
|
|
|
65
65
|
/** @param {KeyboardEvent} event */
|
|
66
66
|
_keydown(event) {
|
|
67
|
-
const results = (this._queryIndex.value?.length || 0) + 1;
|
|
68
67
|
switch (event.key) {
|
|
69
68
|
case "ArrowUp": {
|
|
70
69
|
event.preventDefault();
|
|
71
|
-
|
|
72
|
-
this._selected = value < 0 ? results + value : value;
|
|
70
|
+
this._select(this._selected - 1);
|
|
73
71
|
break;
|
|
74
72
|
}
|
|
75
73
|
case "ArrowDown":
|
|
76
74
|
event.preventDefault();
|
|
77
|
-
this.
|
|
75
|
+
this._select(this._selected + 1);
|
|
78
76
|
break;
|
|
79
77
|
default:
|
|
80
78
|
return;
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
81
|
|
|
82
|
+
/** @returns {HTMLElement|null} */
|
|
83
|
+
_getSelectedItem() {
|
|
84
|
+
return this.shadowRoot?.querySelector("[data-selected] a") ?? null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** @param {number} index */
|
|
88
|
+
_select(index) {
|
|
89
|
+
const results = (this._queryIndex.value?.length || 0) + 1;
|
|
90
|
+
const value = index % results;
|
|
91
|
+
this._selected = value < 0 ? results + index : value;
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
const item = this._getSelectedItem();
|
|
94
|
+
if (item instanceof HTMLElement) {
|
|
95
|
+
item.scrollIntoView({
|
|
96
|
+
behavior: "smooth",
|
|
97
|
+
block: "nearest",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}, 0);
|
|
101
|
+
}
|
|
102
|
+
|
|
84
103
|
/** @param {SubmitEvent} event */
|
|
85
104
|
_submit(event) {
|
|
86
105
|
event.preventDefault();
|
|
87
|
-
const item = this.
|
|
106
|
+
const item = this._getSelectedItem();
|
|
88
107
|
if (item instanceof HTMLElement) {
|
|
89
108
|
item.click();
|
|
90
109
|
}
|
|
@@ -157,6 +176,12 @@ export class MDNSearchModal extends L10nMixin(LitElement) {
|
|
|
157
176
|
document.removeEventListener("keydown", this._globalKeydown);
|
|
158
177
|
}
|
|
159
178
|
|
|
179
|
+
_renderLoadingSearchIndex() {
|
|
180
|
+
return html`<progress
|
|
181
|
+
aria-label=${this.l10n`Loading search index…`}
|
|
182
|
+
></progress>`;
|
|
183
|
+
}
|
|
184
|
+
|
|
160
185
|
render() {
|
|
161
186
|
const siteSearchIndex = this._queryIndex.value?.length || 0;
|
|
162
187
|
return html`
|
|
@@ -167,24 +192,32 @@ export class MDNSearchModal extends L10nMixin(LitElement) {
|
|
|
167
192
|
.value=${this._query}
|
|
168
193
|
autofocus
|
|
169
194
|
@input=${this._input}
|
|
195
|
+
placeholder=${this.l10n`Search`}
|
|
196
|
+
aria-label=${this.l10n`Search`}
|
|
170
197
|
/>
|
|
171
198
|
</form>
|
|
199
|
+
${this._queryIndex.render({
|
|
200
|
+
initial: this._renderLoadingSearchIndex.bind(this),
|
|
201
|
+
pending: this._renderLoadingSearchIndex.bind(this),
|
|
202
|
+
})}
|
|
172
203
|
<ul>
|
|
173
204
|
${this._queryIndex.render({
|
|
174
|
-
initial: () => html`<progress></progress>`,
|
|
175
|
-
pending: () => html`<progress></progress>`,
|
|
176
205
|
complete: (results) =>
|
|
177
206
|
results?.map(
|
|
178
207
|
({ title, url }, i) => html`
|
|
179
208
|
<li ?data-selected=${this._selected === i} data-result=${i}>
|
|
180
|
-
<a href=${url}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
209
|
+
<a href=${url}
|
|
210
|
+
><span class="title"
|
|
211
|
+
>${HighlightMatch(title, this._query)}</span
|
|
212
|
+
>
|
|
213
|
+
<span class="slug"
|
|
214
|
+
>${url
|
|
215
|
+
.split("/")
|
|
216
|
+
.slice(1)
|
|
217
|
+
.filter((p) => !["docs", this.locale].includes(p))
|
|
218
|
+
.join(" / ")}</span
|
|
219
|
+
>
|
|
220
|
+
</a>
|
|
188
221
|
</li>
|
|
189
222
|
`,
|
|
190
223
|
),
|
|
@@ -196,15 +229,17 @@ export class MDNSearchModal extends L10nMixin(LitElement) {
|
|
|
196
229
|
>
|
|
197
230
|
<a
|
|
198
231
|
href=${`/${this.locale}/search?${new URLSearchParams({ q: this._query })}`}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
232
|
+
><span class="title"
|
|
233
|
+
>${this.l10n.raw({
|
|
234
|
+
id: "search-modal-site-search",
|
|
235
|
+
args: {
|
|
236
|
+
query: this._query,
|
|
237
|
+
},
|
|
238
|
+
elements: {
|
|
239
|
+
query: { tag: "code" },
|
|
240
|
+
},
|
|
241
|
+
})}</span
|
|
242
|
+
></a
|
|
208
243
|
>
|
|
209
244
|
</li>`
|
|
210
245
|
: nothing}
|
|
@@ -215,7 +250,7 @@ export class MDNSearchModal extends L10nMixin(LitElement) {
|
|
|
215
250
|
|
|
216
251
|
updated() {
|
|
217
252
|
if (this._shiftFocus) {
|
|
218
|
-
const selected = this.
|
|
253
|
+
const selected = this._getSelectedItem();
|
|
219
254
|
if (selected instanceof HTMLElement) {
|
|
220
255
|
selected.focus();
|
|
221
256
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const __webpack_ids__=["1739"];export const __webpack_modules__={73594:function(e,a,o){o.r(a),o.d(a,{MDNHomepageSearch:()=>MDNHomepageSearch});var r=o(14703),t=o(69535),n=o(39187),s=o(8036);let MDNHomepageSearch=class MDNHomepageSearch extends(0,t.q)(r.oi){static styles=s.Z;_showModal(){let e=document.querySelector("#search");e instanceof n.MDNSearchModal?e.showModal():console.error("MDNSearchModal not found!")}render(){return(0,r.dy)`<button
|
|
2
|
+
class="mdn-homepage-search"
|
|
3
|
+
title=${this.l10n`Search the site`}
|
|
4
|
+
@click=${this._showModal}
|
|
5
|
+
>
|
|
6
|
+
${this.l10n`Search`}
|
|
7
|
+
</button>`}};customElements.define("mdn-homepage-search",MDNHomepageSearch)},8036:function(e,a,o){o.d(a,{Z:()=>p});var r=o(14703),t=o(8081),n=o.n(t),s=o(23645),c=o.n(s),i=o(61667),l=o.n(i),d=new o.U(o(99454)),m=c()(n()),h=l()(d);m.push([e.id,`.mdn-homepage-search{border-color:var(--color-border-primary);border-radius:2em;border-style:solid;display:flex;font-size:var(--font-size-large);gap:.5ch;justify-content:center;margin:0 auto;padding:1em}.mdn-homepage-search:after{background-color:var(--color-text-primary);content:"";display:inline-block;flex-shrink:0;height:1.1em;-webkit-mask-image:url(${h});mask-image:url(${h});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.1em}button{cursor:pointer}`,""]);let p=(0,r.iv)([m.toString()])}};
|
|
8
|
+
//# sourceMappingURL=1739.1435a6d3f1a2dd88.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1739.1435a6d3f1a2dd88.js","sources":["webpack://@mdn/fred/./components/homepage-search/element.js","webpack://@mdn/fred/./components/homepage-search/element.css"],"sourcesContent":["import { LitElement, html } from \"lit\";\n\nimport { L10nMixin } from \"../../l10n/mixin.js\";\nimport { MDNSearchModal } from \"../search-modal/element.js\";\n\nimport styles from \"./element.css?lit\";\n\nexport class MDNHomepageSearch extends L10nMixin(LitElement) {\n static styles = styles;\n\n _showModal() {\n const search = document.querySelector(\"#search\");\n if (search instanceof MDNSearchModal) {\n search.showModal();\n } else {\n console.error(\"MDNSearchModal not found!\");\n }\n }\n\n render() {\n return html`<button\n class=\"mdn-homepage-search\"\n title=${this.l10n`Search the site`}\n @click=${this._showModal}\n >\n ${this.l10n`Search`}\n </button>`;\n }\n}\ncustomElements.define(\"mdn-homepage-search\", MDNHomepageSearch);\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../icon/search.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.mdn-homepage-search{border-color:var(--color-border-primary);border-radius:2em;border-style:solid;display:flex;font-size:var(--font-size-large);gap:.5ch;justify-content:center;margin:0 auto;padding:1em}.mdn-homepage-search:after{background-color:var(--color-text-primary);content:\"\";display:inline-block;flex-shrink:0;height:1.1em;-webkit-mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.1em}button{cursor:pointer}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["MDNHomepageSearch","s","document","console","customElements"],"mappings":"qMAOO,IAAMA,kBAAN,MAAMA,yBAA0B,QAAU,IAAU,EACzD,OAAO,OAASC,EAAA,CAAM,AAAC,AAEvB,aAAa,CACX,IAAM,EAASC,SAAS,aAAa,CAAC,UAClC,cAAkB,gBAAc,CAClC,EAAO,SAAS,GAEhBC,QAAQ,KAAK,CAAC,4BAElB,CAEA,QAAS,CACP,MAAO,QAAI,CAAC;;YAEJ,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC5B,EAAE,IAAI,CAAC,UAAU,CAAC;;MAEzB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACb,CAAC,AACZ,CACF,EACAC,eAAe,MAAM,CAAC,sBAAuBJ,kB,kHCxBzC,EAAgC,kBAChC,EAA0B,IAA4B,KACtD,EAAqC,IAAgC,GAEzE,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,CAAC,mWAAmW,EAAE,EAAmC,iBAAiB,EAAE,EAAmC,oIAAoI,CAAC,CAAE,GAAG,EAElnB,MAAe,SAAI,CAAC,EAAwB,QAAQ,GAAG,C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const __webpack_ids__=["2776"];export const __webpack_modules__={61667:function(e){e.exports=function(e,t){return(t||(t={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes))?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e}},99454:function(e,t,r){e.exports=r.p+"search.5dd31cbeea7d1af9.svg"},39187:function(e,t,r){r.r(t),r.d(t,{MDNSearchModal:()=>MDNSearchModal,splitQuery:()=>s});var o=r(35470),a=r(14703),i=r(69535),l=r(1613);let MDNSearchModal=class MDNSearchModal extends(0,i.q)(a.oi){static styles=l.Z;static properties={_index:{state:!0},_query:{state:!0},_selected:{state:!0},_shiftFocus:{state:!0}};constructor(){super(),this._index=void 0,this._query="",this._selected=0,this._shiftFocus=!1}async _loadIndex(){this._index||(this._index=this._fetchIndex())}async _fetchIndex(){let e=await fetch(`/${this.locale}/search-index.json`),t=await e.json();return{flex:t.map(({title:e,url:t},r)=>({index:r,title:e.toLowerCase(),slugTail:t.split("/").pop()?.toLowerCase()||""})),items:t}}showModal(){this._loadIndex(),this.shadowRoot?.querySelector("dialog")?.showModal(),this.shadowRoot?.querySelector("input")?.select()}_input({target:e}){e instanceof HTMLInputElement&&(this._query=e.value)}_keydown(e){switch(e.key){case"ArrowUp":e.preventDefault(),this._select(this._selected-1);break;case"ArrowDown":e.preventDefault(),this._select(this._selected+1);break;default:return}}_getSelectedItem(){return this.shadowRoot?.querySelector("[data-selected] a")??null}_select(e){let t=(this._queryIndex.value?.length||0)+1,r=e%t;this._selected=r<0?t+e:r,setTimeout(()=>{let e=this._getSelectedItem();e instanceof HTMLElement&&e.scrollIntoView({behavior:"smooth",block:"nearest"})},0)}_submit(e){e.preventDefault();let t=this._getSelectedItem();t instanceof HTMLElement&&t.click()}_focus({target:e}){if(e instanceof HTMLElement){let t=e.closest("[data-result]");if(t instanceof HTMLElement){let e=Number.parseInt(t.dataset.result||"NaN",10);Number.isNaN(e)||(this._selected=e,this._shiftFocus=!0)}else this._shiftFocus=!1}}_globalKeydown(e){let t=e.composedPath()?.[0]||e.target;if(t instanceof HTMLElement&&(["TEXTAREA","INPUT"].includes(t.tagName)||t.isContentEditable))return;let r=globalThis.getSelection()?.toString(),o=e.key,a=e.ctrlKey||e.metaKey,i="k"===o&&a&&!e.shiftKey;("/"===o&&!a||i)&&(e.preventDefault(),this.showModal(),r&&(this._query=r))}_queryIndex=new o.iQ(this,{args:()=>[this._index,this._query],task:async([e,t])=>{if(e&&t){var r=t,o=await e;let a=r.toLowerCase().trim(),i=s(r);return o.flex.filter(({title:e})=>i.every(t=>e.includes(t))).map(({index:e,title:t,slugTail:r})=>[Number([t,r].includes(a)),e]).sort(([e],[t])=>t-e).map(([e,t])=>t).slice(0,10).map(e=>e&&(o.items||[])[e]).filter(Boolean)}}});connectedCallback(){super.connectedCallback(),this._globalKeydown=this._globalKeydown.bind(this),document.addEventListener("keydown",this._globalKeydown),this._loadIndex=this._loadIndex.bind(this),this.renderRoot.addEventListener("mouseover",this._loadIndex)}disconnectedCallback(){super.disconnectedCallback(),this.renderRoot.removeEventListener("mouseover",this._loadIndex),document.removeEventListener("keydown",this._globalKeydown)}_renderLoadingSearchIndex(){return(0,a.dy)`<progress
|
|
2
|
+
aria-label=${this.l10n`Loading search index…`}
|
|
3
|
+
></progress>`}render(){let e=this._queryIndex.value?.length||0;return(0,a.dy)`
|
|
4
|
+
<dialog @keydown=${this._keydown} @focusin=${this._focus} closedby="any">
|
|
5
|
+
<form @submit=${this._submit}>
|
|
6
|
+
<input
|
|
7
|
+
type="text"
|
|
8
|
+
.value=${this._query}
|
|
9
|
+
autofocus
|
|
10
|
+
@input=${this._input}
|
|
11
|
+
placeholder=${this.l10n`Search`}
|
|
12
|
+
aria-label=${this.l10n`Search`}
|
|
13
|
+
/>
|
|
14
|
+
</form>
|
|
15
|
+
${this._queryIndex.render({initial:this._renderLoadingSearchIndex.bind(this),pending:this._renderLoadingSearchIndex.bind(this)})}
|
|
16
|
+
<ul>
|
|
17
|
+
${this._queryIndex.render({complete:e=>e?.map(({title:e,url:t},r)=>(0,a.dy)`
|
|
18
|
+
<li ?data-selected=${this._selected===r} data-result=${r}>
|
|
19
|
+
<a href=${t}
|
|
20
|
+
><span class="title"
|
|
21
|
+
>${(function(e,t){let r=s(t),o=r.map(e=>e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)).map(e=>`(${e})`).join("|");return e.split(RegExp(o,"gi")).filter(Boolean).map(e=>r.includes(e.toLowerCase())?(0,a.dy)`<mark>${e}</mark>`:e)})(e,this._query)}</span
|
|
22
|
+
>
|
|
23
|
+
<span class="slug"
|
|
24
|
+
>${t.split("/").slice(1).filter(e=>!["docs",this.locale].includes(e)).join(" / ")}</span
|
|
25
|
+
>
|
|
26
|
+
</a>
|
|
27
|
+
</li>
|
|
28
|
+
`)})}
|
|
29
|
+
${this._query?(0,a.dy)`<li
|
|
30
|
+
?data-selected=${this._selected===e}
|
|
31
|
+
data-result=${e}
|
|
32
|
+
>
|
|
33
|
+
<a
|
|
34
|
+
href=${`/${this.locale}/search?${new URLSearchParams({q:this._query})}`}
|
|
35
|
+
><span class="title"
|
|
36
|
+
>${this.l10n.raw({id:"search-modal-site-search",args:{query:this._query},elements:{query:{tag:"code"}}})}</span
|
|
37
|
+
></a
|
|
38
|
+
>
|
|
39
|
+
</li>`:a.Ld}
|
|
40
|
+
</ul>
|
|
41
|
+
</dialog>
|
|
42
|
+
`}updated(){if(this._shiftFocus){let e=this._getSelectedItem();e instanceof HTMLElement&&e.focus()}}};function s(e){return(e=e.trim().toLowerCase()).startsWith(".")||e.endsWith(".")?e.split(/[ ,]+/):e.split(/[ ,.]+/)}customElements.define("mdn-search-modal",MDNSearchModal)},1613:function(e,t,r){r.d(t,{Z:()=>g});var o=r(14703),a=r(8081),i=r.n(a),l=r(23645),s=r.n(l),n=r(61667),d=r.n(n),c=new r.U(r(99454)),h=s()(i()),u=d()(c);h.push([e.id,`*,:after,:before{box-sizing:border-box}dialog{background-color:var(--color-background-primary);border:1px solid var(--color-border-primary);border-radius:.5rem;padding:0}@media (min-width:1006.02px){dialog{margin:calc(var(--sticky-header-height) + 1rem) auto 1rem;max-height:calc(100% - var(--sticky-header-height) - 2rem);width:calc(var(--layout-content-max) + 1rem)}}@media (max-width:1006px){dialog{margin:1rem auto;max-height:calc(100% - 2rem);width:100%}}dialog[open]{display:flex;flex-direction:column}dialog::backdrop{--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--color-black-alpha-75);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background-color:var(--csstools-light-dark-toggle--1,var(--color-white-alpha-75))}@supports (color:light-dark(red,red)){dialog::backdrop{background-color:light-dark(var(--color-white-alpha-75),var(--color-black-alpha-75))}}progress{margin:0 auto .5rem;width:calc(100% - 2rem)}form{display:grid;font-size:var(--font-size-large);gap:.5rem;grid-template-columns:min-content 1fr;padding:1rem;place-items:center}form:before{background-color:var(--color-border-secondary);content:"";height:1em;-webkit-mask-image:url(${u});mask-image:url(${u});-webkit-mask-size:contain;mask-size:contain;width:1em}input{background-color:initial;border:none;font-size:inherit;margin:0;outline:none;padding:0;width:100%}input::placeholder{color:var(--color-text-secondary)}ul{margin:0;overflow:auto;overscroll-behavior:contain;padding:0}ul:has(li){border-top:1px solid var(--color-border-primary)}li[data-selected]{background:var(--color-background-blue)}li{list-style-type:none}li:not([data-selected]):hover{background-color:var(--color-background-secondary)}li>*{padding:.5rem 1.5rem;width:100%}a{color:var(--color-link-normal);display:grid;-webkit-text-decoration:none;text-decoration:none}a:visited{color:var(--color-link-visited)}.title{font-size:var(--font-size-large)}.slug{color:var(--color-text-secondary);font-size:var(--font-size-small)}mark{color:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--color-yellow-20);background-color:var(--csstools-light-dark-toggle--0,var(--color-yellow-80))}@supports (color:light-dark(red,red)){mark{background-color:light-dark(var(--color-yellow-80),var(--color-yellow-20))}}`,""]);let g=(0,o.iv)([h.toString()])}};
|
|
43
|
+
//# sourceMappingURL=2776.435ecffa5f77c7eb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2776.435ecffa5f77c7eb.js","sources":["webpack://@mdn/fred/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@mdn/fred/./components/search-modal/element.js","webpack://@mdn/fred/./components/search-modal/element.css"],"sourcesContent":["\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","import { Task } from \"@lit/task\";\nimport { LitElement, html, nothing } from \"lit\";\n\nimport { L10nMixin } from \"../../l10n/mixin.js\";\n\nimport styles from \"./element.css?lit\";\n\nexport class MDNSearchModal extends L10nMixin(LitElement) {\n static styles = styles;\n\n static properties = {\n _index: { state: true },\n _query: { state: true },\n _selected: { state: true },\n _shiftFocus: { state: true },\n };\n\n constructor() {\n super();\n /** @type {Promise<import(\"./types.js\").SearchIndex> | undefined} */\n this._index = undefined;\n this._query = \"\";\n this._selected = 0;\n this._shiftFocus = false;\n }\n\n async _loadIndex() {\n if (this._index) {\n return;\n }\n\n this._index = this._fetchIndex();\n }\n\n async _fetchIndex() {\n const res = await fetch(`/${this.locale}/search-index.json`);\n /** @type {import(\"./types.js\").SearchIndexItem[]} */\n const items = await res.json();\n /** @type {import(\"./types.js\").SearchIndexFlexItem[]} */\n const flex = items.map(({ title, url }, index) => ({\n index,\n title: title.toLowerCase(),\n slugTail: url.split(\"/\").pop()?.toLowerCase() || \"\",\n }));\n\n return {\n flex,\n items,\n };\n }\n\n showModal() {\n this._loadIndex();\n this.shadowRoot?.querySelector(\"dialog\")?.showModal();\n this.shadowRoot?.querySelector(\"input\")?.select();\n }\n\n /** @param {InputEvent} event */\n _input({ target }) {\n if (target instanceof HTMLInputElement) {\n this._query = target.value;\n }\n }\n\n /** @param {KeyboardEvent} event */\n _keydown(event) {\n switch (event.key) {\n case \"ArrowUp\": {\n event.preventDefault();\n this._select(this._selected - 1);\n break;\n }\n case \"ArrowDown\":\n event.preventDefault();\n this._select(this._selected + 1);\n break;\n default:\n return;\n }\n }\n\n /** @returns {HTMLElement|null} */\n _getSelectedItem() {\n return this.shadowRoot?.querySelector(\"[data-selected] a\") ?? null;\n }\n\n /** @param {number} index */\n _select(index) {\n const results = (this._queryIndex.value?.length || 0) + 1;\n const value = index % results;\n this._selected = value < 0 ? results + index : value;\n setTimeout(() => {\n const item = this._getSelectedItem();\n if (item instanceof HTMLElement) {\n item.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, 0);\n }\n\n /** @param {SubmitEvent} event */\n _submit(event) {\n event.preventDefault();\n const item = this._getSelectedItem();\n if (item instanceof HTMLElement) {\n item.click();\n }\n }\n\n /** @param {FocusEvent} event */\n _focus({ target }) {\n if (target instanceof HTMLElement) {\n const focused = target.closest(\"[data-result]\");\n if (focused instanceof HTMLElement) {\n const index = Number.parseInt(focused.dataset.result || \"NaN\", 10);\n if (!Number.isNaN(index)) {\n this._selected = index;\n this._shiftFocus = true;\n }\n } else {\n this._shiftFocus = false;\n }\n }\n }\n\n /** @param {KeyboardEvent} event */\n _globalKeydown(event) {\n const target = event.composedPath()?.[0] || event.target;\n const isTextField =\n target instanceof HTMLElement &&\n ([\"TEXTAREA\", \"INPUT\"].includes(target.tagName) ||\n target.isContentEditable);\n\n if (isTextField) {\n return;\n }\n\n const selection = globalThis.getSelection()?.toString();\n const keyPressed = event.key;\n const ctrlOrMetaPressed = event.ctrlKey || event.metaKey;\n const isSlash = keyPressed === \"/\" && !ctrlOrMetaPressed;\n const isCtrlK = keyPressed === \"k\" && ctrlOrMetaPressed && !event.shiftKey;\n\n if (isSlash || isCtrlK) {\n event.preventDefault();\n this.showModal();\n if (selection) {\n this._query = selection;\n }\n }\n }\n\n _queryIndex = new Task(this, {\n args: () => [this._index, this._query],\n task: async ([index, query]) => {\n if (!index || !query) {\n return;\n }\n return quickSearch(query, await index);\n },\n });\n\n connectedCallback() {\n super.connectedCallback();\n this._globalKeydown = this._globalKeydown.bind(this);\n document.addEventListener(\"keydown\", this._globalKeydown);\n this._loadIndex = this._loadIndex.bind(this);\n this.renderRoot.addEventListener(\"mouseover\", this._loadIndex);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.renderRoot.removeEventListener(\"mouseover\", this._loadIndex);\n document.removeEventListener(\"keydown\", this._globalKeydown);\n }\n\n _renderLoadingSearchIndex() {\n return html`<progress\n aria-label=${this.l10n`Loading search index…`}\n ></progress>`;\n }\n\n render() {\n const siteSearchIndex = this._queryIndex.value?.length || 0;\n return html`\n <dialog @keydown=${this._keydown} @focusin=${this._focus} closedby=\"any\">\n <form @submit=${this._submit}>\n <input\n type=\"text\"\n .value=${this._query}\n autofocus\n @input=${this._input}\n placeholder=${this.l10n`Search`}\n aria-label=${this.l10n`Search`}\n />\n </form>\n ${this._queryIndex.render({\n initial: this._renderLoadingSearchIndex.bind(this),\n pending: this._renderLoadingSearchIndex.bind(this),\n })}\n <ul>\n ${this._queryIndex.render({\n complete: (results) =>\n results?.map(\n ({ title, url }, i) => html`\n <li ?data-selected=${this._selected === i} data-result=${i}>\n <a href=${url}\n ><span class=\"title\"\n >${HighlightMatch(title, this._query)}</span\n >\n <span class=\"slug\"\n >${url\n .split(\"/\")\n .slice(1)\n .filter((p) => ![\"docs\", this.locale].includes(p))\n .join(\" / \")}</span\n >\n </a>\n </li>\n `,\n ),\n })}\n ${this._query\n ? html`<li\n ?data-selected=${this._selected === siteSearchIndex}\n data-result=${siteSearchIndex}\n >\n <a\n href=${`/${this.locale}/search?${new URLSearchParams({ q: this._query })}`}\n ><span class=\"title\"\n >${this.l10n.raw({\n id: \"search-modal-site-search\",\n args: {\n query: this._query,\n },\n elements: {\n query: { tag: \"code\" },\n },\n })}</span\n ></a\n >\n </li>`\n : nothing}\n </ul>\n </dialog>\n `;\n }\n\n updated() {\n if (this._shiftFocus) {\n const selected = this._getSelectedItem();\n if (selected instanceof HTMLElement) {\n selected.focus();\n }\n }\n }\n}\n\ncustomElements.define(\"mdn-search-modal\", MDNSearchModal);\n\n/**\n * @param {string} input\n * @param {import(\"./types.js\").SearchIndex} index\n * @returns {import(\"./types.js\").SearchResultItem[]}\n */\nfunction quickSearch(input, index) {\n const inputValueLC = input.toLowerCase().trim();\n const q = splitQuery(input);\n const indexResults = index.flex\n .filter(({ title }) => q.every((q) => title.includes(q)))\n .map(({ index, title, slugTail }) => {\n const exact = Number([title, slugTail].includes(inputValueLC));\n return /** @type {const} */ ([exact, index]);\n })\n .sort(([aExact], [bExact]) => bExact - aExact) // Boost exact matches.\n .map(([_, i]) => i)\n .slice(0, 10);\n\n return indexResults.map((i) => i && (index.items || [])[i]).filter(Boolean);\n}\n\n/**\n * Used by quicksearch and sidebar filters.\n * @param {string} term\n * @returns {string[]}\n */\nexport function splitQuery(term) {\n term = term.trim().toLowerCase();\n return term.startsWith(\".\") || term.endsWith(\".\")\n ? // Dot is probably meaningful.\n term.split(/[ ,]+/)\n : // Dot is probably just a word separator.\n term.split(/[ ,.]+/);\n}\n\n/**\n * @param {string} title\n * @param {string} query\n */\nfunction HighlightMatch(title, query) {\n // Split on highlight term and include term into parts, ignore case.\n const words = splitQuery(query);\n // $& means the whole matched string\n const regexWords = words.map((s) =>\n s.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`),\n );\n const regex = regexWords.map((word) => `(${word})`).join(\"|\");\n const parts = title.split(new RegExp(regex, \"gi\"));\n return parts\n .filter(Boolean)\n .map((part) =>\n words.includes(part.toLowerCase()) ? html`<mark>${part}</mark>` : part,\n );\n}\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../icon/search.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `*,:after,:before{box-sizing:border-box}dialog{background-color:var(--color-background-primary);border:1px solid var(--color-border-primary);border-radius:.5rem;padding:0}@media (min-width:1006.02px){dialog{margin:calc(var(--sticky-header-height) + 1rem) auto 1rem;max-height:calc(100% - var(--sticky-header-height) - 2rem);width:calc(var(--layout-content-max) + 1rem)}}@media (max-width:1006px){dialog{margin:1rem auto;max-height:calc(100% - 2rem);width:100%}}dialog[open]{display:flex;flex-direction:column}dialog::backdrop{--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--color-black-alpha-75);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background-color:var(--csstools-light-dark-toggle--1,var(--color-white-alpha-75))}@supports (color:light-dark(red,red)){dialog::backdrop{background-color:light-dark(var(--color-white-alpha-75),var(--color-black-alpha-75))}}progress{margin:0 auto .5rem;width:calc(100% - 2rem)}form{display:grid;font-size:var(--font-size-large);gap:.5rem;grid-template-columns:min-content 1fr;padding:1rem;place-items:center}form:before{background-color:var(--color-border-secondary);content:\"\";height:1em;-webkit-mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});mask-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});-webkit-mask-size:contain;mask-size:contain;width:1em}input{background-color:initial;border:none;font-size:inherit;margin:0;outline:none;padding:0;width:100%}input::placeholder{color:var(--color-text-secondary)}ul{margin:0;overflow:auto;overscroll-behavior:contain;padding:0}ul:has(li){border-top:1px solid var(--color-border-primary)}li[data-selected]{background:var(--color-background-blue)}li{list-style-type:none}li:not([data-selected]):hover{background-color:var(--color-background-secondary)}li>*{padding:.5rem 1.5rem;width:100%}a{color:var(--color-link-normal);display:grid;-webkit-text-decoration:none;text-decoration:none}a:visited{color:var(--color-link-visited)}.title{font-size:var(--font-size-large)}.slug{color:var(--color-text-secondary);font-size:var(--font-size-small)}mark{color:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--color-yellow-20);background-color:var(--csstools-light-dark-toggle--0,var(--color-yellow-80))}@supports (color:light-dark(red,red)){mark{background-color:light-dark(var(--color-yellow-80),var(--color-yellow-20))}}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["String","MDNSearchModal","fetch","HTMLInputElement","e","setTimeout","HTMLElement","Number","t","globalThis","i","s","Boolean","document","RegExp","URLSearchParams","customElements"],"mappings":"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"}
|