From 3fbf959b302a16f769a020419699470795b8f023 Mon Sep 17 00:00:00 2001 From: Band Cap Date: Fri, 27 Oct 2023 22:04:41 +0800 Subject: [PATCH] init --- .changeset/config.json | 14 + .editorconfig | 3 + .eslintrc.cjs | 250 + .github/workflows/lint.yml | 38 + .github/workflows/nextjs-bundle-analysis.yml | 121 + .github/workflows/release.yml | 43 + .github/workflows/test.yml | 46 + .gitignore | 21 + .npmrc | 2 + .prettierignore | 10 + .vscode/settings.json | 3 + CODE_OF_CONDUCT.md | 127 + LICENSE | 21 + README.md | 53 + docs/components/features/index.tsx | 45 + docs/components/features/style.module.css | 135 + docs/components/features/themes-animation.tsx | 120 + docs/components/icons/arrow-right.svg | 11 + docs/components/icons/box.svg | 13 + docs/components/icons/brush.svg | 13 + docs/components/icons/cards.svg | 13 + docs/components/icons/chevron-right.svg | 13 + docs/components/icons/cloud.svg | 13 + docs/components/icons/code.svg | 13 + docs/components/icons/diagram.svg | 5 + docs/components/icons/dropper.svg | 13 + docs/components/icons/file.svg | 13 + docs/components/icons/files.svg | 13 + docs/components/icons/folder-tree.svg | 5 + docs/components/icons/formula.svg | 13 + docs/components/icons/gear.svg | 13 + docs/components/icons/globe.svg | 13 + docs/components/icons/id-card.svg | 8 + docs/components/icons/index.ts | 29 + docs/components/icons/lightning.svg | 7 + docs/components/icons/link.svg | 13 + docs/components/icons/markdown.svg | 6 + docs/components/icons/newsletter.svg | 13 + docs/components/icons/one.svg | 10 + docs/components/icons/picture.svg | 13 + docs/components/icons/rows.svg | 13 + docs/components/icons/stars.svg | 13 + docs/components/icons/switch.svg | 6 + docs/components/icons/table.svg | 13 + docs/components/icons/tailwind.svg | 13 + docs/components/icons/terminal.svg | 30 + docs/components/icons/warning.svg | 13 + docs/components/screenshot/index.jsx | 22 + docs/components/table/index.tsx | 38 + docs/components/table/style.module.css | 13 + docs/components/utils/shadow.jsx | 22 + docs/components/video/index.jsx | 14 + docs/next-env.d.ts | 5 + docs/next.config.mjs | 45 + docs/package.json | 31 + docs/pages/404.mdx | 5 + docs/pages/_app.mdx | 5 + docs/pages/_meta.json | 36 + docs/pages/about.mdx | 51 + docs/pages/api/Inter-SemiBold.otf | Bin 0 -> 270760 bytes docs/pages/api/og.jsx | 101 + docs/pages/docs/_meta.json | 24 + docs/pages/docs/blog-theme.mdx | 14 + docs/pages/docs/blog-theme/_meta.json | 3 + docs/pages/docs/blog-theme/start.mdx | 89 + docs/pages/docs/custom-theme.mdx | 145 + docs/pages/docs/docs-theme.mdx | 32 + docs/pages/docs/docs-theme/_meta.json | 7 + docs/pages/docs/docs-theme/api/_meta.json | 3 + docs/pages/docs/docs-theme/api/use-config.mdx | 60 + docs/pages/docs/docs-theme/built-ins.mdx | 15 + .../pages/docs/docs-theme/built-ins/bleed.mdx | 58 + .../docs/docs-theme/page-configuration.mdx | 424 + docs/pages/docs/docs-theme/start.mdx | 131 + .../docs/docs-theme/theme-configuration.mdx | 828 ++ docs/pages/docs/get-started.mdx.backup | 92 + docs/pages/docs/guide.mdx | 43 + docs/pages/docs/guide/_meta.json | 12 + docs/pages/docs/guide/advanced.mdx | 48 + docs/pages/docs/guide/advanced/_meta.json | 9 + docs/pages/docs/guide/advanced/latex.mdx | 40 + docs/pages/docs/guide/advanced/mermaid.mdx | 55 + docs/pages/docs/guide/advanced/npm2yarn.mdx | 22 + docs/pages/docs/guide/advanced/remote.mdx | 7 + docs/pages/docs/guide/advanced/table.mdx | 209 + .../docs/guide/advanced/tailwind-css.mdx | 26 + docs/pages/docs/guide/advanced/typescript.mdx | 7 + docs/pages/docs/guide/built-ins.mdx | 33 + docs/pages/docs/guide/built-ins/_meta.json | 7 + docs/pages/docs/guide/built-ins/callout.mdx | 108 + docs/pages/docs/guide/built-ins/cards.mdx | 30 + docs/pages/docs/guide/built-ins/filetree.mdx | 37 + docs/pages/docs/guide/built-ins/steps.mdx | 56 + docs/pages/docs/guide/built-ins/tabs.mdx | 48 + docs/pages/docs/guide/custom-css.mdx | 32 + docs/pages/docs/guide/i18n.mdx | 77 + docs/pages/docs/guide/image.mdx | 34 + docs/pages/docs/guide/link.mdx | 18 + docs/pages/docs/guide/markdown.mdx | 125 + docs/pages/docs/guide/organize-files.mdx | 108 + docs/pages/docs/guide/ssg.mdx | 73 + docs/pages/docs/guide/syntax-highlighting.mdx | 373 + docs/pages/docs/index.mdx | 60 + docs/pages/index.mdx | 461 + docs/pages/index.module.css | 81 + docs/pages/showcase.mdx | 189 + docs/pages/showcase/apollo-angular.png | Bin 0 -> 158404 bytes docs/pages/showcase/cloudquery.svg | 74 + docs/pages/showcase/cobe.png | Bin 0 -> 228646 bytes docs/pages/showcase/codesandbox.jpg | Bin 0 -> 73265 bytes docs/pages/showcase/docsgpt.png | Bin 0 -> 2103263 bytes docs/pages/showcase/edge-runtime.jpeg | Bin 0 -> 25840 bytes docs/pages/showcase/fets.png | Bin 0 -> 188132 bytes docs/pages/showcase/graphql-codegen.png | Bin 0 -> 202875 bytes docs/pages/showcase/graphql-config.png | Bin 0 -> 172939 bytes docs/pages/showcase/graphql-envelop.png | Bin 0 -> 142481 bytes docs/pages/showcase/graphql-eslint.png | Bin 0 -> 172526 bytes docs/pages/showcase/graphql-hive.png | Bin 0 -> 179183 bytes docs/pages/showcase/graphql-inspector.png | Bin 0 -> 184203 bytes docs/pages/showcase/graphql-mesh.png | Bin 0 -> 200203 bytes docs/pages/showcase/graphql-modules.png | Bin 0 -> 180042 bytes docs/pages/showcase/graphql-scalars.png | Bin 0 -> 185764 bytes docs/pages/showcase/graphql-shield.png | Bin 0 -> 181227 bytes docs/pages/showcase/graphql-sofa.png | Bin 0 -> 151187 bytes docs/pages/showcase/graphql-sse.png | Bin 0 -> 186208 bytes docs/pages/showcase/graphql-tools.png | Bin 0 -> 179581 bytes docs/pages/showcase/graphql-ws.png | Bin 0 -> 178525 bytes docs/pages/showcase/graphql-yoga.png | Bin 0 -> 182991 bytes docs/pages/showcase/javascript-patterns.jpg | Bin 0 -> 52118 bytes docs/pages/showcase/jscodechallenges.png | Bin 0 -> 46664 bytes docs/pages/showcase/kitql.png | Bin 0 -> 150889 bytes docs/pages/showcase/kuma-ui.png | Bin 0 -> 133070 bytes docs/pages/showcase/livepeer.png | Bin 0 -> 7931 bytes docs/pages/showcase/million.png | Bin 0 -> 319283 bytes docs/pages/showcase/nodejs.svg | 1 + docs/pages/showcase/panda.png | Bin 0 -> 57289 bytes docs/pages/showcase/sound.xyz.png | Bin 0 -> 1616112 bytes docs/pages/showcase/speakeasy.png | Bin 0 -> 93371 bytes docs/pages/showcase/swr.png | Bin 0 -> 10636 bytes docs/pages/showcase/the-guild.png | Bin 0 -> 167399 bytes docs/pages/showcase/thegraph.jpeg | Bin 0 -> 153869 bytes docs/pages/showcase/turbo.jpg | Bin 0 -> 20719 bytes docs/postcss.config.js | 9 + docs/public/assets/blog-theme.png | Bin 0 -> 39152 bytes docs/public/assets/card-1.dark.png | Bin 0 -> 320688 bytes docs/public/assets/card-1.png | Bin 0 -> 309972 bytes docs/public/assets/docs-theme.png | Bin 0 -> 115908 bytes docs/public/assets/docs/banner.png | Bin 0 -> 31315 bytes docs/public/assets/docs/custom-theme.png | Bin 0 -> 233161 bytes docs/public/assets/docs/logo.png | Bin 0 -> 20042 bytes docs/public/assets/docs/menu.png | Bin 0 -> 45058 bytes docs/public/assets/docs/navigation.png | Bin 0 -> 28435 bytes docs/public/assets/docs/project-link.png | Bin 0 -> 18571 bytes .../public/assets/docs/sidebar-customized.png | Bin 0 -> 113051 bytes docs/public/assets/docs/sub-docs.mp4 | Bin 0 -> 694653 bytes docs/public/assets/docs/title-suffix.png | Bin 0 -> 62991 bytes docs/public/assets/gradient-bg.jpeg | Bin 0 -> 484256 bytes docs/public/assets/high-contrast.png | Bin 0 -> 113234 bytes docs/public/assets/routing.png | Bin 0 -> 507582 bytes docs/public/assets/routing@1x.png | Bin 0 -> 141564 bytes docs/public/assets/search-dark.mp4 | Bin 0 -> 417891 bytes docs/public/assets/search.mp4 | Bin 0 -> 479857 bytes docs/public/assets/syntax-highlighting.svg | 1 + docs/public/demo.png | Bin 0 -> 386971 bytes docs/public/favicon-dark.png | Bin 0 -> 1501 bytes docs/public/favicon-dark.svg | 10 + docs/public/favicon.png | Bin 0 -> 1357 bytes docs/public/favicon.svg | 10 + docs/public/logo.svg | 17 + docs/public/og.jpeg | Bin 0 -> 187335 bytes docs/style.css | 55 + docs/tailwind.config.js | 13 + docs/theme.config.tsx | 155 + docs/tsconfig.json | 24 + docs/vercel.json | 3 + examples/blog/next.config.js | 13 + examples/blog/package.json | 27 + examples/blog/pages/_app.mdx | 3 + examples/blog/pages/index.mdx | 14 + .../posts/aaron-swartz-a-programmable-web.mdx | 120 + examples/blog/pages/posts/callout.mdx | 105 + examples/blog/pages/posts/code-blocks.mdx | 49 + examples/blog/pages/posts/draft.mdx | 13 + examples/blog/pages/posts/index.md | 7 + examples/blog/pages/posts/table.mdx | 15 + examples/blog/pages/tags/[tag].mdx | 10 + examples/blog/public/img.jpeg | Bin 0 -> 1040188 bytes examples/blog/theme.config.jsx | 49 + examples/docs/next.config.mjs | 14 + examples/docs/package.json | 26 + examples/docs/public/android-icon-192x192.png | Bin 0 -> 15416 bytes examples/docs/public/apple-icon-180x180.png | Bin 0 -> 15513 bytes examples/docs/public/apple-icon.png | Bin 0 -> 15990 bytes examples/docs/public/demo.png | Bin 0 -> 386971 bytes examples/docs/public/favicon-16x16.png | Bin 0 -> 1470 bytes examples/docs/public/favicon-32x32.png | Bin 0 -> 2201 bytes examples/docs/public/favicon-96x96.png | Bin 0 -> 6701 bytes examples/docs/public/favicon.ico | Bin 0 -> 1150 bytes examples/docs/public/ms-icon-144x144.png | Bin 0 -> 11130 bytes examples/docs/public/og.png | Bin 0 -> 950286 bytes examples/docs/src/pages/_app.mdx | 3 + examples/docs/src/pages/_meta.json | 7 + examples/docs/src/pages/advanced/_meta.json | 3 + .../src/pages/advanced/code-highlighting.mdx | 56 + examples/docs/src/pages/features/_meta.json | 8 + examples/docs/src/pages/features/i18n.mdx | 51 + examples/docs/src/pages/features/image.mdx | 36 + examples/docs/src/pages/features/latex.mdx | 23 + examples/docs/src/pages/features/mdx.mdx | 165 + examples/docs/src/pages/features/ssg.mdx | 73 + examples/docs/src/pages/features/themes.mdx | 16 + examples/docs/src/pages/get-started.mdx | 110 + examples/docs/src/pages/index.mdx | 14 + examples/docs/src/pages/themes/_meta.json | 4 + .../docs/src/pages/themes/blog/_meta.json | 3 + examples/docs/src/pages/themes/blog/index.mdx | 78 + .../docs/src/pages/themes/docs/_meta.json | 6 + examples/docs/src/pages/themes/docs/bleed.mdx | 82 + .../docs/src/pages/themes/docs/callout.mdx | 62 + .../src/pages/themes/docs/configuration.mdx | 616 + examples/docs/src/pages/themes/docs/index.mdx | 76 + examples/docs/src/pages/themes/docs/tabs.mdx | 77 + examples/docs/src/theme.config.js | 75 + examples/swr-site/README.md | 26 + examples/swr-site/components/authors.jsx | 23 + .../swr-site/components/diagrams/cache.jsx | 45 + .../swr-site/components/diagrams/infinite.jsx | 34 + .../components/diagrams/pagination.jsx | 88 + .../swr-site/components/diagrams/use-draw.js | 20 + .../swr-site/components/diagrams/welcome.jsx | 39 + examples/swr-site/components/external.mdx | 5 + examples/swr-site/components/features.jsx | 213 + .../swr-site/components/features.module.css | 45 + examples/swr-site/components/remote-utils.js | 48 + examples/swr-site/components/video.jsx | 63 + examples/swr-site/jsconfig.json | 5 + examples/swr-site/license.md | 172 + examples/swr-site/middleware.js | 12 + examples/swr-site/next-env.d.ts | 5 + examples/swr-site/next.config.mjs | 81 + examples/swr-site/package.json | 44 + examples/swr-site/pages/404.mdx | 5 + examples/swr-site/pages/500.mdx | 5 + examples/swr-site/pages/_app.mdx | 5 + examples/swr-site/pages/_document.jsx | 19 + examples/swr-site/pages/_meta.en-US.json | 76 + examples/swr-site/pages/_meta.es-ES.json | 19 + examples/swr-site/pages/_meta.ru.json | 26 + .../swr-site/pages/about/_meta.en-US.json | 11 + .../swr-site/pages/about/a-page.en-US.mdx | 1 + .../pages/about/acknowledgement.en-US.mdx | 1 + .../swr-site/pages/about/changelog.en-US.md | 1 + examples/swr-site/pages/about/team.en-US.mdx | 3 + examples/swr-site/pages/blog.en-US.mdx | 40 + examples/swr-site/pages/blog.ru.mdx | 5 + examples/swr-site/pages/blog/_meta.en-US.json | 8 + examples/swr-site/pages/blog/_meta.ru.json | 8 + examples/swr-site/pages/blog/swr-v1.en-US.mdx | 313 + examples/swr-site/pages/blog/swr-v1.ru.mdx | 319 + .../swr-site/pages/docs/404-500.en-US.mdx | 57 + examples/swr-site/pages/docs/_meta.en-US.json | 46 + examples/swr-site/pages/docs/_meta.es-ES.json | 20 + examples/swr-site/pages/docs/_meta.ru.json | 20 + .../swr-site/pages/docs/advanced.en-US.mdx | 28 + .../pages/docs/advanced/_meta.en-US.json | 13 + .../pages/docs/advanced/_meta.es-ES.json | 6 + .../pages/docs/advanced/_meta.ru.json | 6 + .../pages/docs/advanced/cache.en-US.mdx | 231 + .../swr-site/pages/docs/advanced/cache.ru.mdx | 238 + .../docs/advanced/code-highlighting.en-US.mdx | 41 + .../dynamic-markdown-import.en-US.mdx | 22 + .../advanced/file-name.with.DOTS.en-US.mdx | 1 + .../advanced/file-name.with.DOTS.es-ES.mdx | 1 + .../docs/advanced/file-name.with.DOTS.ru.mdx | 1 + .../pages/docs/advanced/images.en-US.mdx | 5 + .../docs/advanced/markdown-import.en-US.mdx | 26 + .../loooooooooooooooooooong-title.en-US.mdx | 5 + .../docs/advanced/more/tree/one.en-US.mdx | 18 + .../docs/advanced/more/tree/three.en-US.mdx | 1 + .../docs/advanced/more/tree/two.en-US.mdx | 10 + .../pages/docs/advanced/performance.en-US.mdx | 129 + .../pages/docs/advanced/performance.es-ES.mdx | 132 + .../pages/docs/advanced/performance.ru.mdx | 133 + .../docs/advanced/react-native.en-US.mdx | 109 + .../pages/docs/advanced/react-native.ru.mdx | 110 + .../pages/docs/advanced/scrollbar-x.en-US.mdx | 31 + .../swr-site/pages/docs/arguments.en-US.md | 64 + .../swr-site/pages/docs/arguments.es-ES.md | 65 + examples/swr-site/pages/docs/arguments.ru.md | 64 + .../swr-site/pages/docs/callout.en-US.mdx | 23 + .../swr-site/pages/docs/change-log.en-US.mdx | 22 + .../swr-site/pages/docs/change-log.es-ES.mdx | 43 + .../swr-site/pages/docs/change-log.ru.mdx | 46 + .../code-block-without-language.en-US.mdx | 5 + .../pages/docs/conditional-fetching.en-US.md | 38 + .../pages/docs/conditional-fetching.es-ES.md | 40 + .../pages/docs/conditional-fetching.ru.md | 39 + .../pages/docs/custom-header-ids.en-US.mdx | 18 + .../pages/docs/data-fetching.en-US.mdx | 84 + .../pages/docs/data-fetching.es-ES.mdx | 83 + .../swr-site/pages/docs/data-fetching.ru.mdx | 84 + .../pages/docs/error-handling.en-US.mdx | 115 + .../pages/docs/error-handling.es-ES.mdx | 117 + .../swr-site/pages/docs/error-handling.ru.mdx | 117 + .../pages/docs/getting-started.en-US.mdx | 253 + .../pages/docs/getting-started.es-ES.mdx | 210 + .../pages/docs/getting-started.ru.mdx | 210 + .../pages/docs/global-configuration.en-US.md | 71 + .../pages/docs/global-configuration.es-ES.md | 72 + .../pages/docs/global-configuration.ru.md | 73 + .../swr-site/pages/docs/middleware.en-US.md | 217 + examples/swr-site/pages/docs/middleware.ru.md | 218 + .../swr-site/pages/docs/mutation.en-US.md | 165 + .../swr-site/pages/docs/mutation.es-ES.md | 166 + examples/swr-site/pages/docs/mutation.ru.md | 167 + .../swr-site/pages/docs/options.en-US.mdx | 80 + .../swr-site/pages/docs/options.es-ES.mdx | 81 + examples/swr-site/pages/docs/options.ru.mdx | 85 + .../swr-site/pages/docs/pagination.en-US.mdx | 366 + .../swr-site/pages/docs/pagination.es-ES.mdx | 370 + .../swr-site/pages/docs/pagination.ru.mdx | 371 + .../swr-site/pages/docs/prefetching.en-US.md | 59 + .../swr-site/pages/docs/prefetching.es-ES.md | 60 + .../swr-site/pages/docs/prefetching.ru.md | 60 + .../swr-site/pages/docs/raw-layout.en-US.mdx | 78 + .../pages/docs/revalidation.en-US.mdx | 103 + .../pages/docs/revalidation.es-ES.mdx | 105 + .../swr-site/pages/docs/revalidation.ru.mdx | 107 + .../swr-site/pages/docs/suspense.en-US.mdx | 81 + .../swr-site/pages/docs/suspense.es-ES.mdx | 86 + examples/swr-site/pages/docs/suspense.ru.mdx | 87 + .../swr-site/pages/docs/typescript.en-US.mdx | 98 + .../pages/docs/understanding.en-US.mdx | 147 + .../pages/docs/understanding.es-ES.mdx | 147 + .../swr-site/pages/docs/understanding.ru.mdx | 147 + .../swr-site/pages/docs/with-nextjs.en-US.md | 71 + .../swr-site/pages/docs/with-nextjs.es-ES.md | 75 + .../swr-site/pages/docs/with-nextjs.ru.md | 74 + .../pages/docs/wrap-toc-items.en-US.mdx | 101 + .../pages/docs/wrap-toc-items.es-ES.mdx | 101 + .../swr-site/pages/docs/wrap-toc-items.ru.mdx | 101 + .../swr-site/pages/examples/_meta.en-US.json | 12 + .../swr-site/pages/examples/_meta.es-ES.json | 7 + .../swr-site/pages/examples/_meta.ru.json | 7 + .../swr-site/pages/examples/auth.en-US.mdx | 18 + .../swr-site/pages/examples/auth.es-ES.mdx | 18 + examples/swr-site/pages/examples/auth.ru.mdx | 18 + .../swr-site/pages/examples/basic.en-US.mdx | 18 + .../swr-site/pages/examples/basic.es-ES.mdx | 18 + examples/swr-site/pages/examples/basic.ru.mdx | 18 + .../pages/examples/error-handling.en-US.mdx | 18 + .../pages/examples/error-handling.es-ES.mdx | 18 + .../pages/examples/error-handling.ru.mdx | 18 + .../swr-site/pages/examples/full.en-US.mdx | 13 + .../pages/examples/infinite-loading.en-US.mdx | 18 + .../pages/examples/infinite-loading.es-ES.mdx | 18 + .../pages/examples/infinite-loading.ru.mdx | 18 + .../swr-site/pages/examples/ssr.en-US.mdx | 18 + examples/swr-site/pages/examples/ssr.ru.mdx | 18 + examples/swr-site/pages/foo.en-US.md | 12 + examples/swr-site/pages/index.en-US.mdx | 131 + examples/swr-site/pages/index.es-ES.mdx | 97 + examples/swr-site/pages/index.ru.mdx | 94 + examples/swr-site/pages/remote/[slug].mdx.bak | 58 + examples/swr-site/pages/remote/_meta.js | 22 + .../remote/graphql-eslint/[[...slug]].mdx.bak | 50 + .../pages/remote/graphql-eslint/_meta.js | 30 + .../remote/graphql-yoga/[[...slug]].mdx.bak | 58 + .../pages/remote/graphql-yoga/_meta.js | 55 + examples/swr-site/pages/test.en-US.md | 15 + examples/swr-site/postcss.config.js | 7 + .../public/favicon/android-chrome-192x192.png | Bin 0 -> 1995 bytes .../public/favicon/android-chrome-512x512.png | Bin 0 -> 5784 bytes .../public/favicon/apple-touch-icon.png | Bin 0 -> 1863 bytes .../swr-site/public/favicon/browserconfig.xml | 9 + .../swr-site/public/favicon/favicon-16x16.png | Bin 0 -> 494 bytes .../swr-site/public/favicon/favicon-32x32.png | Bin 0 -> 683 bytes examples/swr-site/public/favicon/favicon.ico | Bin 0 -> 15086 bytes .../public/favicon/mstile-150x150.png | Bin 0 -> 2183 bytes .../public/favicon/safari-pinned-tab.svg | 112 + .../swr-site/public/favicon/site.webmanifest | 19 + .../public/img/understanding/fallback.svg | 16 + .../understanding/fetch-and-revalidate.svg | 16 + .../public/img/understanding/isloading.gif | Bin 0 -> 376423 bytes .../img/understanding/key-change-fallback.svg | 16 + .../key-change-previous-data-fallback.svg | 16 + .../key-change-previous-data.svg | 16 + .../public/img/understanding/key-change.svg | 16 + examples/swr-site/public/stork.wasm | Bin 0 -> 487043 bytes examples/swr-site/public/swr-logo.svg | 5 + examples/swr-site/styles.css | 36 + examples/swr-site/tailwind.config.js | 9 + examples/swr-site/theme.config.tsx | 216 + examples/swr-site/tsconfig.json | 24 + package.json | 59 + packages/nextra-theme-blog/CHANGELOG.md | 723 + packages/nextra-theme-blog/LICENSE | 21 + packages/nextra-theme-blog/README.md | 7 + .../__test__/__fixture__/pageMap.ts | 261 + .../__test__/collect.spec.ts | 155 + .../nextra-theme-blog/__test__/date.spec.ts | 18 + .../nextra-theme-blog/__test__/parent.spec.ts | 24 + .../nextra-theme-blog/__test__/tag.spec.ts | 27 + packages/nextra-theme-blog/package.json | 85 + packages/nextra-theme-blog/postcss.config.js | 11 + .../nextra-theme-blog/src/article-layout.tsx | 19 + .../nextra-theme-blog/src/basic-layout.tsx | 28 + .../nextra-theme-blog/src/blog-context.tsx | 33 + packages/nextra-theme-blog/src/constants.tsx | 11 + packages/nextra-theme-blog/src/cusdis.tsx | 48 + packages/nextra-theme-blog/src/env.d.ts | 5 + packages/nextra-theme-blog/src/index.tsx | 55 + packages/nextra-theme-blog/src/mdx-theme.tsx | 110 + packages/nextra-theme-blog/src/meta.tsx | 77 + packages/nextra-theme-blog/src/nav.tsx | 41 + .../nextra-theme-blog/src/page-layout.tsx | 13 + .../nextra-theme-blog/src/posts-layout.tsx | 73 + packages/nextra-theme-blog/src/styles.css | 47 + packages/nextra-theme-blog/src/tags.tsx | 38 + .../nextra-theme-blog/src/theme-switch.tsx | 29 + packages/nextra-theme-blog/src/types.ts | 48 + .../nextra-theme-blog/src/utils/collect.ts | 36 + packages/nextra-theme-blog/src/utils/date.ts | 16 + .../nextra-theme-blog/src/utils/get-tags.ts | 37 + .../nextra-theme-blog/src/utils/parent.ts | 34 + .../nextra-theme-blog/src/utils/traverse.ts | 23 + packages/nextra-theme-blog/tailwind.config.js | 55 + packages/nextra-theme-blog/tsconfig.json | 17 + packages/nextra-theme-blog/tsup.config.ts | 10 + packages/nextra-theme-docs/CHANGELOG.md | 1174 ++ packages/nextra-theme-docs/LICENSE | 21 + packages/nextra-theme-docs/README.md | 7 + packages/nextra-theme-docs/css/hamburger.css | 41 + packages/nextra-theme-docs/css/styles.css | 177 + .../css/typesetting-article.css | 28 + packages/nextra-theme-docs/package.json | 78 + packages/nextra-theme-docs/postcss.config.js | 11 + .../nextra-theme-docs/src/components/404.tsx | 32 + .../nextra-theme-docs/src/components/500.tsx | 34 + .../src/components/anchor.tsx | 61 + .../src/components/back-to-top.tsx | 38 + .../src/components/banner.tsx | 50 + .../src/components/bleed.tsx | 25 + .../src/components/breadcrumb.tsx | 46 + .../src/components/collapse.tsx | 80 + .../src/components/flexsearch.tsx | 290 + .../src/components/footer.tsx | 33 + .../nextra-theme-docs/src/components/head.tsx | 83 + .../src/components/highlight-matches.tsx | 47 + .../nextra-theme-docs/src/components/index.ts | 20 + .../src/components/input.tsx | 29 + .../src/components/locale-switch.tsx | 50 + .../src/components/match-sorter-search.tsx | 43 + .../src/components/nav-links.tsx | 70 + .../src/components/navbar.tsx | 203 + .../src/components/search.tsx | 296 + .../src/components/select.tsx | 105 + .../src/components/sidebar.tsx | 515 + .../src/components/skip-nav.tsx | 93 + .../src/components/theme-switch.tsx | 61 + .../nextra-theme-docs/src/components/toc.tsx | 135 + packages/nextra-theme-docs/src/constants.tsx | 366 + .../src/contexts/active-anchor.tsx | 106 + .../nextra-theme-docs/src/contexts/config.tsx | 126 + .../nextra-theme-docs/src/contexts/details.ts | 8 + .../nextra-theme-docs/src/contexts/index.ts | 8 + .../nextra-theme-docs/src/contexts/menu.ts | 16 + packages/nextra-theme-docs/src/env.d.ts | 0 packages/nextra-theme-docs/src/index.tsx | 277 + .../nextra-theme-docs/src/mdx-components.tsx | 250 + packages/nextra-theme-docs/src/polyfill.ts | 15 + packages/nextra-theme-docs/src/types.ts | 16 + .../src/utils/get-git-issue-url.ts | 30 + packages/nextra-theme-docs/src/utils/index.ts | 4 + .../nextra-theme-docs/src/utils/render.tsx | 23 + .../src/utils/use-git-edit-url.ts | 11 + .../nextra-theme-docs/src/utils/use-popper.ts | 42 + packages/nextra-theme-docs/tailwind.config.js | 76 + packages/nextra-theme-docs/tsconfig.json | 21 + packages/nextra-theme-docs/tsup.config.ts | 10 + packages/nextra-theme-docs/vite.config.ts | 9 + packages/nextra/CHANGELOG.md | 842 ++ .../__snapshots__/compile.test.ts.snap | 122 + .../__snapshots__/context.test.ts.snap | 1741 +++ .../__snapshots__/normalize-page.spec.ts.snap | 3714 +++++ .../__snapshots__/page-map.test.ts.snap | 1199 ++ .../nextra/__test__/collect-catch-all.test.ts | 177 + packages/nextra/__test__/compile.test.ts | 281 + packages/nextra/__test__/context.test.ts | 49 + .../folder-with-symlinks/docs/test2.md | 0 .../page-maps/folder-with-symlinks/pages/docs | 1 + .../folder-with-symlinks/pages/test1.md | 1 + .../page-maps/folder-with-symlinks/test1.md | 0 .../folder-without-markdown-files/test.ts | 0 .../folder-without-meta-json/callout.md | 0 .../folder-without-meta-json/tabs.md | 0 .../__test__/fixture/page-maps/pageMap.ts | 1309 ++ packages/nextra/__test__/latex.test.ts | 180 + packages/nextra/__test__/loader.test.ts | 53 + .../__test__/locale-with-base-path.test.ts | 62 + packages/nextra/__test__/locale.test.ts | 129 + .../nextra/__test__/normalize-page.spec.ts | 208 + packages/nextra/__test__/page-map.test.ts | 228 + packages/nextra/__test__/sort-pages.test.ts | 70 + packages/nextra/__test__/test-utils.ts | 25 + packages/nextra/__test__/use-fs-route.spec.ts | 85 + packages/nextra/__test__/utils.test.ts | 107 + packages/nextra/loader.js | 17 + packages/nextra/package.json | 168 + packages/nextra/src/__temp__.js | 12 + packages/nextra/src/catch-all.ts | 53 + packages/nextra/src/compile.ts | 262 + packages/nextra/src/components/button.tsx | 22 + packages/nextra/src/components/callout.tsx | 59 + packages/nextra/src/components/cards.tsx | 119 + packages/nextra/src/components/code.tsx | 25 + .../src/components/copy-to-clipboard.tsx | 46 + packages/nextra/src/components/file-tree.tsx | 124 + packages/nextra/src/components/index.ts | 14 + packages/nextra/src/components/pre.tsx | 73 + packages/nextra/src/components/steps.tsx | 21 + packages/nextra/src/components/table.tsx | 12 + packages/nextra/src/components/tabs.tsx | 125 + packages/nextra/src/components/td.tsx | 12 + packages/nextra/src/components/th.tsx | 12 + packages/nextra/src/components/tr.tsx | 13 + packages/nextra/src/constants.ts | 41 + packages/nextra/src/context.ts | 90 + packages/nextra/src/env.d.ts | 16 + packages/nextra/src/file-system.ts | 20 + packages/nextra/src/filter-route-locale.ts | 40 + packages/nextra/src/global.d.ts | 7 + packages/nextra/src/hooks/index.ts | 2 + packages/nextra/src/hooks/use-fs-route.ts | 27 + packages/nextra/src/hooks/use-mounted.ts | 11 + packages/nextra/src/icons/arrow-right.tsx | 18 + packages/nextra/src/icons/check.tsx | 19 + packages/nextra/src/icons/copy.tsx | 32 + packages/nextra/src/icons/discord.tsx | 17 + packages/nextra/src/icons/expand.tsx | 26 + packages/nextra/src/icons/github.tsx | 16 + packages/nextra/src/icons/globe.tsx | 19 + packages/nextra/src/icons/index.ts | 14 + .../nextra/src/icons/information-circle.tsx | 22 + packages/nextra/src/icons/menu.tsx | 37 + packages/nextra/src/icons/moon.tsx | 22 + packages/nextra/src/icons/spinner.tsx | 28 + packages/nextra/src/icons/sun.tsx | 22 + packages/nextra/src/icons/word-wrap.tsx | 12 + packages/nextra/src/icons/x.tsx | 20 + packages/nextra/src/index.js | 135 + packages/nextra/src/layout.tsx | 37 + packages/nextra/src/loader.ts | 346 + packages/nextra/src/locales.ts | 110 + packages/nextra/src/mdx-plugins/index.ts | 12 + packages/nextra/src/mdx-plugins/rehype.ts | 44 + .../mdx-plugins/remark-custom-heading-id.ts | 26 + .../nextra/src/mdx-plugins/remark-headings.ts | 160 + .../src/mdx-plugins/remark-link-rewrite.ts | 25 + .../remark-mdx-disable-explicit-jsx.ts | 15 + .../src/mdx-plugins/remark-remove-imports.ts | 10 + .../src/mdx-plugins/remark-replace-imports.ts | 24 + .../src/mdx-plugins/remark-static-image.ts | 111 + .../src/mdx-plugins/remark-structurize.ts | 87 + packages/nextra/src/mdx.ts | 23 + packages/nextra/src/normalize-pages.ts | 442 + packages/nextra/src/page-map.ts | 117 + packages/nextra/src/plugin.ts | 251 + packages/nextra/src/remote.ts | 46 + packages/nextra/src/setup-page.ts | 202 + packages/nextra/src/ssg.tsx | 29 + packages/nextra/src/theme.json | 209 + packages/nextra/src/types.ts | 214 + packages/nextra/src/use-internals.ts | 48 + packages/nextra/src/utils.ts | 106 + packages/nextra/src/webpack-plugins/index.ts | 2 + .../src/webpack-plugins/nextra-search.ts | 53 + packages/nextra/src/webpack-plugins/nextra.ts | 23 + packages/nextra/styles/cards.css | 32 + packages/nextra/styles/code-block.css | 71 + packages/nextra/styles/scrollbar.css | 37 + packages/nextra/styles/steps.css | 11 + packages/nextra/styles/subheading-anchor.css | 17 + packages/nextra/styles/variables.css | 94 + packages/nextra/tsconfig.json | 17 + packages/nextra/tsup.config.ts | 94 + packages/nextra/vite.config.ts | 10 + ...ngesets__assemble-release-plan@5.2.4.patch | 26 + pnpm-lock.yaml | 11455 ++++++++++++++++ pnpm-workspace.yaml | 4 + prettier.config.js | 22 + renovate.json5 | 30 + tsconfig.eslint.json | 10 + turbo.json | 29 + 594 files changed, 54400 insertions(+) create mode 100644 .changeset/config.json create mode 100644 .editorconfig create mode 100644 .eslintrc.cjs create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/nextjs-bundle-analysis.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .vscode/settings.json create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/components/features/index.tsx create mode 100644 docs/components/features/style.module.css create mode 100644 docs/components/features/themes-animation.tsx create mode 100644 docs/components/icons/arrow-right.svg create mode 100644 docs/components/icons/box.svg create mode 100644 docs/components/icons/brush.svg create mode 100644 docs/components/icons/cards.svg create mode 100644 docs/components/icons/chevron-right.svg create mode 100644 docs/components/icons/cloud.svg create mode 100644 docs/components/icons/code.svg create mode 100644 docs/components/icons/diagram.svg create mode 100644 docs/components/icons/dropper.svg create mode 100644 docs/components/icons/file.svg create mode 100644 docs/components/icons/files.svg create mode 100644 docs/components/icons/folder-tree.svg create mode 100644 docs/components/icons/formula.svg create mode 100644 docs/components/icons/gear.svg create mode 100644 docs/components/icons/globe.svg create mode 100644 docs/components/icons/id-card.svg create mode 100644 docs/components/icons/index.ts create mode 100644 docs/components/icons/lightning.svg create mode 100644 docs/components/icons/link.svg create mode 100644 docs/components/icons/markdown.svg create mode 100644 docs/components/icons/newsletter.svg create mode 100644 docs/components/icons/one.svg create mode 100644 docs/components/icons/picture.svg create mode 100644 docs/components/icons/rows.svg create mode 100644 docs/components/icons/stars.svg create mode 100644 docs/components/icons/switch.svg create mode 100644 docs/components/icons/table.svg create mode 100644 docs/components/icons/tailwind.svg create mode 100644 docs/components/icons/terminal.svg create mode 100644 docs/components/icons/warning.svg create mode 100644 docs/components/screenshot/index.jsx create mode 100644 docs/components/table/index.tsx create mode 100644 docs/components/table/style.module.css create mode 100644 docs/components/utils/shadow.jsx create mode 100644 docs/components/video/index.jsx create mode 100644 docs/next-env.d.ts create mode 100644 docs/next.config.mjs create mode 100644 docs/package.json create mode 100644 docs/pages/404.mdx create mode 100644 docs/pages/_app.mdx create mode 100644 docs/pages/_meta.json create mode 100644 docs/pages/about.mdx create mode 100644 docs/pages/api/Inter-SemiBold.otf create mode 100644 docs/pages/api/og.jsx create mode 100644 docs/pages/docs/_meta.json create mode 100644 docs/pages/docs/blog-theme.mdx create mode 100644 docs/pages/docs/blog-theme/_meta.json create mode 100644 docs/pages/docs/blog-theme/start.mdx create mode 100644 docs/pages/docs/custom-theme.mdx create mode 100644 docs/pages/docs/docs-theme.mdx create mode 100644 docs/pages/docs/docs-theme/_meta.json create mode 100644 docs/pages/docs/docs-theme/api/_meta.json create mode 100644 docs/pages/docs/docs-theme/api/use-config.mdx create mode 100644 docs/pages/docs/docs-theme/built-ins.mdx create mode 100644 docs/pages/docs/docs-theme/built-ins/bleed.mdx create mode 100644 docs/pages/docs/docs-theme/page-configuration.mdx create mode 100644 docs/pages/docs/docs-theme/start.mdx create mode 100644 docs/pages/docs/docs-theme/theme-configuration.mdx create mode 100644 docs/pages/docs/get-started.mdx.backup create mode 100644 docs/pages/docs/guide.mdx create mode 100644 docs/pages/docs/guide/_meta.json create mode 100644 docs/pages/docs/guide/advanced.mdx create mode 100644 docs/pages/docs/guide/advanced/_meta.json create mode 100644 docs/pages/docs/guide/advanced/latex.mdx create mode 100644 docs/pages/docs/guide/advanced/mermaid.mdx create mode 100644 docs/pages/docs/guide/advanced/npm2yarn.mdx create mode 100644 docs/pages/docs/guide/advanced/remote.mdx create mode 100644 docs/pages/docs/guide/advanced/table.mdx create mode 100644 docs/pages/docs/guide/advanced/tailwind-css.mdx create mode 100644 docs/pages/docs/guide/advanced/typescript.mdx create mode 100644 docs/pages/docs/guide/built-ins.mdx create mode 100644 docs/pages/docs/guide/built-ins/_meta.json create mode 100644 docs/pages/docs/guide/built-ins/callout.mdx create mode 100644 docs/pages/docs/guide/built-ins/cards.mdx create mode 100644 docs/pages/docs/guide/built-ins/filetree.mdx create mode 100644 docs/pages/docs/guide/built-ins/steps.mdx create mode 100644 docs/pages/docs/guide/built-ins/tabs.mdx create mode 100644 docs/pages/docs/guide/custom-css.mdx create mode 100644 docs/pages/docs/guide/i18n.mdx create mode 100644 docs/pages/docs/guide/image.mdx create mode 100644 docs/pages/docs/guide/link.mdx create mode 100644 docs/pages/docs/guide/markdown.mdx create mode 100644 docs/pages/docs/guide/organize-files.mdx create mode 100644 docs/pages/docs/guide/ssg.mdx create mode 100644 docs/pages/docs/guide/syntax-highlighting.mdx create mode 100644 docs/pages/docs/index.mdx create mode 100644 docs/pages/index.mdx create mode 100644 docs/pages/index.module.css create mode 100644 docs/pages/showcase.mdx create mode 100644 docs/pages/showcase/apollo-angular.png create mode 100644 docs/pages/showcase/cloudquery.svg create mode 100644 docs/pages/showcase/cobe.png create mode 100644 docs/pages/showcase/codesandbox.jpg create mode 100644 docs/pages/showcase/docsgpt.png create mode 100644 docs/pages/showcase/edge-runtime.jpeg create mode 100644 docs/pages/showcase/fets.png create mode 100644 docs/pages/showcase/graphql-codegen.png create mode 100644 docs/pages/showcase/graphql-config.png create mode 100644 docs/pages/showcase/graphql-envelop.png create mode 100644 docs/pages/showcase/graphql-eslint.png create mode 100644 docs/pages/showcase/graphql-hive.png create mode 100644 docs/pages/showcase/graphql-inspector.png create mode 100644 docs/pages/showcase/graphql-mesh.png create mode 100644 docs/pages/showcase/graphql-modules.png create mode 100644 docs/pages/showcase/graphql-scalars.png create mode 100644 docs/pages/showcase/graphql-shield.png create mode 100644 docs/pages/showcase/graphql-sofa.png create mode 100644 docs/pages/showcase/graphql-sse.png create mode 100644 docs/pages/showcase/graphql-tools.png create mode 100644 docs/pages/showcase/graphql-ws.png create mode 100644 docs/pages/showcase/graphql-yoga.png create mode 100644 docs/pages/showcase/javascript-patterns.jpg create mode 100644 docs/pages/showcase/jscodechallenges.png create mode 100644 docs/pages/showcase/kitql.png create mode 100644 docs/pages/showcase/kuma-ui.png create mode 100644 docs/pages/showcase/livepeer.png create mode 100644 docs/pages/showcase/million.png create mode 100644 docs/pages/showcase/nodejs.svg create mode 100644 docs/pages/showcase/panda.png create mode 100644 docs/pages/showcase/sound.xyz.png create mode 100644 docs/pages/showcase/speakeasy.png create mode 100644 docs/pages/showcase/swr.png create mode 100644 docs/pages/showcase/the-guild.png create mode 100644 docs/pages/showcase/thegraph.jpeg create mode 100644 docs/pages/showcase/turbo.jpg create mode 100644 docs/postcss.config.js create mode 100644 docs/public/assets/blog-theme.png create mode 100644 docs/public/assets/card-1.dark.png create mode 100644 docs/public/assets/card-1.png create mode 100644 docs/public/assets/docs-theme.png create mode 100644 docs/public/assets/docs/banner.png create mode 100644 docs/public/assets/docs/custom-theme.png create mode 100644 docs/public/assets/docs/logo.png create mode 100644 docs/public/assets/docs/menu.png create mode 100644 docs/public/assets/docs/navigation.png create mode 100644 docs/public/assets/docs/project-link.png create mode 100644 docs/public/assets/docs/sidebar-customized.png create mode 100644 docs/public/assets/docs/sub-docs.mp4 create mode 100644 docs/public/assets/docs/title-suffix.png create mode 100644 docs/public/assets/gradient-bg.jpeg create mode 100644 docs/public/assets/high-contrast.png create mode 100644 docs/public/assets/routing.png create mode 100644 docs/public/assets/routing@1x.png create mode 100644 docs/public/assets/search-dark.mp4 create mode 100644 docs/public/assets/search.mp4 create mode 100644 docs/public/assets/syntax-highlighting.svg create mode 100644 docs/public/demo.png create mode 100644 docs/public/favicon-dark.png create mode 100644 docs/public/favicon-dark.svg create mode 100644 docs/public/favicon.png create mode 100644 docs/public/favicon.svg create mode 100644 docs/public/logo.svg create mode 100644 docs/public/og.jpeg create mode 100644 docs/style.css create mode 100644 docs/tailwind.config.js create mode 100644 docs/theme.config.tsx create mode 100644 docs/tsconfig.json create mode 100644 docs/vercel.json create mode 100644 examples/blog/next.config.js create mode 100644 examples/blog/package.json create mode 100644 examples/blog/pages/_app.mdx create mode 100644 examples/blog/pages/index.mdx create mode 100644 examples/blog/pages/posts/aaron-swartz-a-programmable-web.mdx create mode 100644 examples/blog/pages/posts/callout.mdx create mode 100644 examples/blog/pages/posts/code-blocks.mdx create mode 100644 examples/blog/pages/posts/draft.mdx create mode 100644 examples/blog/pages/posts/index.md create mode 100644 examples/blog/pages/posts/table.mdx create mode 100644 examples/blog/pages/tags/[tag].mdx create mode 100644 examples/blog/public/img.jpeg create mode 100644 examples/blog/theme.config.jsx create mode 100644 examples/docs/next.config.mjs create mode 100644 examples/docs/package.json create mode 100644 examples/docs/public/android-icon-192x192.png create mode 100644 examples/docs/public/apple-icon-180x180.png create mode 100644 examples/docs/public/apple-icon.png create mode 100644 examples/docs/public/demo.png create mode 100644 examples/docs/public/favicon-16x16.png create mode 100644 examples/docs/public/favicon-32x32.png create mode 100644 examples/docs/public/favicon-96x96.png create mode 100644 examples/docs/public/favicon.ico create mode 100644 examples/docs/public/ms-icon-144x144.png create mode 100644 examples/docs/public/og.png create mode 100644 examples/docs/src/pages/_app.mdx create mode 100644 examples/docs/src/pages/_meta.json create mode 100644 examples/docs/src/pages/advanced/_meta.json create mode 100644 examples/docs/src/pages/advanced/code-highlighting.mdx create mode 100644 examples/docs/src/pages/features/_meta.json create mode 100644 examples/docs/src/pages/features/i18n.mdx create mode 100644 examples/docs/src/pages/features/image.mdx create mode 100644 examples/docs/src/pages/features/latex.mdx create mode 100644 examples/docs/src/pages/features/mdx.mdx create mode 100644 examples/docs/src/pages/features/ssg.mdx create mode 100644 examples/docs/src/pages/features/themes.mdx create mode 100644 examples/docs/src/pages/get-started.mdx create mode 100644 examples/docs/src/pages/index.mdx create mode 100644 examples/docs/src/pages/themes/_meta.json create mode 100644 examples/docs/src/pages/themes/blog/_meta.json create mode 100644 examples/docs/src/pages/themes/blog/index.mdx create mode 100644 examples/docs/src/pages/themes/docs/_meta.json create mode 100644 examples/docs/src/pages/themes/docs/bleed.mdx create mode 100644 examples/docs/src/pages/themes/docs/callout.mdx create mode 100644 examples/docs/src/pages/themes/docs/configuration.mdx create mode 100644 examples/docs/src/pages/themes/docs/index.mdx create mode 100644 examples/docs/src/pages/themes/docs/tabs.mdx create mode 100644 examples/docs/src/theme.config.js create mode 100644 examples/swr-site/README.md create mode 100644 examples/swr-site/components/authors.jsx create mode 100644 examples/swr-site/components/diagrams/cache.jsx create mode 100644 examples/swr-site/components/diagrams/infinite.jsx create mode 100644 examples/swr-site/components/diagrams/pagination.jsx create mode 100644 examples/swr-site/components/diagrams/use-draw.js create mode 100644 examples/swr-site/components/diagrams/welcome.jsx create mode 100644 examples/swr-site/components/external.mdx create mode 100644 examples/swr-site/components/features.jsx create mode 100644 examples/swr-site/components/features.module.css create mode 100644 examples/swr-site/components/remote-utils.js create mode 100644 examples/swr-site/components/video.jsx create mode 100644 examples/swr-site/jsconfig.json create mode 100644 examples/swr-site/license.md create mode 100644 examples/swr-site/middleware.js create mode 100644 examples/swr-site/next-env.d.ts create mode 100644 examples/swr-site/next.config.mjs create mode 100644 examples/swr-site/package.json create mode 100644 examples/swr-site/pages/404.mdx create mode 100644 examples/swr-site/pages/500.mdx create mode 100644 examples/swr-site/pages/_app.mdx create mode 100644 examples/swr-site/pages/_document.jsx create mode 100644 examples/swr-site/pages/_meta.en-US.json create mode 100644 examples/swr-site/pages/_meta.es-ES.json create mode 100644 examples/swr-site/pages/_meta.ru.json create mode 100644 examples/swr-site/pages/about/_meta.en-US.json create mode 100644 examples/swr-site/pages/about/a-page.en-US.mdx create mode 100644 examples/swr-site/pages/about/acknowledgement.en-US.mdx create mode 120000 examples/swr-site/pages/about/changelog.en-US.md create mode 100644 examples/swr-site/pages/about/team.en-US.mdx create mode 100644 examples/swr-site/pages/blog.en-US.mdx create mode 100644 examples/swr-site/pages/blog.ru.mdx create mode 100644 examples/swr-site/pages/blog/_meta.en-US.json create mode 100644 examples/swr-site/pages/blog/_meta.ru.json create mode 100644 examples/swr-site/pages/blog/swr-v1.en-US.mdx create mode 100644 examples/swr-site/pages/blog/swr-v1.ru.mdx create mode 100644 examples/swr-site/pages/docs/404-500.en-US.mdx create mode 100644 examples/swr-site/pages/docs/_meta.en-US.json create mode 100644 examples/swr-site/pages/docs/_meta.es-ES.json create mode 100644 examples/swr-site/pages/docs/_meta.ru.json create mode 100644 examples/swr-site/pages/docs/advanced.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/_meta.en-US.json create mode 100644 examples/swr-site/pages/docs/advanced/_meta.es-ES.json create mode 100644 examples/swr-site/pages/docs/advanced/_meta.ru.json create mode 100644 examples/swr-site/pages/docs/advanced/cache.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/cache.ru.mdx create mode 100644 examples/swr-site/pages/docs/advanced/code-highlighting.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/dynamic-markdown-import.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/file-name.with.DOTS.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/file-name.with.DOTS.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/advanced/file-name.with.DOTS.ru.mdx create mode 100644 examples/swr-site/pages/docs/advanced/images.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/markdown-import.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/more/loooooooooooooooooooong-title.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/more/tree/one.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/more/tree/three.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/more/tree/two.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/performance.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/performance.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/advanced/performance.ru.mdx create mode 100644 examples/swr-site/pages/docs/advanced/react-native.en-US.mdx create mode 100644 examples/swr-site/pages/docs/advanced/react-native.ru.mdx create mode 100644 examples/swr-site/pages/docs/advanced/scrollbar-x.en-US.mdx create mode 100644 examples/swr-site/pages/docs/arguments.en-US.md create mode 100644 examples/swr-site/pages/docs/arguments.es-ES.md create mode 100644 examples/swr-site/pages/docs/arguments.ru.md create mode 100644 examples/swr-site/pages/docs/callout.en-US.mdx create mode 100644 examples/swr-site/pages/docs/change-log.en-US.mdx create mode 100644 examples/swr-site/pages/docs/change-log.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/change-log.ru.mdx create mode 100644 examples/swr-site/pages/docs/code-block-without-language.en-US.mdx create mode 100644 examples/swr-site/pages/docs/conditional-fetching.en-US.md create mode 100644 examples/swr-site/pages/docs/conditional-fetching.es-ES.md create mode 100644 examples/swr-site/pages/docs/conditional-fetching.ru.md create mode 100644 examples/swr-site/pages/docs/custom-header-ids.en-US.mdx create mode 100644 examples/swr-site/pages/docs/data-fetching.en-US.mdx create mode 100644 examples/swr-site/pages/docs/data-fetching.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/data-fetching.ru.mdx create mode 100644 examples/swr-site/pages/docs/error-handling.en-US.mdx create mode 100644 examples/swr-site/pages/docs/error-handling.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/error-handling.ru.mdx create mode 100644 examples/swr-site/pages/docs/getting-started.en-US.mdx create mode 100644 examples/swr-site/pages/docs/getting-started.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/getting-started.ru.mdx create mode 100644 examples/swr-site/pages/docs/global-configuration.en-US.md create mode 100644 examples/swr-site/pages/docs/global-configuration.es-ES.md create mode 100644 examples/swr-site/pages/docs/global-configuration.ru.md create mode 100644 examples/swr-site/pages/docs/middleware.en-US.md create mode 100644 examples/swr-site/pages/docs/middleware.ru.md create mode 100644 examples/swr-site/pages/docs/mutation.en-US.md create mode 100644 examples/swr-site/pages/docs/mutation.es-ES.md create mode 100644 examples/swr-site/pages/docs/mutation.ru.md create mode 100644 examples/swr-site/pages/docs/options.en-US.mdx create mode 100644 examples/swr-site/pages/docs/options.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/options.ru.mdx create mode 100644 examples/swr-site/pages/docs/pagination.en-US.mdx create mode 100644 examples/swr-site/pages/docs/pagination.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/pagination.ru.mdx create mode 100644 examples/swr-site/pages/docs/prefetching.en-US.md create mode 100644 examples/swr-site/pages/docs/prefetching.es-ES.md create mode 100644 examples/swr-site/pages/docs/prefetching.ru.md create mode 100644 examples/swr-site/pages/docs/raw-layout.en-US.mdx create mode 100644 examples/swr-site/pages/docs/revalidation.en-US.mdx create mode 100644 examples/swr-site/pages/docs/revalidation.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/revalidation.ru.mdx create mode 100644 examples/swr-site/pages/docs/suspense.en-US.mdx create mode 100644 examples/swr-site/pages/docs/suspense.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/suspense.ru.mdx create mode 100644 examples/swr-site/pages/docs/typescript.en-US.mdx create mode 100644 examples/swr-site/pages/docs/understanding.en-US.mdx create mode 100644 examples/swr-site/pages/docs/understanding.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/understanding.ru.mdx create mode 100644 examples/swr-site/pages/docs/with-nextjs.en-US.md create mode 100644 examples/swr-site/pages/docs/with-nextjs.es-ES.md create mode 100644 examples/swr-site/pages/docs/with-nextjs.ru.md create mode 100644 examples/swr-site/pages/docs/wrap-toc-items.en-US.mdx create mode 100644 examples/swr-site/pages/docs/wrap-toc-items.es-ES.mdx create mode 100644 examples/swr-site/pages/docs/wrap-toc-items.ru.mdx create mode 100644 examples/swr-site/pages/examples/_meta.en-US.json create mode 100644 examples/swr-site/pages/examples/_meta.es-ES.json create mode 100644 examples/swr-site/pages/examples/_meta.ru.json create mode 100644 examples/swr-site/pages/examples/auth.en-US.mdx create mode 100644 examples/swr-site/pages/examples/auth.es-ES.mdx create mode 100644 examples/swr-site/pages/examples/auth.ru.mdx create mode 100644 examples/swr-site/pages/examples/basic.en-US.mdx create mode 100644 examples/swr-site/pages/examples/basic.es-ES.mdx create mode 100644 examples/swr-site/pages/examples/basic.ru.mdx create mode 100644 examples/swr-site/pages/examples/error-handling.en-US.mdx create mode 100644 examples/swr-site/pages/examples/error-handling.es-ES.mdx create mode 100644 examples/swr-site/pages/examples/error-handling.ru.mdx create mode 100644 examples/swr-site/pages/examples/full.en-US.mdx create mode 100644 examples/swr-site/pages/examples/infinite-loading.en-US.mdx create mode 100644 examples/swr-site/pages/examples/infinite-loading.es-ES.mdx create mode 100644 examples/swr-site/pages/examples/infinite-loading.ru.mdx create mode 100644 examples/swr-site/pages/examples/ssr.en-US.mdx create mode 100644 examples/swr-site/pages/examples/ssr.ru.mdx create mode 100644 examples/swr-site/pages/foo.en-US.md create mode 100644 examples/swr-site/pages/index.en-US.mdx create mode 100644 examples/swr-site/pages/index.es-ES.mdx create mode 100644 examples/swr-site/pages/index.ru.mdx create mode 100644 examples/swr-site/pages/remote/[slug].mdx.bak create mode 100644 examples/swr-site/pages/remote/_meta.js create mode 100644 examples/swr-site/pages/remote/graphql-eslint/[[...slug]].mdx.bak create mode 100644 examples/swr-site/pages/remote/graphql-eslint/_meta.js create mode 100644 examples/swr-site/pages/remote/graphql-yoga/[[...slug]].mdx.bak create mode 100644 examples/swr-site/pages/remote/graphql-yoga/_meta.js create mode 100644 examples/swr-site/pages/test.en-US.md create mode 100644 examples/swr-site/postcss.config.js create mode 100644 examples/swr-site/public/favicon/android-chrome-192x192.png create mode 100644 examples/swr-site/public/favicon/android-chrome-512x512.png create mode 100644 examples/swr-site/public/favicon/apple-touch-icon.png create mode 100644 examples/swr-site/public/favicon/browserconfig.xml create mode 100644 examples/swr-site/public/favicon/favicon-16x16.png create mode 100644 examples/swr-site/public/favicon/favicon-32x32.png create mode 100644 examples/swr-site/public/favicon/favicon.ico create mode 100644 examples/swr-site/public/favicon/mstile-150x150.png create mode 100644 examples/swr-site/public/favicon/safari-pinned-tab.svg create mode 100644 examples/swr-site/public/favicon/site.webmanifest create mode 100644 examples/swr-site/public/img/understanding/fallback.svg create mode 100644 examples/swr-site/public/img/understanding/fetch-and-revalidate.svg create mode 100644 examples/swr-site/public/img/understanding/isloading.gif create mode 100644 examples/swr-site/public/img/understanding/key-change-fallback.svg create mode 100644 examples/swr-site/public/img/understanding/key-change-previous-data-fallback.svg create mode 100644 examples/swr-site/public/img/understanding/key-change-previous-data.svg create mode 100644 examples/swr-site/public/img/understanding/key-change.svg create mode 100644 examples/swr-site/public/stork.wasm create mode 100644 examples/swr-site/public/swr-logo.svg create mode 100644 examples/swr-site/styles.css create mode 100644 examples/swr-site/tailwind.config.js create mode 100644 examples/swr-site/theme.config.tsx create mode 100644 examples/swr-site/tsconfig.json create mode 100644 package.json create mode 100644 packages/nextra-theme-blog/CHANGELOG.md create mode 100644 packages/nextra-theme-blog/LICENSE create mode 100644 packages/nextra-theme-blog/README.md create mode 100644 packages/nextra-theme-blog/__test__/__fixture__/pageMap.ts create mode 100644 packages/nextra-theme-blog/__test__/collect.spec.ts create mode 100644 packages/nextra-theme-blog/__test__/date.spec.ts create mode 100644 packages/nextra-theme-blog/__test__/parent.spec.ts create mode 100644 packages/nextra-theme-blog/__test__/tag.spec.ts create mode 100644 packages/nextra-theme-blog/package.json create mode 100644 packages/nextra-theme-blog/postcss.config.js create mode 100644 packages/nextra-theme-blog/src/article-layout.tsx create mode 100644 packages/nextra-theme-blog/src/basic-layout.tsx create mode 100644 packages/nextra-theme-blog/src/blog-context.tsx create mode 100644 packages/nextra-theme-blog/src/constants.tsx create mode 100644 packages/nextra-theme-blog/src/cusdis.tsx create mode 100644 packages/nextra-theme-blog/src/env.d.ts create mode 100644 packages/nextra-theme-blog/src/index.tsx create mode 100644 packages/nextra-theme-blog/src/mdx-theme.tsx create mode 100644 packages/nextra-theme-blog/src/meta.tsx create mode 100644 packages/nextra-theme-blog/src/nav.tsx create mode 100644 packages/nextra-theme-blog/src/page-layout.tsx create mode 100644 packages/nextra-theme-blog/src/posts-layout.tsx create mode 100644 packages/nextra-theme-blog/src/styles.css create mode 100644 packages/nextra-theme-blog/src/tags.tsx create mode 100644 packages/nextra-theme-blog/src/theme-switch.tsx create mode 100644 packages/nextra-theme-blog/src/types.ts create mode 100644 packages/nextra-theme-blog/src/utils/collect.ts create mode 100644 packages/nextra-theme-blog/src/utils/date.ts create mode 100644 packages/nextra-theme-blog/src/utils/get-tags.ts create mode 100644 packages/nextra-theme-blog/src/utils/parent.ts create mode 100644 packages/nextra-theme-blog/src/utils/traverse.ts create mode 100644 packages/nextra-theme-blog/tailwind.config.js create mode 100644 packages/nextra-theme-blog/tsconfig.json create mode 100644 packages/nextra-theme-blog/tsup.config.ts create mode 100644 packages/nextra-theme-docs/CHANGELOG.md create mode 100644 packages/nextra-theme-docs/LICENSE create mode 100644 packages/nextra-theme-docs/README.md create mode 100644 packages/nextra-theme-docs/css/hamburger.css create mode 100644 packages/nextra-theme-docs/css/styles.css create mode 100644 packages/nextra-theme-docs/css/typesetting-article.css create mode 100644 packages/nextra-theme-docs/package.json create mode 100644 packages/nextra-theme-docs/postcss.config.js create mode 100644 packages/nextra-theme-docs/src/components/404.tsx create mode 100644 packages/nextra-theme-docs/src/components/500.tsx create mode 100644 packages/nextra-theme-docs/src/components/anchor.tsx create mode 100644 packages/nextra-theme-docs/src/components/back-to-top.tsx create mode 100644 packages/nextra-theme-docs/src/components/banner.tsx create mode 100644 packages/nextra-theme-docs/src/components/bleed.tsx create mode 100644 packages/nextra-theme-docs/src/components/breadcrumb.tsx create mode 100644 packages/nextra-theme-docs/src/components/collapse.tsx create mode 100644 packages/nextra-theme-docs/src/components/flexsearch.tsx create mode 100644 packages/nextra-theme-docs/src/components/footer.tsx create mode 100644 packages/nextra-theme-docs/src/components/head.tsx create mode 100644 packages/nextra-theme-docs/src/components/highlight-matches.tsx create mode 100644 packages/nextra-theme-docs/src/components/index.ts create mode 100644 packages/nextra-theme-docs/src/components/input.tsx create mode 100644 packages/nextra-theme-docs/src/components/locale-switch.tsx create mode 100644 packages/nextra-theme-docs/src/components/match-sorter-search.tsx create mode 100644 packages/nextra-theme-docs/src/components/nav-links.tsx create mode 100644 packages/nextra-theme-docs/src/components/navbar.tsx create mode 100644 packages/nextra-theme-docs/src/components/search.tsx create mode 100644 packages/nextra-theme-docs/src/components/select.tsx create mode 100644 packages/nextra-theme-docs/src/components/sidebar.tsx create mode 100644 packages/nextra-theme-docs/src/components/skip-nav.tsx create mode 100644 packages/nextra-theme-docs/src/components/theme-switch.tsx create mode 100644 packages/nextra-theme-docs/src/components/toc.tsx create mode 100644 packages/nextra-theme-docs/src/constants.tsx create mode 100644 packages/nextra-theme-docs/src/contexts/active-anchor.tsx create mode 100644 packages/nextra-theme-docs/src/contexts/config.tsx create mode 100644 packages/nextra-theme-docs/src/contexts/details.ts create mode 100644 packages/nextra-theme-docs/src/contexts/index.ts create mode 100644 packages/nextra-theme-docs/src/contexts/menu.ts create mode 100644 packages/nextra-theme-docs/src/env.d.ts create mode 100644 packages/nextra-theme-docs/src/index.tsx create mode 100644 packages/nextra-theme-docs/src/mdx-components.tsx create mode 100644 packages/nextra-theme-docs/src/polyfill.ts create mode 100644 packages/nextra-theme-docs/src/types.ts create mode 100644 packages/nextra-theme-docs/src/utils/get-git-issue-url.ts create mode 100644 packages/nextra-theme-docs/src/utils/index.ts create mode 100644 packages/nextra-theme-docs/src/utils/render.tsx create mode 100644 packages/nextra-theme-docs/src/utils/use-git-edit-url.ts create mode 100644 packages/nextra-theme-docs/src/utils/use-popper.ts create mode 100644 packages/nextra-theme-docs/tailwind.config.js create mode 100644 packages/nextra-theme-docs/tsconfig.json create mode 100644 packages/nextra-theme-docs/tsup.config.ts create mode 100644 packages/nextra-theme-docs/vite.config.ts create mode 100644 packages/nextra/CHANGELOG.md create mode 100644 packages/nextra/__test__/__snapshots__/compile.test.ts.snap create mode 100644 packages/nextra/__test__/__snapshots__/context.test.ts.snap create mode 100644 packages/nextra/__test__/__snapshots__/normalize-page.spec.ts.snap create mode 100644 packages/nextra/__test__/__snapshots__/page-map.test.ts.snap create mode 100644 packages/nextra/__test__/collect-catch-all.test.ts create mode 100644 packages/nextra/__test__/compile.test.ts create mode 100644 packages/nextra/__test__/context.test.ts create mode 100644 packages/nextra/__test__/fixture/page-maps/folder-with-symlinks/docs/test2.md create mode 120000 packages/nextra/__test__/fixture/page-maps/folder-with-symlinks/pages/docs create mode 120000 packages/nextra/__test__/fixture/page-maps/folder-with-symlinks/pages/test1.md create mode 100644 packages/nextra/__test__/fixture/page-maps/folder-with-symlinks/test1.md create mode 100644 packages/nextra/__test__/fixture/page-maps/folder-without-markdown-files/test.ts create mode 100644 packages/nextra/__test__/fixture/page-maps/folder-without-meta-json/callout.md create mode 100644 packages/nextra/__test__/fixture/page-maps/folder-without-meta-json/tabs.md create mode 100644 packages/nextra/__test__/fixture/page-maps/pageMap.ts create mode 100644 packages/nextra/__test__/latex.test.ts create mode 100644 packages/nextra/__test__/loader.test.ts create mode 100644 packages/nextra/__test__/locale-with-base-path.test.ts create mode 100644 packages/nextra/__test__/locale.test.ts create mode 100644 packages/nextra/__test__/normalize-page.spec.ts create mode 100644 packages/nextra/__test__/page-map.test.ts create mode 100644 packages/nextra/__test__/sort-pages.test.ts create mode 100644 packages/nextra/__test__/test-utils.ts create mode 100644 packages/nextra/__test__/use-fs-route.spec.ts create mode 100644 packages/nextra/__test__/utils.test.ts create mode 100755 packages/nextra/loader.js create mode 100644 packages/nextra/package.json create mode 100644 packages/nextra/src/__temp__.js create mode 100644 packages/nextra/src/catch-all.ts create mode 100644 packages/nextra/src/compile.ts create mode 100644 packages/nextra/src/components/button.tsx create mode 100644 packages/nextra/src/components/callout.tsx create mode 100644 packages/nextra/src/components/cards.tsx create mode 100644 packages/nextra/src/components/code.tsx create mode 100644 packages/nextra/src/components/copy-to-clipboard.tsx create mode 100644 packages/nextra/src/components/file-tree.tsx create mode 100644 packages/nextra/src/components/index.ts create mode 100644 packages/nextra/src/components/pre.tsx create mode 100644 packages/nextra/src/components/steps.tsx create mode 100644 packages/nextra/src/components/table.tsx create mode 100644 packages/nextra/src/components/tabs.tsx create mode 100644 packages/nextra/src/components/td.tsx create mode 100644 packages/nextra/src/components/th.tsx create mode 100644 packages/nextra/src/components/tr.tsx create mode 100644 packages/nextra/src/constants.ts create mode 100644 packages/nextra/src/context.ts create mode 100644 packages/nextra/src/env.d.ts create mode 100644 packages/nextra/src/file-system.ts create mode 100644 packages/nextra/src/filter-route-locale.ts create mode 100644 packages/nextra/src/global.d.ts create mode 100644 packages/nextra/src/hooks/index.ts create mode 100644 packages/nextra/src/hooks/use-fs-route.ts create mode 100644 packages/nextra/src/hooks/use-mounted.ts create mode 100644 packages/nextra/src/icons/arrow-right.tsx create mode 100644 packages/nextra/src/icons/check.tsx create mode 100644 packages/nextra/src/icons/copy.tsx create mode 100644 packages/nextra/src/icons/discord.tsx create mode 100644 packages/nextra/src/icons/expand.tsx create mode 100644 packages/nextra/src/icons/github.tsx create mode 100644 packages/nextra/src/icons/globe.tsx create mode 100644 packages/nextra/src/icons/index.ts create mode 100644 packages/nextra/src/icons/information-circle.tsx create mode 100644 packages/nextra/src/icons/menu.tsx create mode 100644 packages/nextra/src/icons/moon.tsx create mode 100644 packages/nextra/src/icons/spinner.tsx create mode 100644 packages/nextra/src/icons/sun.tsx create mode 100644 packages/nextra/src/icons/word-wrap.tsx create mode 100644 packages/nextra/src/icons/x.tsx create mode 100644 packages/nextra/src/index.js create mode 100644 packages/nextra/src/layout.tsx create mode 100644 packages/nextra/src/loader.ts create mode 100644 packages/nextra/src/locales.ts create mode 100644 packages/nextra/src/mdx-plugins/index.ts create mode 100644 packages/nextra/src/mdx-plugins/rehype.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-custom-heading-id.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-headings.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-link-rewrite.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-mdx-disable-explicit-jsx.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-remove-imports.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-replace-imports.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-static-image.ts create mode 100644 packages/nextra/src/mdx-plugins/remark-structurize.ts create mode 100644 packages/nextra/src/mdx.ts create mode 100644 packages/nextra/src/normalize-pages.ts create mode 100644 packages/nextra/src/page-map.ts create mode 100644 packages/nextra/src/plugin.ts create mode 100644 packages/nextra/src/remote.ts create mode 100644 packages/nextra/src/setup-page.ts create mode 100644 packages/nextra/src/ssg.tsx create mode 100644 packages/nextra/src/theme.json create mode 100644 packages/nextra/src/types.ts create mode 100644 packages/nextra/src/use-internals.ts create mode 100644 packages/nextra/src/utils.ts create mode 100644 packages/nextra/src/webpack-plugins/index.ts create mode 100644 packages/nextra/src/webpack-plugins/nextra-search.ts create mode 100644 packages/nextra/src/webpack-plugins/nextra.ts create mode 100644 packages/nextra/styles/cards.css create mode 100644 packages/nextra/styles/code-block.css create mode 100644 packages/nextra/styles/scrollbar.css create mode 100644 packages/nextra/styles/steps.css create mode 100644 packages/nextra/styles/subheading-anchor.css create mode 100644 packages/nextra/styles/variables.css create mode 100644 packages/nextra/tsconfig.json create mode 100644 packages/nextra/tsup.config.ts create mode 100644 packages/nextra/vite.config.ts create mode 100644 patches/@changesets__assemble-release-plan@5.2.4.patch create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 prettier.config.js create mode 100644 renovate.json5 create mode 100644 tsconfig.eslint.json create mode 100644 turbo.json diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..b924b86 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.0.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [["nextra", "nextra-theme-docs", "nextra-theme-blog"]], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { + "onlyUpdatePeerDependentsWhenOutOfRange": true + }, + "ignore": ["example-blog", "example-docs", "swr-site", "docs"] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..76a93c0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,3 @@ +[*] +indent_style = space +indent_size = 2 diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..1f27d0c --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,250 @@ +const TAILWIND_CONFIG = { + extends: ['plugin:tailwindcss/recommended'], + rules: { + 'tailwindcss/classnames-order': 'off', // conflicts with prettier-plugin-tailwindcss + 'tailwindcss/enforces-negative-arbitrary-values': 'error', + 'tailwindcss/enforces-shorthand': 'error', + 'tailwindcss/migration-from-tailwind-2': 'error', + 'tailwindcss/no-custom-classname': 'error' + } +} + +/** @type {import('eslint').Linter.Config} */ +module.exports = { + root: true, + reportUnusedDisableDirectives: true, + ignorePatterns: ['next-env.d.ts'], + overrides: [ + // Rules for all files + { + files: '**/*.{js,jsx,cjs,mjs,ts,tsx,cts,mts}', + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:import/typescript', + 'prettier' + ], + plugins: ['import', 'unicorn'], + rules: { + 'prefer-object-has-own': 'error', + 'logical-assignment-operators': [ + 'error', + 'always', + { enforceForIfStatements: true } + ], + 'no-else-return': ['error', { allowElseIf: false }], + 'no-lonely-if': 'error', + 'prefer-destructuring': [ + 'error', + { VariableDeclarator: { object: true } } + ], + 'import/no-duplicates': 'error', + 'no-negated-condition': 'off', + 'unicorn/no-negated-condition': 'error', + 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], + 'object-shorthand': ['error', 'always'], + 'unicorn/prefer-regexp-test': 'error', + 'unicorn/no-array-for-each': 'error', + 'unicorn/prefer-string-replace-all': 'error', + '@typescript-eslint/prefer-for-of': 'error', + // todo: enable + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/ban-ts-comment': 'off' + } + }, + // Rules for React files + { + files: '{packages,examples,docs}/**', + extends: [ + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + 'plugin:@next/next/recommended' + ], + rules: { + 'react/prop-types': 'off', + 'react/no-unknown-property': ['error', { ignore: ['jsx'] }], + 'react-hooks/exhaustive-deps': 'error', + 'react/self-closing-comp': 'error', + 'no-restricted-syntax': [ + 'error', + { + // ❌ useMemo(…, []) + selector: + 'CallExpression[callee.name=useMemo][arguments.1.type=ArrayExpression][arguments.1.elements.length=0]', + message: + "`useMemo` with an empty dependency array can't provide a stable reference, use `useRef` instead." + }, + { + // ❌ z.object(…) + selector: + 'MemberExpression[object.name=z] > .property[name=object]', + message: 'Use z.strictObject is more safe.' + } + ], + 'react/jsx-filename-extension': [ + 'error', + { extensions: ['.tsx', '.jsx'], allow: 'as-needed' } + ], + 'react/jsx-curly-brace-presence': 'error', + 'react/jsx-boolean-value': 'error' + }, + settings: { + react: { version: 'detect' } + } + }, + // Rules for TypeScript files + { + files: '**/*.{ts,tsx,cts,mts}', + extends: [ + // TODO: fix errors + // 'plugin:@typescript-eslint/recommended-requiring-type-checking' + ], + parserOptions: { + project: [ + 'packages/*/tsconfig.json', + 'docs/tsconfig.json', + 'tsconfig.eslint.json' + ] + }, + rules: { + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/non-nullable-type-assertion-style': 'error', + '@typescript-eslint/prefer-optional-chain': 'error' + } + }, + // ⚙️ nextra-theme-docs + { + ...TAILWIND_CONFIG, + files: 'packages/nextra-theme-docs/**', + plugins: ['typescript-sort-keys'], + settings: { + tailwindcss: { + config: 'packages/nextra-theme-docs/tailwind.config.js', + callees: ['cn'], + whitelist: [ + 'nextra-breadcrumb', + 'nextra-bleed', + 'nextra-menu-desktop', + 'nextra-menu-mobile' + ] + } + }, + rules: { + ...TAILWIND_CONFIG.rules, + 'no-restricted-imports': [ + 'error', + { + name: 'next/link', + message: 'Use local instead' + } + ] + } + }, + // ⚙️ nextra-theme-blog + { + ...TAILWIND_CONFIG, + files: 'packages/nextra-theme-blog/**', + settings: { + tailwindcss: { + config: 'packages/nextra-theme-blog/tailwind.config.js', + whitelist: ['subheading-', 'post-item', 'post-item-more'] + } + } + }, + // ⚙️ nextra + { + ...TAILWIND_CONFIG, + files: 'packages/nextra/**', + settings: { + tailwindcss: { + config: 'packages/nextra-theme-docs/tailwind.config.js', + callees: ['cn'], + whitelist: ['nextra-code-block', 'nextra-filetree'] + } + } + }, + // ⚙️ Docs + { + ...TAILWIND_CONFIG, + files: 'docs/**', + settings: { + tailwindcss: { + config: 'docs/tailwind.config.js', + callees: ['cn'], + whitelist: ['dash-ring', 'theme-1', 'theme-2', 'theme-3', 'theme-4'] + }, + next: { rootDir: 'docs' } + } + }, + // ⚙️ SWR-site example + { + ...TAILWIND_CONFIG, + files: 'examples/swr-site/**', + settings: { + tailwindcss: { + config: 'examples/swr-site/tailwind.config.js' + }, + next: { rootDir: 'examples/swr-site' } + } + }, + // ⚙️ blog example + { + files: 'examples/blog/**', + settings: { + next: { rootDir: 'examples/blog' } + } + }, + // ⚙️ docs example + { + files: 'examples/docs/**', + settings: { + next: { rootDir: 'examples/docs' } + } + }, + { + files: [ + 'prettier.config.js', + 'postcss.config.js', + 'tailwind.config.js', + 'next.config.js', + '.eslintrc.cjs' + ], + env: { + node: true + } + }, + { + files: 'packages/{nextra,nextra-theme-docs,nextra-theme-blog}/**', + rules: { + // disable rule because we don't have pagesDir in above folders + '@next/next/no-html-link-for-pages': 'off' + } + }, + { + files: 'packages/nextra/src/**', + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['fs', 'node:fs'], + message: 'Use `graceful-fs` instead' + } + ] + } + ] + } + }, + { + files: ['**/*.d.ts'], + rules: { + 'no-var': 'off' + } + } + ] +} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..94a6c17 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,38 @@ +name: Lint + +on: + pull_request: + branches: [main, v3] + +jobs: + lint: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18] + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.12.0 + with: + access_token: ${{ github.token }} + + - name: Checkout Master + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v2.4.0 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: pnpm + + - name: Install Dependencies + run: pnpm i + + - name: Lint Prettier + run: pnpm lint:prettier + + - name: Lint ESLint + run: pnpm lint diff --git a/.github/workflows/nextjs-bundle-analysis.yml b/.github/workflows/nextjs-bundle-analysis.yml new file mode 100644 index 0000000..6fd74ba --- /dev/null +++ b/.github/workflows/nextjs-bundle-analysis.yml @@ -0,0 +1,121 @@ +name: Next.js Bundle Analysis + +on: + pull_request: + push: + branches: [main, v3] + workflow_dispatch: + +defaults: + run: + working-directory: ./ + +jobs: + analyze: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.12.0 + with: + access_token: ${{ github.token }} + + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v2.4.0 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: 'pnpm' + + - name: Install Dependencies + run: pnpm i + + - name: Restore Next.js Build + uses: actions/cache@v3 + id: restore-build-cache + env: + cache-name: cache-next-build + with: + # if you use a custom build directory, replace all instances of `.next` in this file with your build directory + # ex: if your app builds to `dist`, replace `.next` with `dist` + path: examples/swr-site/.next/cache + # change this if you prefer a more strict cache + key: ${{ runner.os }}-build-${{ env.cache-name }} + + - name: Build Next.js App + # change this if your site requires a custom build command + run: cd examples/swr-site && ./node_modules/.bin/next build + + # Here's the first place where next-bundle-analysis' own script is used + # This step pulls the raw bundle stats for the current bundle + - name: Analyze Bundle + run: cd examples/swr-site && npx -p nextjs-bundle-analysis report + + - name: Upload bundle + uses: actions/upload-artifact@v3 + with: + name: bundle + path: examples/swr-site/.next/analyze/__bundle_analysis.json + + - name: Download Base Branch Bundle Stats + uses: dawidd6/action-download-artifact@v2 + if: success() && github.event.number + with: + workflow: nextjs-bundle-analysis.yml + branch: ${{ github.event.pull_request.base.ref }} + path: examples/swr-site/.next/analyze/base + + # And here's the second place - this runs after we have both the current and + # base branch bundle stats, and will compare them to determine what changed. + # There are two configurable arguments that come from package.json: + # + # - budget: optional, set a budget (bytes) against which size changes are measured + # it's set to 350kb here by default, as informed by the following piece: + # https://infrequently.org/2021/03/the-performance-inequality-gap/ + # + # - red-status-percentage: sets the percent size increase where you get a red + # status indicator, defaults to 20% + # + # Either of these arguments can be changed or removed by editing the `nextBundleAnalysis` + # entry in your package.json file. + - name: Compare with Base Branch Bundle + if: success() && github.event.number + run: + ls -laR examples/swr-site/.next/analyze/base && cd examples/swr-site + && npx -p nextjs-bundle-analysis compare + + - name: Get Comment Body + id: get-comment-body + if: success() && github.event.number + run: | + body=$(cat examples/swr-site/.next/analyze/__bundle_analysis_comment.txt) + body="${body//'%'/'%25'}" + body="${body//$'\n'/'%0A'}" + body="${body//$'\r'/'%0D'}" + echo ::set-output name=body::$body + + - name: Find Comment + uses: peter-evans/find-comment@v2 + if: success() && github.event.number + id: fc + with: + issue-number: ${{ github.event.number }} + body-includes: kcJr25JMVbNJ9*1 zh#?Izq#=eh#E^yeX{4HJ=uiAY0%;E819mg%HDL0OlYM?!r&{VeaV zQa5YR4(~IPgw)egi>Qa@)I)RXp*h#MIoFsL=eIV8YulV_+uYAyb35YLlQ$%_&oJ%G8`PHK$C?DN}P1kOrloE#Qq5sdL!+Tp(MuFr}cUKcBc* z5X+IfOHap+{jn}Zn^J9&VvApD3H2kjNc&pOLp|5Gd_$2sF5)Vw`fk`|ti3cX} zz$6}+)E?MuxDV#QT$l%3Q+Yq&iAg*$xd0x56fA^?;SqQg9^?8o#Dcbk{49n#Q{iT0 zDWtY*&3-9Nea-!AwHMdI<$PSOSrON)Nc|xCs~_RtumOI8|GQ+dUuN3ui=NZgHs;Gg?hMZ%$K$zh89w*rpnY#f7tlRvbWa-HlScQX(LHH&Pa55m zM)#!AJ!y1L8r_pd_oUH1X>?B--IGT5q|rTTbWa-HlScQX(LHH&Pa55mM)#!AJ!y1L z8r_pd_oUH1X>?B--IGT5q|rTTbWa-HlScQX(LHH&Pa55mM)#!AJ!y1L8r_pd_oM?o zp%>V&JM@M=&=^oC01AK@A!9BaQFOb?w()G-Sewu7qObUiC3wMo2Uy~3hk9K3$dEJ>Q{4D z{p#Ry=I7{?;xal`AsTP%Ui28AzbC~tF5(KsxI!_mP>gHq2t!*R zA*myMe}%p~%D-<5O@0|temPv>rA3fWi}|#ePm5K`TdyAR)(3-P?_h}eYyqx+g6p4P ztGR47m#yZq_k{7TFw0g83nVBAKoCL@hB{Ce>Op;I06RfLXatR+2{eUf&>UJoOK1hH zp$)W!cF-O=KmKLtc7q^yJ3&Ke1Z0OWn?O?_ON7}RT0kpk4Q-$;w1f800V3q8>Ij`+XP_Tv zGULYV3cElQc7<-x9d?5r&=Y!r4dfm)dqW@S3wywxuov`$y`eu0fPpXw$dPOA1EXLx z>>4&W7;ctz%Ua6ViB7s5qwFr6Nc@LDVf&VdzWtF3p-R!ho9#z#j|Hc8neWs{UmQZ`B1BxRG7O;R>V*(7C? zluc4LN!cW2lax(THc8neGAof;iOfo5Rt|v}P-d*BgE#5mO*(j!4&J1LH|fazV1GCO z4ummq5EQ^zI2aCrGvG`(3(f`y&Vh5`JV4g)e;xc^2mjZ>|8?+x9sFMh|JT9)b?|>3 z{9lLuoP#&#$m`%PxErPcGwtwD9XwPA57og#b?{IfJX8k{)xkq`@K7B*R0j{$!9#WM zP#ru}2M^W3Lv`>_9XwPA57og#b?{IfJXDAN<7+a*`x^ZCx8QB~6u;{W*8Kz4V~Kb2 zUQ719zSk8e%yHcxbgULapUph#^cA0$B!G2A2%L9ZajY6c>K8W_;KU$9iThx20frB^a2}phu+W!`g-HBvkS1Z3qrKd z5b_f`9gr8D_nPdaPKde-QFmeLoo6ZsMOU`&Dir>ki|@8vTVmD@VeJs#tE*V+TY0W2 z+tF{L&qTyiZ;gkgW1p97MI^C+NMZqz!~$bEQ9>ew#!7erUW8Tf61?uu!nBPyd0zu> z!Q1c-ybJHa`|ts*g%9B)SO=fO7x0y5TeFG%&4Iaq_ioXe*DE=-3RFcW40*M<6asc)A$jWO#eMxDl}(-?IcqfTSgX^c9J zQKvELG)A4qsM8pA8lz5Q)M<=5jZvpD>NLi6jrsF_iP&&mV?>o>#3W)wmGy{1jO(fU zsrowV(S;ZhOftn z2lb%=>;w&=5j2J-K<*mG2nrY@C}51BfH8ss#s~@+BPd{upnx%g0>%gm1Uif{f&vkN zj?f8qhR)Chy236Hg<#^401Sjdpz~!9 zff)I_SHQbo0XpDIbikLQ74=p^y_HaJCA8BL+Gz>xw1jqALOU&?otDr}OQ;J$U6gR` zOXP5_`B>ys$5l@EuYZ9eN~4I%=sMtDuNL$|_Ra5r}m9YRakqH#8^ z=mf6l1g_`=uIM#zDh4#1#ccTg)DH<|m|??BoS%3}bg;>mx=ygeW5R zSwJgiE0H4hsr?9-{yoQGtHwmD6YN8e!4$|d&;^sK3V`M&$ zs{`;7#*{ha^j=Rilt>pAtr^;__A$(NSpOanQ$Rzx_$QxZ154QJBlsq3Rd4T8wP)F9 zfm6#80VExX=NUR>Jol(9vEBD7{Jl;_XAw~aMmW$}E;`FaXSwJs;vT>V2Rh3|XSwJs z7oEk3GZ2kMXSwJs7oEkJD-hL1XSwJs7oFvzvs`o*;|`!Bx9y-k;CG?3Ty&O;&T`RN zE;`FaXSwJs7oFvzvs`qRi_UVSqO)9dmW$4E(OE7!%SC6o=qwkV z<)X7(be4}4pz&-YB^Xf z2dm|vV_n+aMA}^uQS^kgy!m(rdR#Pu1&bit5wvI#Z7_mdJwlr+q8&w$qX^b3g7tE+ zUQTc^zFM)L#W50G!E?24MmtU6{Z`%?^QT=Eh3?@qSs}xC1o&*(Hs$*9T-}DaV^Ztw z@>qV1qd7=1-v@)<>R`xQE$&9LQb<+`$x0zvDI_a}WTlX-6q1!fvQkJ^3du?#St%qd zg=D3WtQ3-!Lb6gwRtm{VAz3LTD}`jGkgODvl|r&oNLC8TN+DS(BrAnvrI4%?l9fWT zQb<+`$x0zvDI_a}WTlX-6q1!fvQkJ^3du?#St%qdg=D3WtQ3-!Lb6gwRtm{VAz3LT zD}`jGkgODvl|r&oNLC8TN+DS(BrAnvrI4)DR!EVJ6xm3Tjb^ve>^7R+Mzh;!b{oxZ zquFgFERKZ5k+3)t7DvM3NLU;R6Zk~}2@^<|K*9tPCXg_Jgb5@}AYlRt6G)gq!UPf~ zkT8LS2_#G)VZ!(tTlWoo3+v&Z@Ev>)|AHUjNBFmI@l)lt+xF!Et${R(JZZEgS^$Z( zwM1eGY~;j7Ds6Qd`toc&&jP6oiq2Tx&UsQQkWzt^#*tDzYOkd|QW{4}<06dSP2*LjbsM2X&HeV#%)3#y1&$KsC{f@4+|ro~l`Z^rTJsz5CeRDz zIw!c!39d77NO%w4hYw&ad4^UvQO2Xwd(b6+gfey~3r00#mwTX7H+ z07n!D1LMac$-SpH^8Pot35wwFz>&oixCPJ|Vk+>Q4`UCbp`quC425AZ97e!M*at?z zXrK%RWiTj%K^Y9nU{D5wG8mM>pbQ3OFerm@C>#cd!x3;K90fov#2jk#)h{FkR zA`ss(i0>H0cMRe?2Jsz(_>Mt*$2bj6hcnsv1V1{0A05Guj^IZ}@S`L6(GmRU z2!3<~KRSXR9l?)|;73QS_wb`XgpbPBW7i}2sjduR!|Q_942)G^+x46$M>0oDc7V=o zr+fdy$Ox@RnK?Jfxk=7Va&D4ylboC6+$85FIXB6`VJh4Pw*#5D<(ugb%$4eV|DA3q~w0N}r&Q;?ft1F_QZKvwwdF zKECdY5uqW{RC}Ln2J2_SEPQM2U%!jTLO+K#r{~G&XpruUy40DA5A9M{j8p6DD~`vO zX0W9hY-t8tn!%Q4u%#JnX$D)G!IoyQr5S8#20NO;j%Ki<8SH2VJDS0cX0W3f>}Uo% zn!%1{u%j7lXa*aa!G>nAp&4vw1{<2ehGwv#8Ej|<8=Ap}X0V|dY-k1>n!$!nAp&4vw1{<2ehGwv#8Ej|<8=Ap}X0V|dY-k1>n!$!nA zp&4vw1{<2ehGwv#8Ej|<8=Ap}X0V|dY-k1>n!$!nAp&4vw1{<2e zhGx)r8T4BQ{gy$WWzc6C+F^!vn4ukJ@}-xyl%Wk}XhWG`66V80u#D?ulFP%P9*U@q zmEPAPq(1i6sn6&|f9_3DUwB`ufAINB(M5gbeWJc*3qyVBy(2<_i1%q=XK!7gvo|f! z#rrnUmCw6~PJyWRd0iDy8RDO3$m5o>wV7uTpwmrS!Z?>3NmX^D3q1 zRZ7pRl%7{9J+D%FUZwQBO6hr(((@{%=T%D2tCXHsDLt=JdS0dUyh`bLmD2MnrRP;j z&#RQ4S1CQOQhHvc^t?*xd6m-hDy8RDO3$m5o>wV7FLFh|uFws-!*0+6dO|O-VRz^a zeV{Mw0eiw;&=2;8{xARr!XOw7Lm&o2xl?x-42Kag67~V^=q0m_O`A>9W|OqpByBcH zn@!SYleAefa>H0S7!H9$$<=chzd0O^fFt23I2w+DW8pX$2ggGkPJk2PBsdvPf$?xE za7Qs&aBQ;R*kr-6$%12(1;-`}j!hOEn>i9TS#WH!;MiorvB`pClLg0S_PI?K9GfgS zHd%0Nvf$X_YPbfjh3jAvOy&%)=lw>?{x`S@is0{XGfaV7;8vIlx50Gp0W#*;WX!R} zESL@V!5o+i^I$&Q4-deDumBzc`pRU?vB{WYlQG98V~$P69Gi?eHW_nlGUnK1%&`S` zYzyw#CS#5*xbs?Y=e6LDZD!EfWX!S2m}8SM#}=iq)ZCK{o;I0sY%=B8%*3(Dlw*@A z#}=={8}KHqfzRLzVH;s_mr)1mLOrMt4ZP3Eo?{ygp%FBOCeRd`L33yUEydkNE8bf} z8)ysdpgnYe2y}!_uyff;qciVapeyVGQP>r_L3eK+*>h~}9JI-vW0O6{CVP%e_8gn+ zIX2mIY_jLrWY4k5o@0|e$0mD@ZS;o$Fc1a-cb$_x$HopMu>(o$KoUEU#115}14-;a z5<8H@4kWPyN$fxpJCMW_8Gbki-rou>(o$KoUEU#115}14-;a5<8H@4kWPy zN$fxpJCMW_8Gbki-rou>(o$KoUEU#115}14-;a5<8H@4kWPyN$fxpJCMW< zB(VcY>_8Gbki-rou>(o$KoUEU#115}14*(1*<=N>>5bZC1+tBafJ_^g!R35^1@C`_ z1Y8MMK_MXX1~N}(AlpFZ$qZy0lOYMny>SEF2!Df{pa}jBH^UUT1#X3@a2wnXWT-L7 zP-EN$cf&nEwi<(MH3m^g=9xvAXBK6iS=5*Xv%SUi=@!$cTTGvBF@3tl^ywDUr&~;) zZn5zoEP#g~1q7zcmZC7RqztL>}?=Yw1G&`1|mfph!kxgQnZ0c(JCSstB7E%B7(7s2*xTR z7^{e2tRjN3iU`IkA{eWPV5}m7v5E-BDk2!Gh+wQDg0YGS#wsEhtBkKjPvaZ-7S_W* z;XC*q{slk4kMM8NlY0_vb0`dh;V=S50`*~1A13u-QXeMuVcr3E!Zf%ST$m0s03Bt{ z0(2A^n{4hWw8_+Dlc~ujQlfb3$TVSi8>Hl2K>$KtlB`WOk+W6!L`kwY+00wi8Juk9F6t~!Hd&l( z<}m6^PBxjGY%)37_)baLhIe!o*_>?rs3iTuCCqcwnVoF;glH=%7rs>z-ztf3mE=xp zTh)gKu#;%38j7D)BXNRiB6_Q)%!z0w_Es%e-%>14twdMVS`1Nb_}rH5+ObW0w&`sK z)Slu?HKMGq+P`e1IzS8}bCiziEl~#>hp9v0P$QxagTu@AS4Y6{tc&yc1UQk;llXiS zb2N%XXZ3f{RNV|y;1(c*mzv7=x5FKLz7y_Zc^dEc0wWD-I?Q0*OqdP#@p%r+WqBSf z{m9~uWbC$By&ci%o&a1mnMTLZ&h$1EcP}Kx!e#eWt*jthGl%e zob6Vy9=Rn`mQAKCJB03|Z?}ZV<_7wAOURmKlQqi@(FW-2EupWsged0*GHBUk(6Whk zZXk=6O%^SisON@1y}duZJ-oQh_x5J}>Fr_lTLaqjPj3%z>rZd*PjBx}Z|_fU?@w>< zckk^n3+Q!X)o;L?um;|Ow?WS>B6dyxtzv!={Wq8Xn@j)ArT^yAe{<=-x%A)kNWF`{ z>f*05_lF3%ZRF()Va5mJv5X)T5f3sMTem=hf&c^|1YxKHb)gNZBsxG#aLSEQCO_ii>)5X{Y{RC*TUB(7`u3`NESXcvA>`nAR!Lhc!)#RPd$ za9kggtrKh=E8nN9_eoouQE_i`5s`tS@)5h6$bK-7D8If}F7D4|sX1OX!}D{lFfvg< zwBHd8d|A|UPMOKZS-F(PVQyjxa}%|E4fE%qPU38CV$KaSG&n*5WsH!wrZOve?zu;C z&NM;%BW|6@xF+Y|=O&IY>JULcL>NJf7{8tovf_SinLjJ7OUKHorxcw-Cm7^nIQ4xK^}Vm8L#rUcKp7l-R87I{w|JT<{Dyc zh+o?_gL#6hw243Dls|8- z|LQMqVq@VkONye@A=s|GXFUTiNSX_sd+pygzTLcML~s(gMt{}Wd-Z)M*x|FQ%70+Y9M6NSGt)_)BZ`D{Hc^%~^`Em|)8o0h}w?^7h|B}(%}j|AKwQ{q=%52L4|~$@!EkY55ja z-n_L{K34q@ul!iHj#A#JZA}@ob}H5)h(UsQNkY3ReAMyMM};gKgirH?`_M{utNPo0x6Q zxw3mF<(BljS5ofBWM$9yY4X3Xx~wf*_A2--Ht$PsQQn6gy%^uo2l%!9Ya6hsZ7Qt* z*UR11mijyGVYBzRdG+;#+%wvXZL5 z%=%B+b!ATWee2}EJZ_LeH&=_1=)HPJ`>*9k$R20wUcIj>f441Ok^XHidV{9qQ})l> zPrq{w;{N*&`ZfR0*Q4w6*KBOrd!zE3U)6q-ZaXe)OG&q~ z7#D8k?|yGTOYEou)z%_6;z?I6!e+^7{!eN+D9 zU-s2s-0?5DGJ3_iC4Ee9>XyX4s`e0aWzN&lqAZnNTd7-eTW#4par^_z_Y~9R^?H~6 zxAs_2Ys=MjYX8latj$`Gd@o-Ay7s#F zzj5_zZGRP>{l(dD^LseCXwNoW)0*e%Ux~^nUgc8u`2Oeh<)zC0y5>G=JCQ_fE4O4F znOOP5;um`_R{X9JYf2#J-T7bmpSo6T!-5gvrQ)x8kE-Gtvqer1RJOK?pNY-YGTHjb zuc^v?Y}wNG*hlS0%#Qg2F?&q6=>^krJ{O@WmYq`#CoBKAuh2?zJ z{Og?CZgb!LG0-VqL+?0mT>fwTk|wGjJ%0<9*XKU#?ea^e*XMuEdD+`i(%iAK?^#(W zic(_LwO{nh`}yy1(R;qKP`NYO1}#;&vmLUuG5Pk^RFC{o zKUGG*c1UqHu~Y67-l2cnr;aLR)l1}Rf7^?lvv%9Er!u?hud^fXRo7)dy`U`Sy66jN55|$Y5LVt#`3mEvRL`&EzT}`vNq|g+-_@^HeJ$R@dj!fv}#MM@%0w1$oY?3^rLDU=X)gjE3Hpz z|J(F+sPUV4xt1!@Jt=yWuJ=8-HMT2XvGH$mzo^l}$m$jA3|Mct2wUsWbNy=8&_MP5ic71;Pt9jI#zt!ceF2$QJ-;U8} z8#`vcCEuQUYGcRy4cEsu=U6!%lzsQgV_&&nR=GN8GF{^pzli6ys{LJGP2Ynms{FqE zC{E>?>Pxx3XV>R{%3szJ|J%w*^>Y5vK5w4Z+n#5Y9pCpp-k$s1ar?@b^c{DU&D(R$ zUh(Gr?zi8H%vL+#&--Qj@AQvzO}F>C|B=qTVjjo#z6hJSzuM=$Z03)*%Vy<1Z?mo2 z+4h}NwRL5{Hm}~=U;ci6x0SJm|H%o|ayP*Lq#XL7zdvo`y}p$fBesd(b^op9qh?=g z6Q!%=tE%2}EgNjns*OeTw`eDNTlPD=Ye%2`Mp{(e z+ON#^T)UCEJ&DaYMm)Ps<%lmm$jD~=ZljxQSyW@AyV>4f)H(xpdmm(5_xD?C&uuC1 zZ(&`%x3;N-@6`V5jkMF+H{PbT`H|ZE9eH2o&w0xK=6}1qt=6<^>8oj_%IH?*lKw$S z`LE*sdz`Gl)&KN2F`iG>karjKJ!o-W6YvN8^M3k06?(_m{T*?J`6b=He%tmgZDmQf zwVWIK{l?boGsz!|@ITwt&#!EK<%mSi+LtBxrK`!lR{u@S&y|+Gyfmh`N|@p{wwx}O ziK*nR{z4QRVe??|zIiDBQS)&AcQubR$C=$sa?_Z*nl%Eb%88Ym#Hh{)heM9@;X(h3gsjMQwz`bK>tSE(NYt>sIBc7YD^Ux7}6PV(P@&VkNy zLtvM{F7l^9w?JR{pFsb>aHRrc17p=rfg=M)s)m7ifd^HiKuMrfH4nTM_&~J@d>8m$ zbqf3x_(^pRUKhMhbqOYeN!2xYL-0nmORy+dq;?J79=u(33*HmFM|BUnL09b-oFAO8 zdITQ`KB#&IQ^AGG4n7%NqIpJ{lfj!gz$jyVD*>qhvARZnc*+OU#PQ%X`DuT7$_9a(Ts^8 zx%fwmrea?)R3z9zIcu&Uk9b?-da{GJF>WJ2 zcvItcGK9A=?jY}XJ!7^pn| zz45y7mDtJnn*7&08yn0PWIJlfGnhhVE3*yDZOslWN6cM$W@&eGH(q<1gLxf7UTo9c z#~dq~YYiegqC1Wxo76ayYo#>^uP2*V@!LYPkS(tAF7s~I++*Iuex{Kz+c4*tb46Wqo_W9MWxK&KbH5l_7)+lztvxKw+2`-)(o|ViI&!IYlP@%jpR8{4Xn}DX!fwL zwJ&S-v-V?of9pinpJbgQnpx+PpSvk~^+KKqdXaSz+gxm2%Zs>Z6P2@;c9&FLp&EFXZ)M>oKv5^|OBfO~$$&irf`Z{7KSy$F&xe>X+4Rn1op8L^)eBh>REnBm`4LQM2(%N5~ zi1y!^Jm8&WXVFu3At$(ro*&AyX@~LLsHSqb94?NMBjgBiytWV`q%DMKtStmvPL{}z zyi4BA@;&k%aj2Xo9}|t_%(;7$r+&38i|DXE%lA z5}w`^kfoD8{&Cpv}YOFYx5i+q`< zIvH{`&vgpRS9r3MAzziRvOXhu?u&d)zRnTf;Au}``KDaMw{OX}Sbm%5J{j^|`7X=v z$@fJsEZYa7F1BqQ%OCRuC=)C9DcgL`Q=oduFXR`Zx%`Lx2j~8!{E}aNCBI_%8~F|A z_$}Gf+h7UTi{{uugG}Y7vP5fb5k)gBVgvGx??e{$KB^&k)Q74@WKus68%e%))s$@N z`(PULi5AXj?}b(gw}kYvhgbdyoyiqjO zo`k5UJqecaB!s1X2)@OKU_CyB*a;uvDWQUkf{VyBk0&A8<4N$mpJ19?^wHq5;4=2P zoP6~4f-8b6_;w{Z>FWhwAS-cz~!E9?0{~x`YRX2Z{FK!QsJT7wvzD`r7{x2L8uE!o>4X zzUN`!c^rbDaVQ>!froJ^uUF$^7(D+wDca#{T+i~2_!$!aeJRV@w`hqM{{qX}!)VFV zXRvL)pV3mh&NF8W-`i;EdmAlz{>*2r(LP5@Jby~ydmg*sc~EYihPj7mXY7g3Vc>II zfQO;I4I|InFz_~RBd4qOGYsF)sPB6cZGBIolkZ71#gkZvpYgfz1+QP>Rn+sniq^hY z5%j$Z3$LOBc_$L1xNf>w%<5)u`Oy5_SEOz$21QRdePQJa%ybDj_Zv2Bf zdHz9T-#>`>{y}5kKd9sT2aSFIAcBAJxM*xXftRqq?`T z-&4+i;VW3auh7o?1uwzEOX!aupuGXh(%yiHH!z%K?G0GI?YAs#`y2YU-@x`4iaNfH z5BWAe?A!RTZ{yqhHom=Y`c&9>$`-C7N4rW5o^MiXU2T#XsN)ABJzs z5B6<&TWon5Hbz_VrdaU+%Rw0w1Iw*=n5TUhzAdj;Zp-WO%nw7>=cym{vFnXkZj5!W zFPre(kF1TaFPlp|NZC@hWIwI2_eP$*H)K1W0Al!7U;6gGE%v?(d*~{=V)J&v_8Y$K zH+|c0`L_Q+-}VoXBjv%Oi9D3&JX*d7u#?mtfF-Y$*NOr1I(Z#?sO}By<9h>jeQzKv zpWs;|QG9|${OW0Zf;w`sTr70Y@);~>2~TdcWEu~k10KK%*002(TfRl_kY~}`VA0=X z{TlhU2+DWldn~_?74P6%@y1y3kNE96Y`G;r!IoRTEpI44!m7Z&ZmWmXLu{k1d!Ib(-p9A@ z9ewL=`_{dqdR9G)AERwNPx8aYkM(W*uGsjOcm|EO?ghSe@9JCkU9s-3iUU*z8^0em z{&le{)_o0IzN_99BYo>W%(w2l`__H1Z`}v^)_r&NiTVWVuI+lvx9elnx9VFls){Y| z80aYW4eT7)Sq$|p`ayYCyp?aoTLotDY#Af4Aiz`00}FYkOryZkz%rJX^DLQ0u4{{4&$r@DvEpgA z(e_*V_Pf4sznfyev01*IwtPEnhB}5ii4NH5UZPIO##&pxwYGd~9rmrY_NHxim(Y!&8%2xIO`)53y*YHVXd9Xm;#obuEpO}FasykAH3{7nx|?scMQ<9K z#rH*T-X?rinAn4ILMXhfWAL3^xk52)7Cs;|*L61Nh}2Vh;U@ zHasYf77y_xxOqkkV-l7+NnbyK?RAa688fi8Q;j!`?~Rql55|wiXV}=G#uw&rb2Kr# z{pgYJO+4>7bA)+3{|A^S@PD9rk~zs7gI&GDJYQQ>^J;AAVtVE!SiV_iskxM1_e%Q8 z^UPKBlJ7U)w)&ZmW3`4^&9GGaTJ5X@i1~H0&bKb42RqTa4$C#!ddxaX_c5(&>0Q2T zO|o9K)>zYYFA~c||Ixb7T4((m`}LFcUu!XOLC<;?n`2oeSeuabytXjbQX+$mtu)r7 zx%Gm!7}krjt!!tlk{x9y>t$^#tXH&UuwKOu>|=c;N6US!Z-@jQY^~Qe!P=m0f^4X5 zg6yR205*l5pzNo6f5Zxl>E|6n|E^RXg^ph#kCw0VKTd0LdA!!#@^A^3Xmb@{4} zxXDbgELbMr(5*_osaus?qkUlccBosZn|vqKGi1wmb=#63=(Z(4(rrtw(=ADU96B#_ zp8Qlt+~jAWM2M#khi(Z?m0yHz58W=m3f&pHQ+`d0nI^x{?L)2)JrR0Beji#JS}Xq* z?j7zce+cg#9xOM|8YaoI@Gaq6lnUP!zDotd&xV(%pdWXu8~!%DUj4uJz6MUGYWsif zeV+67%y?-?67&A*ElH9jSCS-Yl3a-iNs=Tq<8{m!Nz){`DoK+hxg|-iJ4ut?G)W~_ zCCPQWZpoG8N<-%VUF$sOcxJp*zuW!&e*e$^|2&_y_Bv~?z0W>t@4fcR*?XT@cfb2R zMy0h;*4v|AbOLk*^uTpC+`fPTfFXe40DkK<4s~N9pa9o1&;!i}PyN)~20k)h@Cs`b z=!L>x@3QZD<{!;u`p8^sFG3P?Ai+V5b~07R@q?HXKddJI zc*+0IIh6*8;$?SA1drq_U^;zn`ur2&`0?@ikeD7{T-_J>Fq*?g-DOK?Ktgk&OMyyr}49KT3tkMp0#4SxN-;+MuR$1|>q$DX_RbxF`+ z{Q7vD(;L4zek<^fc${|^zbAe_@S*slh(DANj=GCHV?uD>^qJ|i;G3Dy5_#d#Z4%mp zo}51I*WrXtzfL|n{$pVib|zqz(XYT=6JS|>Mm{^CFJuNJ3;`}lm;*d7p%i#=!n43D z5>^ARO?U&iBH;tzEeYFzhbN2z9+xl?*h^JG!VJ*AJO&As)heqkO5;g!!d~`GIN-}9 zR3@T0pIrV_v8ASG9r42^T8Xg%9hcaUC^0@U6}V|)E8wqNtDzmss5>OBFa@#qr|yUGI+3`3w7c+6Xz!`L>iVP zE(2bfSO#34i1R@bHzaNX{v>fb@Ry0$<(RlH@nH44Bpyl9;5bROqxh_1N|G}}PK+~4 z(h+lYoQaZCox?I&u~~79lbRo+Jf`%D1KcS#y^ES<;FoRpu|6&jh&)-`E%(!;F(hqH z+UnCM(@)ZlB-m$Ybe!mXPZYghIESJ*u-;xg$)RM}@Z?bD5XK(;i*eoL28bsvxiN4~ z`cTHn$;W7q^XqVOCd+3|%q;l#aB`<)=sCb`gl-wd@qF7K$B7R0pQF8$c&VzHk{-#~ zsI8G+WpZDiP9C0&RwKXzgyvkU&WB9a{H%pPhcmlo_JD@FCZn|Yw8x3Y$rEe(CUd?- z!m?!YjN}rZlRPJR9yq1Ri-DibXbrp~dA0BBg-TwV{08_H$shRqhaA`ZvYtOHLW{-c$OXG9@RAnfXLb8y&;Rl|G#kml8_^3`RhEoZkxP zo-$_Zl)fiR1IO7gCI06yN^2QE>G3!v^_THeI;3>QU7~Pm_mrmKv`T4PogXdpGjz|a zZV1~mtG8gGQv_!sU%>Z#|8qF%zNfyIm#Smw%#ySrjr{;QDMML@DTpnaler~x8?HyB zj7Ciq`sZ*8ax)TYR?1w2Jr1XK&)Pub;grcK(@rE)Bh<_j$z%=98iCRf!6{$*bjtjc zg+A^3dXgzin4hxjM7}92Stg|{rTj#`)#DM#w^HyFK0oU2o6G}$xj&q;oqcQI zPik;>r|d&)A|H)Y4yGUmkCUoX8!?@l=yReakEgxfc&fwwzz8k<^VHf|lfkLav8ASS zY}I@{nd7k6_ikFBEzgN?YV+!RKbKQs;eGm8zNfZJ?TDv%%j2XTswtD&r6wmTtdyUu zOt!R|3~Rasw9QcPr)>vqW^E1X4X&YnAGvW zgHneD^qACv}Dk` zQuhdFzu-fRJ<0!WjP!(wfa?lI+CVo5=$2`1K>Ii|pnIfcgYJ>mUa&`dxRY?Y9><4o z){-o?z!99**Qe7;(&j+EByAk|5}Kbn z6D1qCeR{mOC^=axxrg?@6C+*aoX%*>xd{%+WOaVDOikKrx&HTHqX08Tp@6;l6K~c%`dtZRQOALo2$p)0zEWsOe|kCm-b&wq7-W{xn}zT!NyeUx{qX%V zUCLobFVOqa4-#bz$`}UvNQMSIJ|iF4$*2vyF=I2woKYXpC?gR#Jp;P(;>lRbz8(#? zHDF`LD&Te*9f8;Ly}TGQwhAqG&)6aKt|-o-jH8hBe7j_HmpdYD8GSPP154U6MrMow z?WJvF#&pnr+KNHX&UhGjLB=9rFP`dYTQ2gPwlx{+fPZD$JSz%~hB<9)fg^8@#LjxT z=5gTLKx91Jm}$1dS*@6YZ!+jup)xaD;<}B{?K3-pj-D}#nxDzc&g?5v0|XBdJY4W7 z#vDIFj}tm5Io=Es_%i?{UR%Shs%QCwGWo28UBMV~tKl!DC{k9v68i>xDl$I+mN6z| z=8E)A!P2rt*Bvh5kUapo=urS=S>SkYIy}qZ&5e7rWb!@^{z!jB#+w22X1rxA?2U+l zdqbvQRt~U?F1=8|xqM$9JpoS>JX5gfhtnLHRrC5b(hh=G4v>)!+}!|4Gu(XuNvFq; zaAXV!yMda5SL>)FkX&b2muFV{a?Sryb3cXV3a-p{i zy_;#X57Xu#p*j7^Y|XTh&G#~H68wAS8#f8RFLrw>;}1fg!TiuanGRhkY2%WqLbtja z@$6vQ{D;t7LX`O}(^hAut?oj{3EfC!=8MdeLcb&Q2TWsqFXZimLjOVN`9eP-^b(;f zgx+s~%#k$1-1!6Z&?c?~tcUW!jK@!Hy56E#{j| znKr$=`;h6-Cegs>LT?utlyk^9!WXTEWF-Q2F|d4B<{Ml}m60!WPoaA;t)@vz@&zwu z9O@;ZvL!aTdr0nXWi#KphWX}Urp=$2wv_O-&{DdrmLhYt$Vfa`Y0vVbm>*iqbm(cJ z#|eEG)A~WdQYQ6-l9FebqvkMecCh1#)iND1cxq3a87C7eqH z_Yu5I`#p1v_XO_{-!J*T=9lbi%9EP%r1m+I{&SdbZxlM# z!y>s#Lah>dfzS(>HlCB1A7qX(PdJkMhLj)UVqOu0H9G9;rDurHcQM}>CZXmq4$0aX zV;KADZ^d`G_{O7xDdT3L&l0+|#BeEdbX$=hz*wQ}0Owlqz3HcA97^Jml4kZk%JB?f zj=D|KJb>lZZ4!2_&~t>oL2#kqQ9l(yX0V4PY~oK#!5PW4-tiN!6)Ke2&XX9t(!N>l zl`QfbgkK@Ci56{)VxnT5^v^5rf64Rkd;k1(YmkK9GIELVd*lrkN zZH#Lj6Y`SFA*s=!w%9SMLhU8CmeRuBDs+LwHj!z)MmQG>juDQu=7&Y|ZWHD>?KrG6 zR%BjgjNNmBnZ_zz#!H13n{P{A+qoRdeo6S!3fqggm2}S)&LdcP2m2}XCme$nC$#9$ z=Dwn`9~RDZp{EM{w&1fx{;1GmN$gUgi{*~*2)&A*-7XV)soeJpp~uL5McddDgu9qt zJWt787K+T1f?pDj=+=IQ^=v;WoTtQh5nE$>5nEkg>~jF-G%ph0QlS?!ZGOVFHIyPH zFoikBn}T0w9I7Yu6)dl&3#UHQhS&sS8;3G>2xkZTI<1*DPYW*vU+ReQD9f0u+1Fex z@}euFR6@xU8RLcj5WVYd$jlPVPSbHUQ#^}m1C@*c&uP_daq*zGf5|NjZsirXPdyBO-ID z+_#&g;Zot$7P>a`)o6)%6w{$j;=7mYogp>Rcvqg+5dO`K^-78DUCuS*UEw#B*cuAI zsnFL7-H5RoC7kPp(^u%eOk>vtM zIg+Z+n4>>q8Y_1NGYyHb>SmOY?$WhKZ>l}w#xWx)4*ST78jx|x?|LUvzbmimkw~T4 zS6!J%yKtsM6(w-I$ZcLXZsIv@tQ>byR%0j@Uk9yCbx>1Iqtg+?8PpK_&>PWN*l*s1 z;t?{Dk|d7AUld2&ZxTzr-z1j$r-&u_#v4bBp^bwXZy9{!oj1|W!GmubMPCgb*XkUq z1a7Tr1D~ssf!nCIz~`y%z-`q4;PcgJ;C5;{@C9n#;Bn`)Qp9hCq{GYOY8>OapvqZmz=q-@r=d`8m~<_lDIta zE&R79B_?%B%E7zv*{KIpo&~H2>`Fa|jkE_-GXXsSqXF{(Z=@bfYnYakwjynN+J4L$ z&duoBZbrME7w8L`wtwT&ja{+az1n|8*W><|^}np7+JDJq`@6O2R?uzH<=wj%ci(Y^ zz9O|ps~!bcwz+C%&(1wJ_dIx2!>d|f)#Iv}SFO8hORqM)`t%yvi+6a>3cdr|DuER10A9tsge%U z5&DUaQk8;cl~x9ZbS8$GwsOohYL-sY$vQ=+>NK6MGjN(r7EY1DX%V^wPK!8Ox58;M zt+6kqjXqDe)#vMW*qzc|U#L6ii*!fq1^t`;QvV&hDgU9r(qHS{`WwAR|5NWZt~2^# zZ%IGndZWK_gE7DuXyh0-8iS1C#+}Aw>?-eWUSTygbIcpfLA>+KyvZDD-fRvtZ!xEt zMdsbuT{emLmYMU-$FM8xaq|i62YZV5fngWe^H!pjgx%07*g2JErDHF2rj=zqjy=w= zS?hR@GxkZnWxdV&q^t_-U2B8&p54N3X`gMkvd^(w+r#Wz?BVvU_6YknluDdgfIrEJ zAPPHlx1cV6hTXPJu%EUQHN%db5^An~)b*)_Zh$j3F2_FDGqEdmv))2IWKZc;daM2` z^)k8|mr-Brv$>Y~8N)CF8-g97qj3_$L}MZi#Xh|*bhGTo8*cW-%+0OXgExRi@{`h7 zJn7wZmw7+tkS3aQ%sG^gJ#vrIRCAfRjHX+4tcG;AHQSm^4`5gK3Yu;G$tt7yc8Z-! zrFOcVK@06HJBt?C&F$v&ls&*6NQ>=~B5tNcx6^D~e5>>itu3D>hs-x zi8dOsdW+tM5_G^IoXrtSA)SbQdllxtNMoPgLEsJM55Vu4hk!SlKLWpRRsw&3xf6{& zdq=R3@fGaa`w3ScnMZ*)n^oA!yVLv&46TmfEtp*~%(dpn7TRocjroaX!0%Hl1iaNU zvEQqY`I%+m%EQ|%Sb6hv3$@VPj-j?Tzp!v-h`GaxLHI@HU#(bN?X+qE|IMmR4t8=T znO`Em60x7Jy>&S_jm>29?^a!u*yh%SR(G<^6myq#8p>}AtAlj~B$}A1=0B`Bl;@V# zMOF`R;>|SkE2|#L_t{oQ>q>-4H@~*(qqMiOF1C6?BEifscUz~U^q*sOvaW(erumK4 z0Cl0Y^*gHYFV&P4GLN(*nOU%(FQS;56iW!#$Jl37Qj3&{6DRgsXIky7%W%p>SMyt|k#&L94e?!O?z7H<+s*vWYK(Xw1q^>+_R+%U z9jxD5@wl35PDc!-<^e0gI^XIFdZD==rzf0ebpib(OId9#oPNU+!0-d+u!^q4KD>*u zmpxk#!M?hg*uDNV_LIMhz2iHvL;MHq1HTaazb`fVV7K>J?C*XGJGxh3_uNM4uP*e3 zldGVaGoXtz`6LeHdlTei0`#7Q5|DyCPD3tcAfK|36V0IM7SQO~&{PNP>g|Z#yqDtH zFT=BD<9YJU2YIh7o`ui1;J$*_7GMu5TG??_tI=}oCOqL^teK`*r2lE)XZ5pWMRwS~ zq+h}g{xV&Lo$hP(TI|;^*X1}Hhxg5!*hBaxYTkOi9u4n1`W@)~74sEXLrv#cdDh+N zp1f+m3cSu<2fPt8S<2pIqouMxx3LS=-f8ay{=1F+_4d~`PAag!vw8IPgMA42h>i1i zc%K`(G$xOs9ml~gbtlG&0j}lL0-2HpXZ(j+{yhN@Fni$z*o3Efv^A|6Yu+*>yANVw$E#sqwJAi`55OLt+z7F6wBkGdAF?wM^{1FE+=Rlg%aA z`+UUeZcVeZ?TL1YU2bo}e!@O(E4RJd!yW3*a@U0?hNp+i!<8}hW5&hIh*=S{C)SGX zRV%qx^ICms4Xd@Z)`8k>YagnUT&GQ)k#+LxY^@txHy)#xcGQWwp)ZK@qR?|3MY)tu z)2Wzdqj$1^79H23Y^5C-D>a5$pJL@<`BKp0=eFjD#(fS`sBWN^oU@}d^StGM(E_#LwX$dW(l~hLM zG)Av zTfmdiQ{?zR1TLZq;0ZXrg`a#Q@Fbk-!cYDl@HBb{Se_iCG>#>zlqfE*d8#gOp{fI% ztGIj@WA`|hr)p2C(E33ZW!{>p&;~*lt)f+I&jT(}XaNx-QZ`j8czG(F{Z$(Kqof}z zZ>>?1I#L(aLZr?HE>vxRXR4OKxvDjAu{sC1NVNiG zMX4BvQaGJTkZ<$QuUt&e(h6ElYv~PW<^yO7JxkRO8ZJPZt`~QL>M!n8g)=C)wyR!n zQQOrua8cXUb#PHWRUdIDsNQg=;rd!}C#$Q)ous-VO?j$2@OVC($I4fi15Z(0=L*$j zzy*ry+(h*|;K@pAmdXZQq%H-XpisZ8sj3_BB*nFMhT=LcHb8MX&a0MV1DT_^^cO2B z@rrBCRK+!9nrAK4T_TeUTm)O;TZBjnR8z#a5IA2=1uj(iz`3dbc%mu-E>?&M>APF< zlyj~zEJ{=fRuAIo^B^$?ZXw)a$mgm1feSHWL5)@S0T(E)L%C`;aIxaLbzHqukAhpM zxD4H+N`Yr8oXCbS3xJE&W57k~aY;u*YEA8_Gj+%4yB{pVFy#Cg8h`ROK)s06p;oDt z;uflx#GRm4h&xHGfjbF#@-ke`TdvD_>UrSt>QBJ=>N(&k>IL9J^$c)%n2**a+WNJp zPN-2m)W`74Q=b4As84|>tIvUp)n~v(Y8&tbwH+6p{L?E#*lz5uS7s=eUlseQnO z>O0^9wI8@xeG6QqzLy;379Dl~Iob<#x&JT8QywX*9}!2MI*iu$bM+JOc6Ai^3tb2N zd{qfNMOAUztO<0X)}X)BA>jSm1pZzt@C&pB`hd1UPt-0_R7X3YC+isCVjT-koMxL@ zq-z0B(6xc5>bk&_^l88|FfK>?tzj*#>AC^%{TQROF3^5!ZvUryHB!fe&eKhRgZ5i@ z!Bw%o1h`1U5>#)$HQSFo-4nP_vvs*g_W&-?R|3~)zct&GLVW}9Ox+(iSN8)h)@)gd zG}?8<&F%Ne+n?jwa6JrR^Ykd-e0?kM6g?8SP~QQ3j~*`?ogf;WC>p&5`~p1&c&45t zdc7U=M12$RWX%?-7;~DOo|}OuXtqvM^_@ste?1)ZBt05*j=l}_44nr&4eKi+Etj4F z>Nwk>*{)5h5J|P`#~4!2Z1NmZ0+?TaPQS@ZwfW63&K1JJXtRU zF4j)~7wM-&Z;=)aqZamg33vv^G@P#3p#KzU&-`+%m%~3#vqi|qd83>gdl zD#m(Qir8JvHf6GY9(aQOGw@Ws0(cTmFXd7swN`V@FVtM~tF_(weQ@&hM)7?QI9GoF zT&zEobl2$LXs*F|`g4)~EAULswK-RFZ7$YZfs6ExYEOIsygYqS{Qt%NCu+krYMzyc zsU4)zK;1&TsCibdVE`8!sCibA!L@CIf%@kR)`viQZTQLhLdTUw=}*2z8;n{An`fK` zJl^2imT%Mro`U%#zIzgK{W~KWc)yVX{Jl{d`~o8t^Z|ow<3t0s)2U-fEjJRtDK;8` z6K9+Wy2wC{M>-RMry8iSPJg2g=t&0Zt&?MLEuUeW1^N}dXu?w%jX}R^Gz4D9HQs0j zZnf6hNN0}G6u8*P0G?oE0#7xvfFt>9bOfDeTnv1I*4nsIe6I%1H?9IMGTLEHJnZ<{Df>iw&;t zCrS(IHNv94BUAzKOk*-|F3y}oDK_$fi;XG3MaEP~3%A(6%EBA>B6OZH3wXToFmS$6 z0zAdwnqFuW0~Z*N0?#xa0-k8h!F^og55O_TT;N&;>N|3{2)>hz1;E9|BfurbOyCK| zFxCN2HC_Rpgp+&uXwB`>U-5AICXk4PJ~>KlOX?sQy&lM({OTh z&6zNst>C#ZZze2^QmT$nc#cK5NlFylw3FZxy9Y?Xm@C?g)J<99p3JO=7M&t;*u z+FeiwaO!YGUYTX+U5>|Swgj^Y3o(XRg;8t;#$wwsE4?3c(w3^L8mUy(60^~rF&EuO z<*4Cm44z|#nyu#JIhLz3oR+;&eS%r(J?fw)9oF@Ad}KDdtL~-yVSaC<&c#f1v7W0- z^-|6AFCqIK0I!2UPcfx+0)@1k{xQ1#5w)AO@r4BjRjt%hCTtaW*sQ7?N2&lw>N(!jtfJzCd)PPD0sPur!2&l|}$_l8a0o5#^ng>*i zfNB{~X9rZPfI26jS_jm*0o5j;&I_ov0d;;rwF{^V0;+vLT^LXu0_viG>J(7F3#g6( zg?1&9ADsj0k_grQl&#G;oJZ`pH9<@Bv+qq>n{CY=cpGxRIVf!F%pv*A?VV?2={%zFkF=9mTI zu?C03d!CO@JX`N`qor&5cxzxzB+08}{6EKu_h*rR zbbQfVUbE!ML`xjwd2gqxYl+`iF^6kabsz7VOTw`~;mt}^X~rBc{E+W{iIKXOk%{t& zw|9v1^cp^BO>`sGLHy3B?w5`)d8niKCyMWxHGDVYobw&>_nz&n8vZNEROQ|uD;oIT zO=?KYCQB{w|5PqAIAb4@T-GJ!=_B#&mhs2_c)P+eCDoAXMvm$o{l{E5%caziOC%TT zD60K2eqhP8>XK;(u@X_&{A2c)Wix=4)l_Jym1+1gjCDEQ^<820u&%UvT31=UaDH&M z#L2c1@7^Gd&}pRz&vD>;FmTycCI=jJl(A+3tJ~z;0cfFd7hZMZg^)Yp9ZmfcuDm(H zY8-_3tOAKuFvKcY5@R^(X;m86m)3y#03x)WNC$t(fbdM&QmefjVY`SowMf-$k@QlO zNvGi*^;(3u5Njze!di)ou^QrcSn+U)b(z)8>S}et+kQo-;qB@VCv0!{-MhSLkBT*w z>R|OobF9y3iS-w)u)?A>R#CLU`h*Lxs^B~ewvX^tjuX7~KT&LhsAceGU)DY0?f&uW zo~8yXol4Co_?^GG$b2eT?^JHRX05YMxUvZvi{US2!6bAtaYntYGYX;A%*GlJUT5TB zozV@D$v5+%t^2X6C{9)tCCEymL|IAH^jIr!S~|*q1B}2*RIb{hwip}CiI_pyjc))X z(*djtYfDFUCpo8>SM`j>nx5&((X;eC6^E0Em#M}$uYaB1fE7JEupaDyKC03U$B0v{ zjK)T~YHzf{_jS4$J+VG)kTJp-r@9#V#thZNm}NYydgCi(OK7wzvzDO+nuYt0R;8HZ zpQu)1Mt?fSsGHO_wM*?&l~`?5n`TL>=1Hm+)l3yF<5baVP8F@InJUa>IhecJY&0|y zX`7L0w4yJKcGhx~+dlZuicq}+Dmy|!rvc^r_J+Q_5ZQrmHni{a*!Owl4Tofxec1K* z{G`o(!?A8UR_?XM>b$Ph*Lo9rd`km{pb}M6)dnlQx?!DHe>GHA8%)C*xQB6W^|NXfZ0dUT0Y=w5@U4h_7ETDqGxaea zi%^3Cs&_!;1XOlF4UABOg0O?I4$zBb5VYe{e%L|Kl+W|Saz1#x-a**jLD=4?W4^B+ zwl`{?$IA)A<^*ALg0MM3*qq?LIYC&?VK0{KAS~y#&-3q#8W`~W`wk4k4h+H$48pQq z@M0MlgvHtX;Jqbf$8%Xve9d=cm&35jcVpL+=Uh)m`|@AQ_aSNoW>qGtX;^782lFb6 z)Kcq@k-Y8`P`v{xJ3=8(0?PMA-H7m@xq$M0p(WvQZhF2~fzJAP{!@jQ{GuJ*p zEOH_epC2>lm*>lr=gX8AGv}P|>&MJI-`9_sbJGvYF)xLtIbP509dSKA$H;t+&vQLK z$HmtiljkyD3s;-H(c#kCTRYhl>uo#YJos$gUk}xz^mv^2UZNk?3$aFMl`h9g@0;~@ zte4!ck6^uIU89kaYP2-k;k5T2Sf7@IRkmY{$vDq_wlN=PxG%@)?r-4RBA*yLjXhW= zL^!v-ekdO6g<6L?gu3E{^?o=tePk#XC$JZX=7vf`OG7I|Yw;DWP59E)E}W)bX@<<& zSlO10Rcme0&UDAK4Zv#M(OA7Y9iy{(Xswo+tIc&-r@6)4VeU2$m`5!KYZ@D4g<>nT z&t1?n>1z$biRZ`DtslwiDZ@0g)_uEGt%c+ZV(^GLqdON2x&PDHowPC}Z zG0tRsTVS>`-&yP|cgmbMoQ=*W_$I&}=b%e&*sbrzyO}usyo1}-?dA4!hqxoL!mGe7 zcIUdK?oxN9yVhOrZgRJ|yWD+lB@Vi;9c~y-4mS_C4R;E65BCla2oDR74v!BPglC3l zhv$VChL?s{gv-L~!WH37;jQ7F;oaf=SYM@M!ZC3%jbf5xn#Qz_X&=)$rh80wOuv{x zF~eg<$Bd6Dh?yBPJLch-1u=`PbwM5TsX+m+cR=L?RCYiOj8L$s0p*8)jU?HK6>ku&4pg4-1PL;lZK?lphurHQ@PSVNnB~AC~KdcVAf4fbzp;2lwTA z=gawFVNoMISk!>>!@{BlJU=Wfs_?k&@xn6Yg=NYM%aj+EDK9Kjept|vSkQ6>lpl6b z5Z2c-w{Lz}U(ejq`C-{s@Ut<`zb{)MpXZ15^^7|NVSPO_&kyVCnR$L#U(ei{`uAm9 zz8Nd`C)xMGtUo;cqA>*Z4lPiGxPkgzMh%qhxPT${RscQzMh%qhxPT$JU^_j zXKt7Lu)dy|=ZE$6%sfA=uV?P7_+foLGtUp}>zR38Snkt!&&!k-mMKrqOnG6M^7PD< zAJ*41_lNwjzMh%qhxPT$JU^_jXYN7yVSPO_&kyVCnR$L#q(Sls8V$nwdS;#<*4H!h z{II^B;TMGU^~^j!tgmP0`C)xMbHC0{v#)37`C)xMGtUc)yGGK?loysMPtQzwVVUyu z%#lt?q!uon+2a$7KHWn%sfA=uV?1@ zVSPPA7eQEG&&>0~`g&%b9~RFpc?9hRVSPO_&kyVCnRx@P*CM@G&m9!G?j3P+B5roX z_2gNzEYEuNTu+{L>Ro&CtWUmXZF;UJ&zkhEJ$crmckRiu2Kk!x=eeFd>(0CODZE$`ZsXHD@n>&bIHdDfA4?a6!k(ITxyR!hv<%puG^;l6k>)+{t} zzd4_H?l6RP$?=#c!#oVGH1*dzu(^_Vi+a~1FmtYI#Ru0NbUA3A`8p>e(H--09;Y?< znsfNr+>FdT*9Kpi_XCHlXISEd{_}BntYEOpSwe7BJZiGc@${gfDpPe;y;MInf_SY& zBVHw~ENZ1jl^^&GSX%KEdov#dX1j&7N?8u)q4L&swNU=QZ+4p>;zDe^Di zp0ng#MJv41>=HE!_0|Z_#r(r!tWw9$GwZ$JEf)l_myG>ZmCsny(VP`dpn?))mUwQ z0CO-MkSjy+&TJOuT~^^sVLQ}5j1C*kyQ!C zRBNnF)^2L-Y%~*Rr*h2>HkcbaTb`SFl&0PdeQU<*GccRo zK%ZweFfY^>@z)~tVE$sF9%5Z%4beC8mk9M;7^i=vbFELTt$L!h!}>~3vA(hP=^6O? zV5Kgxr`WUfL;O`V{S3Z}Hcv0*@1g1C_TzS`e!*U3FVZjCOYD_66=IeBihd1WLVHiY z;|y_z=#Ti@WqPyo7iWw93r6Xm>W`hzozL~B&KJ%XdaIl0CgQw?WH(uF!x_Wovm2Wu7JI3!>Mp8s53Zz2|<22s}YLJs^p%7nHvDVLGiBfEpz_X zn%HkmzsEYN`pBFHIsxCJy;u*T46HlCJ|OHZe3ov-POlf~LEh~}k6>lhT6!F_IXcly&A2uuoLlabpgKQ z_YP*z@%31BAHJQpS3P1LHIM2+*3;J0da(U~JzEd4=h$;_649gfqxxoi3vz)TW-sS z)OR^&I`KLe->b{elQI8to-T4Oa4yjI@t5j!iF29LQ$OHb?PTjmoW4$9{V0D0QqOmW zIz#ni{N-l70AH}XT|bW5nlXBjGtrr-pW-jr>BUZgQ=p%A?s4wXOPqzyLj8=h$XTM7 zIxjdc=;!$>&U(4C+9}g7I2)Yz^h)P_=Y74(`Plhb|H;|vY}2cq?ap@nvh!ExOYE>q za+7qqo8o5Z*W4^OOTXndbDQH#m9yPe`W^l{q<$AWyKkdBe&K$B@`!Imqde|%|DkvC zm-F+#M9Prhf1wp;OgI+1MWl|A0Ssyv&0L4wBJPp=$5)BDRuNWWcyae83;inj8~f27vR~(jAD-6Of;Eu^!o4KI zO~yTvjdG(L?>AVwON1ZBJ@6e~V+r0U^%kE?J)h7%viNJgp?zpaOVC5%P~0Bj*+QG~ zUEs~$Uv}?9v*2SLAadomwX&C*SHQ}$tsRbD|UO#$Dv=aMBgRWcbZt=BC);? zp`Y-cepqbqVzI$X#RfkoHh7iT;5A}{-xM4CvDn~G#0GB{8~laX;J=Cu-YGWtTd~1E zunjg8+h9Yp4K@t6!G_5;*s$3K8xGrG!(|(6gxLlgF>Hg4Shm4NEw;f%ZMMP2X>5ay zdTfJ@`fP)Z)7b_a4cG=_?Kes`T77=!-<91C3B(wl?73NpJXP*9HuTtPO~hl-8@ZD&UxIIX9v;8_A96 zT391D!l=oflop>*B%ipX@Hn|)q-=!D_K@Uy5;CzS4<`dM#k|%5uZ>Wx%{F-Z#QuJc zW2MFk*I_jA&yPW=FmV1tQ{-3+vjv55y3F0OiYz*Y6P?e{Le8O?4(XGv^*DBqW9g}l zl%Hib!)Y_z8uJR6B%IOW)fFkDstdjT;nxEmn4c{5xj<1aGz}LlhntwCD#Fxc);k)8rnO|e%_l>#7{HO4kvpYhc%6~7u zL%z@a&h*{y&F}G^ZoiMC^tu44{Fiyq`~m%iAI(bhuzAG%34O{c3qw^)S=utJkY!r@ zv+HV9YGaL0U7T(bhto^y<9w0^ID@32@R)OYgg%x3nK=F9EW9`L-FTeY zk$^KiA{eRc@xSV%j+*Cm@S3Ys*gHP;idR{2Nh9pz$Jhfc1^QsZRT%mDK3qn51!c9h zQY^1J;rPkwrR!y!S_1$##Qy3KB#zZA?x#8IXDviu$;Qb-u(T@L;*_E-I>AX&I`Q8+ z2Wsa@&w=W5vXh{q&PNGOLV-?RRjnKsVrt6gE#b7K=6t>qPFK1)D#qbh%l2=c$%WHqPIji& zoq=uPGR7xW5%Eb?aiXC_(NL;rC{6mVEl{fJVD(v&nM7y94y8~loD4Mp^94L}!X-ue zym}nyIC+X2kOP^)$n^}2T+hV#H9>dP11MeRVElS9PR4nV2IDlG_H-N0!?}c>z)18C zT7+?DI=#r>d8d`3E}?ANh}8sl)90Z_L-Xlx{5^O2d+62BtMpUoqtHiml)u4B>YB1ZwW9fmtLf;TQ^B}ISi0$93Q+&s0y+_5)`fXyiK)uI&An1B#D(d%* zfduOaJsDh!T?+Ubecr@>(`qInUZX~BI}<0`9DDZu)a<0~aC9sDOWI(+J(ac;_h@#~ zRy6vwt6y@~m4AMfw~m%#`l{2Bdt@J^OaDXA<=4l1^e^_os%C&R`{2<^xLW|Le|bEo z4j*$iT^bGcg;Y@ucF|>S4;tn3oR&1#`4PbG$>Co1vky^4xIV(dJuy^0Sv#F781P2s zm%^*RLKbmWJ$C~6XPD=7rwLA5>Vq?r?+W*&aqdwX9S&1&xDDOqJWJ!8iL~;#uy-Jx z^QtN=cJH9Oou1GG!}k%_zpm-#z<*Fgj_H%Z*+|!^pn^uRzgrJ-`=H;WR1ur)g>iqR zKZO-N=kBBzV{KXyvy7I-l+ntVztM{^20b5>M9+t>rxoF5v`^xAiEccVEXx=cL)Alo zg@7jk<$(7h{E4BxG&aIt0bU0H+^UI&b#y!2Wu6?pfW7NwLVr(T@E;02Nza9*(Ti9| zxWej1%dGy;^>ljCTujfKuha98;dq`59iUvp(ey3*hu=bc(@`#?VPlQ!Xup4- zEYozN0_s~WzDU^c zLD-@C(7z8Y=>r#Kh_CS$kzgx?tLm)Qr#aX z3Rbu!NGsg`B=9|If^$XHzoOfjn0j>n$-sV?t~w!TbjRS$LD`u}t_3^!nkt z%V}WD5b7PPsaed$l;MYWcT+$2!>VuPx+N{ZJI7xFk6GC?`qx3#j9(}Jv+=(e9Uq=^ zbTnAs(u7|JRpq}<{*>`oSl?DXj`%99FQ`mhrWyKCt~CJgFTjm-om?~TWZ*x?7c{{> z&AX?)izeHDJ@Nfx<7k2pwffP7@P`q(BHV-F-iYg8|0ZtLeG>O6;tI7=X&4)}3)$4! zr`@g8&cbup22E!7l&}_h6sRh;)&X9^H6Z+)@K@OnQ6Kv?>SL{i-`c91JfKG-Ve&oK zi$iax1%NWWy{eGGNU3@d?(-42AMT$c{=-1?HOr^yz0?3Sctu2NjT0Vp{J z%&#iMnceKZ5qg>87(m|?0hWKmT!A!o2AmynJ68>pYvy@SFOrt;Ab&r;Ui6T01C?QJ z^t{mTt1b<-pz=sMt~7S=Gtpy^yAQx=xmo%O7gilLGOK0*I!HK#5q>5;&S5;d>OT1I z0Q{Nz2QK&#SOu5CzZSiV{-HzbEh=-C!QEB0*w2$wx$bPpE=L)RhRrpuqy7GE8hwK3 zIQU*QA=>{}(BTTywM~eR>-e9kTwJD)!32!QCt$W^g7Y2C4I$q=sG0@${LltE-`GZX z8t7vl^P?+4-w?W?svPe95&i8|`adASGQCkm`S)F~R=wsdI(xHE7Y%!$K66wpUqm2`q-Ji zvpdpzIPJL9`38NRe7X;(9d~jzRlV=*u6onGl`f7+u6jSbzUp1{|2_$?soD~bui6m4 zuxf)lu4?1Y$#8rO_G2{MjYZ!9uKgBWX17NBHUu!R>PhDwjD<(hRSd}M#rFM3;}d`f z0f)S_BFz>2>~072Rp+4JoR0BAdn{>U=*lkrh;ihon3mY|KTP3>Y8vJKkv7^l(8k#I zbZcyXgnyXk#*BqKf#zUkRYhzcdcnplje7~LaXX_gQ%1RV6U3i|yl#VW%5>D%GL*d} z)XV<{uol5qb2)j7N|CR*0{y5&+~Mfs^uyTrQ5qZg`7%*1!jCY5-SL2?JXNTJ zf6>d6sb0oZ)r4s?kzN~=5 z8HX>8bf@`l0nLxT)~je?Xc;XuE~clA*7OSM;_E1@uQMG0`<;t-M6HGYy3x{;75^6W zY^asM0&6xsYvBZWd#JK&KqFiOs0wZj+(Vwra`d?ezdj7g|Ho!})lq8+Er7imY+eDV zqzw!xM>E59=_>}Nt$k=aK0*6r0rF5k_G8W>f%45TEi&8Dr{=k|67O|~hGxK~{}J~6 z4`>Gm(7f>DXlFXo4*LUI#j(2F!K^da>R^`q{X7rY+yAbpTl0L}w!1f+y^ z(Nh9n(yITf(prR588fJFs5RY)=j#{BrK>}o=@!se8+$PZ{XJ!azShu3FA4oZ+0bqD zpuk9aQm>>^K&$_bu=x6C-*6%I#T-uGa0&Gb@1a|8`pZ>V#oRgEnfk_@PPfG1%XDrx z+7q*t_S7B$cP4d-d6zDaSqB(OT`+go#mv?5p>i5%=Bh`HmsOnAK*ckdZ_#IFKD}zf zPGg;C2=1GJcX4*?a^oN^0KCUCIP>JsMj6U*3KhT%4IuhyF;V3Zz#hPKz{_-c}$@K3Ypti#v9e?9n5i98)Sothkeks4MSkhuxr zYJvZ_ei;kH0O~y~kv$LN1*{K??TJ+qu!n35agHbHa`?3T7$YKqu{4f_%Q7eWP z#f-;ykw&AR80jaY{rWhZuNu@YR}GrL^=Y^{;N^gqe8UMDXsyO3K1 zSj-T+LNx%?2K|fTt{IoR9B-&fOo~M%!wQ^{0tsL;se|Pg~ zbqvl7i9kc&br-9KF}EQs0P{M#80vJRL;%Xmk;?%0My{Fn{{jr*Xa9cz>~m2rF!u7t za&_=d#6E=nU1!>lKHk&eoqUb=!WUwE3Y&xW@pbW^f%$q5#`72web4vt4r!~~8uJh3 z=r3XnXTMH2*zM^ds|7t2dlTB&Ui3a}RblOH(CBC5%RH}yO`03Vm=I%vx#7>LGK_l9 z<6!KuIm!U}KR8=xq0@=h@c0n@u5Y++%HRy7q}rb&P5vBvTYA{Jh)Udj^eJp^3dR;I zYF$eoAsttRcc2~Tu`R$K>xM>RJx#sCbt&d>Whhg(hY>oH;*Pw@V|3i-J9$^a&&>D3 zJim2#%!?dR|f7URb_imQBv z`xs_xS|`wg-XMaljjLRT^|WtM?aJMVXARp~oUS|1%%oAco(KLss#SRp+(*f*{K9Qd z*YG%i#}ooB=zNSz+gs;B-v5`5iC#|6pw16NKdAz96i-o1L|_zO;=_#FueSKl~8I9~lZ50^QaNHKQf?Hq>PM zZmNL%KLi3DvW=}=h%|iwcT>10ePO&rQ&3jRpuYvkgPus=Hoz19{3y!wt?noEk(-0` zZltl;_f!J^GNUfd;b#T^d2=3Cb=RtlL;GA8@oqLSR}A+l?4sLbG*|JVbLk)GCw4?V znZkL-V{+v4EX@6vhIXNExd3+Idisme0beLYnKhEDJ~8g3d({pa5rKYiu?yx%6F}qB z!gOhP0qP0f^~%_i*FpS*x`a9ezPwYfZ9wKH*ap-mdCyx9ZT?dTQww$@jm8;?)F0o~ zo@hnApKvzfMC`hi)47hKkI=~}!;0j3KjKR}mDlok6n&FCl$Si{^iFDUI2&#O^#2Br z$5HNjpiGT{9aQM>uFrfH<(Ajy92CNJPrD;!*vs5^$&5+7f>&j;hw8dZl>e9B#dzx1JXMd zeyd=wX7alNo}=J-1&mk9unwR=|B?D2z4K5emzis63)e+1Lx9B$##;JJ>cJo?H3zBJ zP?t*dbDSo;FL)WJwuwvSDF4rzZDDuULr+w>47!;DcoFn%fDwRsfTrNx;`PFgWZ@e1 z;_&@|i2%q~=0aCz!T&y755@INxP<`31KUMMHh6G&1+H2D==B}x3Ku#)j4#9k!}-m=L0PGwFQg<+z99bfZt&}S7iak* zxXA#7Ir2NWD=5ro(2C)5p5aB+CI}$Jn^xFWG zVbOgnxY(O>nA?^2z(@Y_bNtvbguNY@+kDS`2xIdr=^o5EJ&o&?SPOIu=7VqGHcRF< z@ve^N6UEkGo{#6~*v{eI(^hs-*5*QQC9tc1LD~8O^J+hs?UaVym>SBY>6llXgfa2j zP$}j^+R{G&`+YwP@kv;OM|>;MCap0tRa1c$v=0hk?P25qm3rj(2eU?yi|tigi#sFxR%7{s#N_TFhX25M^p5mqYXgzI8vK zmEf<5{Tsesyoz@i|M&#rcn$AuABP_CRpi4Rz54Sb@{E5+mO + res.arrayBuffer() +) + +export default async function (req) { + const inter = await font + + const { searchParams } = new URL(req.url) + + // ?title= + const hasTitle = searchParams.has('title') + const title = hasTitle + ? searchParams.get('title')?.slice(0, 100) + : 'Nextra Documentation' + + return new ImageResponse( + ( + <div + style={{ + height: '100%', + width: '100%', + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + justifyContent: 'center', + padding: 80, + backgroundColor: '#030303', + backgroundImage: + 'radial-gradient(circle at 25px 25px, #333 2%, transparent 0%), radial-gradient(circle at 75px 75px, #333 2%, transparent 0%)', + backgroundSize: '100px 100px', + backgroundPosition: '-30px -10px', + fontWeight: 600, + color: 'white' + }} + > + <svg + style={{ position: 'absolute', top: 70, left: 80 }} + height="40" + viewBox="0 0 361 70" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M114.913 33.2763v28.7642h-11.57V12.9496h11.059v8.3416h.575c1.129-2.7485 2.93-4.9325 5.401-6.5518 2.493-1.6193 5.572-2.429 9.237-2.429 3.388 0 6.339.7244 8.853 2.1733 2.535 1.4489 4.496 3.5476 5.88 6.2962 1.407 2.7486 2.099 6.0831 2.078 10.0035v31.2571h-11.57V32.5732c0-3.2813-.852-5.8487-2.557-7.7024-1.683-1.8537-4.016-2.7806-6.999-2.7806-2.024 0-3.824.4475-5.401 1.3424-1.556.8736-2.781 2.1413-3.676 3.8032-.873 1.662-1.31 3.6755-1.31 6.0405Zm61.407 29.723c-4.922 0-9.172-1.0227-12.752-3.0681-3.558-2.0668-6.296-4.9858-8.214-8.7572-1.917-3.7926-2.876-8.2563-2.876-13.3913 0-5.0497.959-9.4815 2.876-13.2954 1.939-3.8353 4.645-6.8182 8.118-8.9489 3.473-2.152 7.553-3.228 12.241-3.228 3.026 0 5.881.4901 8.565 1.4702 2.706.9588 5.093 2.4503 7.159 4.4744 2.088 2.0242 3.729 4.6023 4.922 7.7344 1.193 3.1108 1.79 6.8182 1.79 11.1221v3.5476h-40.238v-7.7983h29.148c-.021-2.2159-.501-4.1868-1.438-5.9126-.938-1.7472-2.248-3.1215-3.931-4.1229-1.662-1.0014-3.601-1.5021-5.817-1.5021-2.365 0-4.443.5753-6.232 1.7258-1.79 1.1293-3.186 2.6208-4.187 4.4745-.98 1.8324-1.481 3.8459-1.502 6.0405v6.8075c0 2.8551.522 5.3054 1.566 7.3508 1.044 2.0242 2.503 3.5796 4.378 4.6662 1.875 1.0654 4.07 1.598 6.584 1.598 1.683 0 3.207-.2343 4.57-.7031 1.364-.49 2.546-1.2038 3.548-2.1413 1.001-.9375 1.758-2.0987 2.269-3.4837l10.803 1.2145c-.682 2.8551-1.982 5.348-3.9 7.4787-1.896 2.1094-4.325 3.75-7.286 4.9219-2.962 1.1506-6.35 1.7258-10.164 1.7258Zm34.777-50.0497 9.908 18.1215 10.067-18.1215h12.241l-14.798 24.5455 15.054 24.5454h-12.177l-10.387-17.674-10.291 17.674h-12.273l14.957-24.5454-14.574-24.5455h12.273Zm63.878 0v8.9489h-28.221v-8.9489h28.221ZM253.722 1.18825h11.569V47.2749c0 1.5554.235 2.7486.704 3.5795.49.8097 1.129 1.3637 1.917 1.662s1.662.4474 2.621.4474c.724 0 1.385-.0532 1.981-.1598.618-.1065 1.087-.2024 1.407-.2876l1.949 9.0447c-.618.2131-1.502.4475-2.652.7031-1.13.2557-2.515.4049-4.155.4475-2.898.0852-5.508-.3516-7.831-1.3104-2.322-.9801-4.165-2.4929-5.529-4.5383-1.342-2.0455-2.003-4.6023-1.981-7.6705V1.18825Zm29.129 60.85225V12.9496h11.218v8.1818h.512c.895-2.8338 2.429-5.0177 4.602-6.5518 2.173-1.5554 4.677-2.3331 7.511-2.3331 1.321 0 2.535.1598 3.643.4794 1.108.3196 2.088.7564 2.94 1.3104l-3.579 9.588c-.618-.2983-1.3-.5433-2.046-.7351-.745-.1917-1.587-.2876-2.524-.2876-2.003 0-3.814.4474-5.434 1.3423-1.619.8949-2.908 2.1414-3.867 3.7394-.937 1.5767-1.406 3.4091-1.406 5.4971v28.8601h-11.57Zm51.222.863c-3.856 0-7.308-.9908-10.355-2.9723-3.047-1.9816-5.454-4.858-7.223-8.6293-1.768-3.7713-2.652-8.3523-2.652-13.7429 0-5.4546.894-10.0568 2.684-13.8068 1.811-3.7713 4.251-6.6158 7.319-8.5334 3.068-1.9389 6.488-2.9084 10.259-2.9084 2.877 0 5.242.4901 7.095 1.4702 1.854.9588 3.324 2.12 4.411 3.4836 1.087 1.3424 1.928 2.6101 2.525 3.8033h.479v-8.1179h11.602v49.0909h-11.378v-7.7343h-.703c-.597 1.1931-1.46 2.4609-2.589 3.8032-1.129 1.321-2.621 2.4503-4.474 3.3878-1.854.9375-4.187 1.4063-7 1.4063Zm3.228-9.4922c2.451 0 4.539-.6605 6.265-1.9816 1.725-1.3423 3.036-3.2066 3.931-5.593s1.342-5.1669 1.342-8.3416c0-3.1747-.447-5.934-1.342-8.2777-.874-2.3438-2.174-4.1655-3.9-5.4652-1.704-1.2997-3.803-1.9496-6.296-1.9496-2.578 0-4.73.6712-6.456 2.0135s-3.025 3.196-3.899 5.5611c-.873 2.365-1.31 5.071-1.31 8.1179 0 3.0682.437 5.8061 1.31 8.2138.895 2.3863 2.205 4.272 3.931 5.6569 1.747 1.3636 3.889 2.0455 6.424 2.0455Z" + fill="white" + /> + <path + d="m64.8833 1.81335-2.8464 2.84638C47.1274 19.5692 22.9543 19.5692 8.04485 4.65972L5.19848 1.81335c-.93479-.93478-2.45037-.93478-3.38515 0-.93479.93478-.93478 2.45037 0 3.38515L4.6597 8.04487c14.9095 14.90953 14.9095 39.08263 0 53.99213l-2.84637 2.8463c-.93479.9348-.93479 2.4504 0 3.3852.93478.9348 2.45037.9348 3.38515 0l2.84637-2.8464c14.90955-14.9095 39.08255-14.9095 53.99205 0l2.8464 2.8464c.9348.9348 2.4504.9348 3.3852 0 .9347-.9348.9347-2.4504 0-3.3852l-2.8464-2.8463c-14.9095-14.9095-14.9095-39.0826 0-53.99213l2.8464-2.84637c.9347-.93478.9347-2.45037 0-3.38515-.9348-.93478-2.4504-.93478-3.3852 0Z" + fill="white" + stroke="white" + strokeWidth="2" + /> + </svg> + <p + style={{ + position: 'absolute', + bottom: 70, + left: 80, + margin: 0, + fontSize: 30, + letterSpacing: -1 + }} + > + Create beautiful websites with Next.js & MDX. + </p> + <h1 + style={{ + fontSize: 82, + margin: '0 0 40px -2px', + lineHeight: 1.1, + textShadow: '0 2px 30px #000', + letterSpacing: -4, + backgroundImage: 'linear-gradient(90deg, #fff 40%, #aaa)', + backgroundClip: 'text', + '-webkit-background-clip': 'text', + color: 'transparent' + }} + > + {title} + </h1> + </div> + ), + { + width: 1200, + height: 630, + fonts: [ + { + name: 'inter', + data: inter, + style: 'normal' + } + ] + } + ) +} diff --git a/docs/pages/docs/_meta.json b/docs/pages/docs/_meta.json new file mode 100644 index 0000000..fc49672 --- /dev/null +++ b/docs/pages/docs/_meta.json @@ -0,0 +1,24 @@ +{ + "index": "介绍", + "guide": "指导", + "-- Themes": { + "type": "separator", + "title": "主题" + }, + "docs-theme": "文档主题", + "blog-theme": "博客主题", + "custom-theme": "自定义主题", + "-- More": { + "type": "separator", + "title": "更多" + }, + "about-link": { + "title": "关于 Nextra", + "href": "/about" + }, + "next.js-link": { + "title": "Next.js 文档 ↗", + "href": "https://nextjs.org?utm_source=nextra.site&utm_medium=referral&utm_campaign=sidebar", + "newWindow": true + } +} diff --git a/docs/pages/docs/blog-theme.mdx b/docs/pages/docs/blog-theme.mdx new file mode 100644 index 0000000..0b92c1b --- /dev/null +++ b/docs/pages/docs/blog-theme.mdx @@ -0,0 +1,14 @@ +import { ChevronRightIcon } from '@components/icons' +import { Callout, Cards } from 'nextra/components' + +# Nextra Blog Theme + +<Callout type="warning">Docs for this theme is under construction.</Callout> + +<Cards> + <Cards.Card + icon={<ChevronRightIcon />} + title="Get Started" + href="/docs/blog-theme/start" + /> +</Cards> diff --git a/docs/pages/docs/blog-theme/_meta.json b/docs/pages/docs/blog-theme/_meta.json new file mode 100644 index 0000000..cb95318 --- /dev/null +++ b/docs/pages/docs/blog-theme/_meta.json @@ -0,0 +1,3 @@ +{ + "start": "开始" +} diff --git a/docs/pages/docs/blog-theme/start.mdx b/docs/pages/docs/blog-theme/start.mdx new file mode 100644 index 0000000..63e144f --- /dev/null +++ b/docs/pages/docs/blog-theme/start.mdx @@ -0,0 +1,89 @@ +import { Callout, Steps } from 'nextra/components' + +# 开始 + +<Callout type="warning">Docs for this theme is under construction.</Callout> + +<Callout> + An example of the blog theme can be found [here](https://demo.vercel.blog), + with source code [here](https://github.com/vercel/nextjs-portfolio-starter). +</Callout> + +Similar to the [Docs Theme](/docs/docs-theme/start), you can install the blog +theme with the following commands: + +## 从模板快速启动 + +## 作为新项目启动 + +<Steps> +### Install + +To create a Nextra Docs site manually, you have to install **Next.js**, +**React**, **Nextra**, and **Nextra Blog Theme**. In your project directory, run +the following command to install the dependencies: + +```sh npm2yarn +npm i next react react-dom nextra nextra-theme-blog +``` + +<Callout> + If you already have Next.js installed in your project, you only need to + install `nextra` and `nextra-theme-blog` as the add-ons. +</Callout> + +### 添加Next.js配置 + +Create the following `next.config.js` file in your project’s root directory: + +```js filename="next.config.js" +const withNextra = require('nextra')({ + theme: 'nextra-theme-blog', + themeConfig: './theme.config.jsx' +}) + +module.exports = withNextra() + +// If you have other Next.js configurations, you can pass them as the parameter: +// module.exports = withNextra({ /* other next.js config */ }) +``` + +With the above configuration, Nextra can handle Markdown files in your Next.js +project, with the specified theme. Other Nextra configurations can be found in +[Guide](/docs/guide). + +### 创建博客主题配置 + +Lastly, create the corresponding `theme.config.jsx` file in your project’s root +directory. This will be used to configure the Nextra Blog theme: + +```jsx filename="theme.config.jsx" +export default { + footer: <p>MIT 2023 © Nextra.</p>, + head: ({ title, meta }) => ( + <> + {meta.description && ( + <meta name="description" content={meta.description} /> + )} + {meta.tag && <meta name="keywords" content={meta.tag} />} + {meta.author && <meta name="author" content={meta.author} />} + </> + ), + readMore: 'Read More →', + postFooter: null, + darkMode: false, + navs: [ + { + url: 'https://github.com/shuding/nextra', + name: 'Nextra' + } + ] +} +``` + +### 准备出发! + +Now, you can run the `next` or `next dev` command specified in `package.json` to +start developing the project! 🎉 + +</Steps> diff --git a/docs/pages/docs/custom-theme.mdx b/docs/pages/docs/custom-theme.mdx new file mode 100644 index 0000000..52caa07 --- /dev/null +++ b/docs/pages/docs/custom-theme.mdx @@ -0,0 +1,145 @@ +import { Screenshot } from 'components/screenshot' +import { Callout, Steps } from 'nextra/components' + +# 自定义主题 + +Nextra中的主题就像一个布局,它将被呈现为所有页面的包装。本文档将引导您完成创建自 +定义主题的过程。 + +您可以选择部署一个示例,并通过以下步骤对其进行进一步构建: + +[![](https://vercel.com/button)](https://vercel.com/new/clone?s=https%3A%2F%2Fgithub.com%2Fshuding%2Fnextra-example&showOptionalTeamCreation=false) + +## 创建自定义主题 + +<Steps> +### 配置Nextra以使用主题 + +First, you need to tell Nextra to use your custom theme file instead of official +ones. In your Next.js config, you can pass the path to your theme file to the +Nextra plugin: + +```js {2} filename="next.config.js" +const withNextra = require('nextra')({ + theme: './theme.tsx', +}) + +module.exports = withNextra({ + // Other Next.js configurations + ... +}) +``` + +### 创建基本主题 + +You can now start working on your theme! In your root directory, create the +corresponding `theme.tsx` file with basic content: + +```tsx filename="theme.tsx" /children/ +import type { NextraThemeLayoutProps } from 'nextra' + +export default function Layout({ children }: NextraThemeLayoutProps) { + return ( + <div> + <h1>My Theme</h1> + <div style={{ border: '1px solid' }}>{children}</div> + </div> + ) +} +``` + +It accepts a `children` prop, which is the MDX content of the current page, and +wraps some other elements around the content. After creating the theme, you can +simply add a MDX file as `pages/index.mdx` and see the result: + +import customThemeImage from '../../public/assets/docs/custom-theme.png' + +<Screenshot src={customThemeImage} alt="Custom theme" /> + +<br /> + +Inside your theme layout, you can use CSS imports or other ways to style it. +Next.js hooks such as `useRouter`, `Head` are also available. + +### 呈现活动页面的元数据 + +Other than `children`, some other useful props are passed to the theme layout +too. With the `pageOpts` props, the theme can access the page’s meta +information. + +For example, let’s implement these features: + +- Render the page title in `<title>` +- Show a simple table of contents +- Add a meta tag for `og:image` via the front matter + +```tsx filename="theme.tsx" /pageOpts/ +import Head from 'next/head' +import type { NextraThemeLayoutProps } from 'nextra' + +export default function Layout({ children, pageOpts }: NextraThemeLayoutProps) { + const { title, frontMatter, headings } = pageOpts + + return ( + <div> + <Head> + <title>{title} + + +

My Theme

+ Table of Contents: +
    + {headings.map(heading => ( +
  • {heading.value}
  • + ))} +
+
{children}
+ + ) +} +``` + +### 使用整个网站的页面地图 + +Now, if you want to render something like a sidebar or a navigation bar, which +relies on information of not only the current page but also other pages, you can +use the `pageMap` value. + +For example, we can render a simple navigation list with all the pages in the +top level: + +```tsx filename="theme.tsx" /pageMap/ +import Link from 'next/link' +import type { NextraThemeLayoutProps } from 'nextra' + +export default function Layout({ children, pageOpts }: NextraThemeLayoutProps) { + const { pageMap } = pageOpts + + return ( +
+

My Theme

+ {pageMap.map(item => { + if (item.kind === 'MdxPage') { + return ( + + {item.route} + + ) + } + return null + })} +
{children}
+
+ ) +} +``` + +There are other item kinds such as `Folder` (for directories) and `Meta` (for +`_meta.json` files). All the items are typed so you can easily know the +properties. + + + +## 高级使用 + +高级使用文档正在构建中。 diff --git a/docs/pages/docs/docs-theme.mdx b/docs/pages/docs/docs-theme.mdx new file mode 100644 index 0000000..7f9b60c --- /dev/null +++ b/docs/pages/docs/docs-theme.mdx @@ -0,0 +1,32 @@ +# Nextra Docs Theme + +import { + BoxIcon, + ChevronRightIcon, + GearIcon, + RowsIcon +} from '@components/icons' +import { Card, Cards } from 'nextra/components' + + + } + title="Get Started" + href="/docs/docs-theme/start" + /> + } + title="Page Configuration" + href="/docs/docs-theme/page-configuration" + /> + } + title="Theme Configuration" + href="/docs/docs-theme/theme-configuration" + /> + } + title="Built-in Components" + href="/docs/docs-theme/built-ins" + /> + diff --git a/docs/pages/docs/docs-theme/_meta.json b/docs/pages/docs/docs-theme/_meta.json new file mode 100644 index 0000000..2edf77e --- /dev/null +++ b/docs/pages/docs/docs-theme/_meta.json @@ -0,0 +1,7 @@ +{ + "start": "开始", + "page-configuration": "页面配置", + "theme-configuration": "主题配置", + "built-ins": "内嵌函数", + "api": "API" +} diff --git a/docs/pages/docs/docs-theme/api/_meta.json b/docs/pages/docs/docs-theme/api/_meta.json new file mode 100644 index 0000000..0338da0 --- /dev/null +++ b/docs/pages/docs/docs-theme/api/_meta.json @@ -0,0 +1,3 @@ +{ + "use-config": "useConfig" +} diff --git a/docs/pages/docs/docs-theme/api/use-config.mdx b/docs/pages/docs/docs-theme/api/use-config.mdx new file mode 100644 index 0000000..2430cd3 --- /dev/null +++ b/docs/pages/docs/docs-theme/api/use-config.mdx @@ -0,0 +1,60 @@ +import { Callout } from 'nextra/components' + +# useConfig + + + **The `useConfig` hook is made to dynamically configure your project**. See + [Theme Configuration](/docs/docs-theme/theme-configuration) for more + information about each customizable feature. + + +The `useConfig` hook returns data from your theme configuration and current page +context. + +## Return Values + +- `banner`: data about [Banner](/docs/docs-theme/theme-configuration#banner) +- `chat`: data about [Chat Link](/docs/docs-theme/theme-configuration#chat-link) +- `darkMode`: a boolean whether the theme is dark or not +- `direction`: a string that defines the current + [writing direction](/docs/docs-theme/theme-configuration#writing-direction) +- `docsRepositoryBase`: a link string to the documentation repository +- `editLink`: data about + [Edit Link](/docs/docs-theme/theme-configuration#edit-link) +- `feedback`: data about + [Feedback Link](/docs/docs-theme/theme-configuration#feedback-link) +- `footer`: data about [Footer](/docs/docs-theme/theme-configuration#footer) +- `gitTimestamp`: a function that renders the + [Last Updated Date](/docs/docs-theme/theme-configuration#last-updated-date) +- `head`: an equivalent to + [Next.js Head tag](https://nextjs.org/docs/pages/api-reference/components/head) +- `i18n`: data about [Internationalization](/docs/guide/i18n) +- `logo`: a React component for the website's logo +- `logoLink`: a link for the `logo` component +- `navbar`: components related to + [Navbar](/docs/docs-theme/theme-configuration#customize-the-navbar) +- `navigation`: options about + [Navigation](/docs/docs-theme/theme-configuration#navigation) +- `themeSwitch`: data about + [Theme Switch](/docs/docs-theme/theme-configuration#theme-switch) +- `nextThemes`: data about theme configuration (see + [pacocoursey/next-themes](https://github.com/pacocoursey/next-themes)) +- `notFound`: data to display when the page is not found +- `primaryHue`: data about + [Theme Color](/docs/docs-theme/theme-configuration#theme-color) +- `primarySaturation`: data about + [Theme Color](/docs/docs-theme/theme-configuration#theme-color) +- `project`: data about + [Project Link](/docs/docs-theme/theme-configuration#project-link) +- `search`: data about [Search](/docs/docs-theme/theme-configuration#search) +- `serverSideError`: data to display when a server-side error happens (requires + `500.mdx` page too) +- `sidebar`: data about [Sidebar](/docs/docs-theme/theme-configuration#sidebar) +- `toc`: data about + [Table of Contents Sidebar](/docs/docs-theme/theme-configuration#toc-sidebar) +- `useNextSeoOptions`: a function that passes data to Next.js SEO component. + (see [SEO Options](/docs/docs-theme/theme-configuration#seo-options)) +- `flexsearch`: data about search configuration +- `title`: Title about current document +- `frontMatter`: parsed [front matter](https://jekyllrb.com/docs/front-matter) + data diff --git a/docs/pages/docs/docs-theme/built-ins.mdx b/docs/pages/docs/docs-theme/built-ins.mdx new file mode 100644 index 0000000..c526a27 --- /dev/null +++ b/docs/pages/docs/docs-theme/built-ins.mdx @@ -0,0 +1,15 @@ +# 内嵌函数 + +import { CardsIcon } from '@components/icons' +import { Card, Cards } from 'nextra-theme-docs' + +The Nextra Docs Theme includes a couple of built-in components that you can use +to better style your documentation: + + + } + title="Bleed" + href="/docs/docs-theme/built-ins/bleed" + /> + diff --git a/docs/pages/docs/docs-theme/built-ins/bleed.mdx b/docs/pages/docs/docs-theme/built-ins/bleed.mdx new file mode 100644 index 0000000..5f6f1f8 --- /dev/null +++ b/docs/pages/docs/docs-theme/built-ins/bleed.mdx @@ -0,0 +1,58 @@ +import { Bleed } from 'nextra-theme-docs' + +# 流血 + +## Example + +When wrapping your content with ``, it will be slightly wider than the +container and will overflow on both sides. + + +
+ _There is nothing to writing. All you do is sit down at a typewriter and **bleed**._ + + — Ernest Hemingway + +
+
+ +It provides a better reading experience when you want to present some graphical +information, which normally looks nicer in a larger size. + +For example, you can put text, image, video or any component inside: + + +