From 9f33569d6316ad494639aafd7d89e0a3fed36a9b Mon Sep 17 00:00:00 2001 From: Mark Tate <143323+mark-tate@users.noreply.github.com> Date: Wed, 7 Jun 2023 12:23:57 +0100 Subject: [PATCH] Mosaic Next --- .changeset/brown-tips-cover.md | 6 - .changeset/fluffy-onions-cry.md | 11 - .changeset/ten-carrots-mix.md | 5 - .eslintrc.js | 21 +- .gitignore | 1 + .prettierignore | 1 + __mocks__/zustand.ts | 63 +- docs/author/refs.mdx | 1 + docs/index.mdx | 2 +- docs/test/layouts/detail-highlight.mdx | 2 +- docs/test/layouts/detail-overview.mdx | 2 +- docs/test/layouts/detail-technical.mdx | 2 +- docs/test/layouts/edit.mdx | 2 +- docs/test/layouts/full-width.mdx | 2 +- docs/test/layouts/landing.mdx | 2 +- docs/test/layouts/newsletter.mdx | 2 +- docs/test/layouts/product-discover.mdx | 2 +- docs/test/layouts/product-preview.mdx | 2 +- package.json | 25 +- packages/cli/package.json | 3 +- packages/cli/src/build.ts | 105 - packages/cli/src/exportStatic.ts | 22 + packages/cli/src/index.ts | 51 +- packages/cli/src/serveStatic.ts | 24 + packages/cli/src/upload-s3-snapshot.ts | 53 - packages/cli/src/vercel-snapshot.ts | 3 +- packages/components-labs/package.json | 10 +- packages/components-labs/src/Diagram.tsx | 2 +- packages/components-labs/src/index.ts | 11 +- packages/components/README.md | 4 +- packages/components/package.json | 14 +- packages/components/src/BrowserOnly.tsx | 2 - packages/components/src/Button.tsx | 2 +- .../src/EditionFilterView/index.tsx | 34 +- .../components/src/EditionTileLink/index.tsx | 54 +- packages/components/src/Feature/Feature.tsx | 2 +- .../FilterToolbar/FilterDropdown/index.tsx | 2 +- .../src/FilterToolbar/Search/index.tsx | 2 +- .../src/FilterToolbar/SortDropdown/index.tsx | 2 +- .../components/src/FilterToolbar/index.tsx | 2 - packages/components/src/FormattedContent.tsx | 70 - packages/components/src/Grid/index.tsx | 2 +- packages/components/src/GridBase/index.tsx | 2 +- packages/components/src/Hero/index.tsx | 17 +- packages/components/src/Hero/styles.css.ts | 2 +- packages/components/src/Icon/index.tsx | 2 +- packages/components/src/ImageProvider.ts | 9 - packages/components/src/Impact/index.tsx | 2 +- packages/components/src/Link/index.tsx | 2 +- packages/components/src/LinkBase/index.tsx | 2 +- packages/components/src/LinkProvider.ts | 9 - packages/components/src/Markdown/Heading.tsx | 39 - .../components/src/Markdown/Pre/index.css.ts | 39 - .../components/src/Markdown/Pre/index.tsx | 155 - packages/components/src/Markdown/index.tsx | 347 -- .../src/Markdown/markdownElements.tsx | 52 - .../withMarkdownSpacing/styles.css.ts | 7 - .../components/src/PageFilterView/index.tsx | 2 - packages/components/src/ReactLive/index.tsx | 71 - .../components/src/ReactLive/styles.css.ts | 28 - .../components/src/SecondaryNavbar/index.tsx | 4 +- packages/components/src/Story/index.tsx | 2 +- packages/components/src/Tabs/index.tsx | 4 +- packages/components/src/TabsBase/TabsBase.tsx | 11 +- .../components/src/TabsBase/TabsButton.tsx | 3 +- packages/components/src/TabsBase/TabsLink.tsx | 3 +- .../src/TabsBase/TabsMenuButton.tsx | 7 +- packages/components/src/ThemeProvider.tsx | 48 - packages/components/src/TileContent/index.tsx | 2 +- packages/components/src/Tiles.tsx | 2 +- packages/components/src/Typography/index.tsx | 1 + .../src/__tests__/ReactLive.test.tsx | 22 - packages/components/src/index.tsx | 9 +- packages/components/src/styles.ts | 5 - packages/content-editor-plugin/package.json | 12 +- .../content-editor-plugin/src/LazyEditor.tsx | 11 + .../src/components/ActionMenu/ActionMenu.tsx | 3 +- .../components/BaseToolbar/BaseToolbar.tsx | 2 +- .../components/BaseTooltray/BaseTooltray.tsx | 2 +- .../src/components/ContentEditor.tsx | 1 - .../src/components/ContentPreview.tsx | 7 + .../src/components/Dialog.tsx | 1 - .../src/components/Editor.tsx | 45 +- .../src/components/EditorControls.tsx | 1 - .../components/LinkEditor/EditLinkButton.tsx | 1 - .../src/components/LinkEditor/LinkEditor.tsx | 2 +- .../components/LinkEditor/SaveAdornment.tsx | 1 - .../PersistEditDialog/PersistStatus.tsx | 4 +- .../components/PersistEditDialog/index.tsx | 4 +- .../src/components/Popper/Popper.tsx | 2 +- .../src/components/SaveButton.tsx | 2 +- .../src/components/StatusBanner.tsx | 1 - .../Toolbar/InsertBlockDropdown.tsx | 2 +- .../Toolbar/InsertHorizontalRule.tsx | 1 - .../src/components/Toolbar/InsertImage.tsx | 2 +- .../src/components/Toolbar/InsertLink.tsx | 2 +- .../src/components/Toolbar/InsertTable.tsx | 2 +- .../components/Toolbar/TextFormatTooltray.tsx | 2 +- .../src/components/Toolbar/Toolbar.tsx | 1 - .../src/components/Toolbar/ToolbarButton.tsx | 2 +- .../components/Toolbar/ToolbarSepartor.tsx | 2 +- .../src/hooks/useWorkflowFeed.ts | 60 +- packages/content-editor-plugin/src/index.ts | 6 +- .../src/plugins/FloatingToolbarPlugin.tsx | 2 +- .../src/plugins/MarkdownLinkPlugin.tsx | 2 +- .../src/plugins/PreviewPlugin.tsx | 66 +- .../src/plugins/TableActionMenuPlugin.tsx | 2 +- .../content-editor-plugin/src/store/index.ts | 8 +- .../core/src/filesystems/RestrictedVolume.ts | 2 + packages/core/src/filesystems/UnionVolume.ts | 2 + packages/icons/README.md | 15 + packages/icons/package.json | 52 + .../{theme => icons}/scripts/buildIcons.mjs | 0 packages/icons/scripts/bundle.mjs | 63 + .../scripts/saltIconNames.mjs | 2 +- .../src/icon/icons.ts => icons/src/index.ts} | 3 +- packages/icons/tsconfig.json | 8 + .../{theme => icons}/types/saltIconNames.d.ts | 0 packages/layouts/package.json | 12 +- packages/layouts/src/Fade.tsx | 43 - packages/layouts/src/LayoutBase/index.tsx | 27 +- packages/layouts/src/LayoutColumns/index.tsx | 46 +- .../layouts/src/LayoutColumns/styles.css.ts | 33 +- .../src/LayoutConfigProvider/index.tsx | 22 - .../layouts/src/LayoutFullWidth/index.tsx | 2 +- packages/layouts/src/LayoutProvider.tsx | 37 - packages/layouts/src/hooks/useIsLoading.ts | 41 - packages/layouts/src/index.ts | 3 - .../src/layouts/Detail/DetailContentOnly.tsx | 11 +- .../src/layouts/Detail/DetailHighlight.tsx | 30 +- .../src/layouts/Detail/DetailOverview.tsx | 31 +- .../src/layouts/Detail/DetailTechnical.tsx | 41 +- .../layouts/src/layouts/Edit/index.css.ts | 15 + packages/layouts/src/layouts/Edit/index.tsx | 42 +- .../layouts/src/layouts/Edit/styles.css.ts | 22 - .../layouts/src/layouts/FullWidth/index.tsx | 6 +- .../layouts/src/layouts/Landing/index.tsx | 8 +- .../layouts/src/layouts/Newsletter/index.tsx | 24 +- .../src/layouts/Product/ProductDiscover.tsx | 11 +- .../src/layouts/Product/ProductPreview.tsx | 8 +- .../layouts/src/layouts/PythonDoc/index.tsx | 86 - .../src/layouts/PythonDoc/styles.css.ts | 67 - .../layouts/TypeDoc/ExportsSidebar/index.tsx | 36 - .../TypeDoc/ExportsSidebar/styles.css.ts | 44 - .../layouts/src/layouts/TypeDoc/icons.css | 944 ---- .../layouts/src/layouts/TypeDoc/icons.png | Bin 9615 -> 0 bytes .../layouts/src/layouts/TypeDoc/icons@2x.png | Bin 28144 -> 0 bytes .../layouts/src/layouts/TypeDoc/index.tsx | 80 - .../layouts/src/layouts/TypeDoc/style.css | 689 --- .../layouts/src/layouts/TypeDoc/styles.css.ts | 41 - .../layouts/src/layouts/TypeDoc/widgets.png | Bin 480 -> 0 bytes .../src/layouts/TypeDoc/widgets@2x.png | Bin 855 -> 0 bytes packages/layouts/src/layouts/index.ts | 2 - packages/layouts/src/types/index.tsx | 10 +- packages/loaders/README.md | 13 + packages/loaders/package.json | 48 + packages/loaders/scripts/bundle.mjs | 45 + packages/loaders/src/index.ts | 77 + packages/loaders/src/types/index.ts | 37 + .../tsconfig.json | 0 packages/mdx-components/README.md | 18 + packages/mdx-components/package.json | 55 + .../src}/BlockQuote/index.css.ts | 0 .../src}/BlockQuote/index.tsx | 0 .../src/Heading/AnchorHeading.css.ts} | 0 .../src/Heading/AnchorHeading.tsx} | 15 +- .../src/Heading}/__tests__/Heading.test.tsx | 16 +- .../src/Heading}/__tests__/index.test.tsx | 11 +- packages/mdx-components/src/Heading/index.tsx | 34 + .../src}/InlineCode.tsx | 0 .../Markdown => mdx-components/src}/Link.tsx | 3 +- .../Markdown => mdx-components/src}/Table.tsx | 0 .../Markdown => mdx-components/src}/Tbody.tsx | 0 .../Markdown => mdx-components/src}/Td.tsx | 0 .../Markdown => mdx-components/src}/Th.tsx | 0 .../Markdown => mdx-components/src}/Thead.tsx | 0 .../src}/ThematicBreak/index.css.ts | 0 .../src}/ThematicBreak/index.tsx | 0 .../Markdown => mdx-components/src}/Tr.tsx | 0 packages/mdx-components/src/components.ts | 166 + packages/mdx-components/src/index.tsx | 3 + .../mdx-components/src/markdownElements.tsx | 58 + packages/mdx-components/src/typography.tsx | 55 + .../src}/withMarkdownSpacing/index.tsx | 0 .../src/withMarkdownSpacing/styles.css.ts | 7 + packages/mdx-components/tsconfig.json | 8 + packages/open-api-component/package.json | 19 +- .../src/IsomorphicSuspense.tsx | 17 - .../src/OpenAPI/SwaggerUi.tsx | 6 + .../open-api-component/src/OpenAPI/index.tsx | 8 +- packages/open-api-component/src/index.ts | 4 + packages/open-api-component/src/index.tsx | 1 - .../src/{OpenAPI => }/styles.css.ts | 0 packages/open-api-component/src/styles.ts | 3 - packages/plugins/package.json | 2 +- packages/schemas/src/ActiveEnvSchema.ts | 7 + packages/schemas/src/index.ts | 1 + packages/site-components-next/package.json | 55 + .../src/AppHeader/index.tsx | 138 + .../src/Breadcrumbs/index.tsx | 8 + .../src/DocPaginator/index.tsx | 16 + .../src/EditionFilterView/index.tsx | 17 + .../site-components-next/src/Footer/index.tsx | 8 + .../src/MDXContent/index.tsx | 12 + .../src/SearchInput/index.tsx | 12 + .../src/Sidebar/index.tsx | 18 + .../site-components-next/src/TOC/index.tsx | 16 + .../src/actions/compile.ts | 49 + .../src/actions/preview.ts | 37 + packages/site-components-next/src/index.ts | 14 + .../site-components-next/src/mdx/elements.ts | 34 + .../site-components-next/src/mdx/index.tsx | 239 + packages/site-components-next/tsconfig.json | 8 + packages/site-components/package.json | 16 +- packages/site-components/src/404.tsx | 18 +- packages/site-components/src/500.tsx | 22 +- .../src/AppHeader/AppHeader.tsx | 9 +- .../site-components/src/AppHeader/index.ts | 6 +- .../src/AppHeader/withAppHeaderAdapter.tsx | 46 - .../src/AppHeaderControls/index.tsx | 13 +- .../src/AppHeaderTabs/index.tsx | 36 +- .../site-components/src/BaseUrlProvider.tsx | 39 - packages/site-components/src/Body.tsx | 81 - .../src/Breadcrumbs/Breadcrumb.tsx | 2 +- .../src/Breadcrumbs/Breadcrumbs.tsx | 4 +- .../site-components/src/Breadcrumbs/index.ts | 9 +- .../Breadcrumbs/withBreadcrumbsAdapter.tsx | 7 - .../src/DocPaginator/DocPaginator.tsx | 98 +- .../site-components/src/DocPaginator/index.ts | 6 +- .../DocPaginator/withNavigationAdapter.tsx | 9 - packages/site-components/src/Document.tsx | 20 - packages/site-components/src/Drawer/index.tsx | 18 +- .../site-components/src/Drawer/styles.css.ts | 8 +- packages/site-components/src/Footer/index.ts | 7 +- .../src/Footer/withFooterAdapter.tsx | 7 - packages/site-components/src/HTMLView.tsx | 48 - .../src/Home/__tests__/index.test.tsx | 16 - packages/site-components/src/Home/index.tsx | 77 - .../site-components/src/Home/styles.css.ts | 57 - packages/site-components/src/Image/index.tsx | 12 +- packages/site-components/src/Link.tsx | 21 +- packages/site-components/src/Metadata.tsx | 25 - .../site-components/src/PageNavigation.tsx | 25 +- .../src/SearchInput/Results.tsx | 4 +- .../site-components/src/SearchInput/index.tsx | 10 +- .../src/SearchInput/useSearchData.ts | 14 - .../site-components/src/SessionProvider.tsx | 5 + .../site-components/src/Sidebar/index.tsx | 2 +- .../src/TableOfContents/TableOfContents.tsx | 6 +- .../TableOfContents/TableOfContentsItem.tsx | 5 +- .../src/TableOfContents/index.ts | 9 +- .../withTableOfContentsAdapter.tsx | 10 - .../site-components/src/ThemeProvider.tsx | 23 + .../site-components/src/UserProfile/index.tsx | 2 +- .../src/VerticalNavigation.tsx | 6 +- packages/site-components/src/index.tsx | 12 +- packages/site-components/src/mdx.tsx | 21 - packages/site-components/src/package.json | 14 + packages/site-middleware/CHANGELOG.md | 858 ---- packages/site-middleware/README.md | 14 - packages/site-middleware/package.json | 67 - .../site-middleware/src/MiddlewareError.ts | 26 - .../src/__tests__/withMDXContent.test.ts | 105 - .../src/__tests__/withSearchIndex.test.ts | 175 - .../src/__tests__/withSharedConfig.test.ts | 155 - packages/site-middleware/src/compileMdx.ts | 20 - .../src/createMiddlewareRunner.ts | 106 - packages/site-middleware/src/index.ts | 9 - .../loaders/__tests__/createS3Loader.test.ts | 56 - .../src/loaders/__tests__/getS3Config.test.ts | 45 - .../loaders/__tests__/loadLocalFile.test.ts | 38 - .../src/loaders/createS3Loader.ts | 61 - .../src/loaders/getSnapshotFileConfig.ts | 16 - .../src/loaders/getSnapshotS3Config.ts | 19 - packages/site-middleware/src/loaders/index.ts | 4 - .../src/loaders/loadLocalFile.ts | 12 - .../site-middleware/src/middlewarePresets.ts | 47 - .../site-middleware/src/plugins/codeBlocks.ts | 87 - .../site-middleware/src/withMDXContent.ts | 123 - .../site-middleware/src/withMosaicMode.ts | 26 - .../site-middleware/src/withSearchIndex.ts | 104 - packages/site-middleware/src/withSession.ts | 56 - .../site-middleware/src/withSharedConfig.ts | 82 - packages/site-preset-styles/package.json | 6 +- packages/site-preset-styles/src/index.js | 8 +- packages/site/.env.local | 1 - packages/site/.eslintrc.js | 3 +- packages/site/mosaic.config.mjs | 29 +- packages/site/next-env.d.ts | 1 + packages/site/next.config.js | 57 +- packages/site/package.json | 16 +- .../site/public/img/{favicon.png => logo.png} | Bin .../latest => public}/search-config.json | 0 .../site/public/search-data-condensed.json | 1 + packages/site/public/search-data.json | 2 +- packages/site/public/sitemap.xml | 5 + .../snapshots/latest/mosaic/another/example | 1 - .../snapshots/latest/mosaic/author/aliases | 1 - .../latest/mosaic/author/aliases.mdx | 152 - .../snapshots/latest/mosaic/author/fragments | 1 - .../latest/mosaic/author/fragments.mdx | 200 - .../latest/mosaic/author/frontmatter | 1 - .../latest/mosaic/author/frontmatter.mdx | 254 - .../site/snapshots/latest/mosaic/author/index | 1 - .../snapshots/latest/mosaic/author/index.mdx | 102 - .../latest/mosaic/author/markdown-syntax | 1 - .../latest/mosaic/author/markdown-syntax.mdx | 134 - .../site/snapshots/latest/mosaic/author/refs | 1 - .../snapshots/latest/mosaic/author/refs.mdx | 346 -- .../latest/mosaic/author/shared-config.json | 1 - .../latest/mosaic/author/sidebar.json | 1 - .../snapshots/latest/mosaic/author/sidebars | 1 - .../latest/mosaic/author/sidebars.mdx | 233 - .../site/snapshots/latest/mosaic/author/tags | 1 - .../snapshots/latest/mosaic/author/tags.mdx | 177 - .../latest/mosaic/author/ui-components | 1 - .../latest/mosaic/author/ui-components.mdx | 103 - .../latest/mosaic/configure/admin/index | 1 - .../latest/mosaic/configure/admin/index.mdx | 434 -- .../mosaic/configure/admin/shared-config.json | 1 - .../snapshots/latest/mosaic/configure/index | 1 - .../latest/mosaic/configure/index.mdx | 412 -- .../mosaic/configure/layouts/detail-highlight | 1 - .../configure/layouts/detail-highlight.mdx | 444 -- .../mosaic/configure/layouts/detail-overview | 1 - .../configure/layouts/detail-overview.mdx | 535 -- .../mosaic/configure/layouts/detail-technical | 1 - .../configure/layouts/detail-technical.mdx | 539 -- .../latest/mosaic/configure/layouts/index | 1 - .../latest/mosaic/configure/layouts/index.mdx | 419 -- .../latest/mosaic/configure/layouts/landing | 1 - .../mosaic/configure/layouts/landing.mdx | 447 -- .../mosaic/configure/layouts/product-discover | 1 - .../configure/layouts/product-discover.mdx | 443 -- .../mosaic/configure/layouts/product-preview | 1 - .../configure/layouts/product-preview.mdx | 441 -- .../configure/layouts/shared-config.json | 1 - .../latest/mosaic/configure/modes/active | 1 - .../latest/mosaic/configure/modes/active.mdx | 464 -- .../latest/mosaic/configure/modes/index | 1 - .../latest/mosaic/configure/modes/index.mdx | 469 -- .../mosaic/configure/modes/shared-config.json | 1 - .../mosaic/configure/modes/snapshot-file | 1 - .../mosaic/configure/modes/snapshot-file.mdx | 441 -- .../latest/mosaic/configure/modes/snapshot-s3 | 1 - .../mosaic/configure/modes/snapshot-s3.mdx | 453 -- .../mosaic/configure/plugins/alias-plugin | 1 - .../mosaic/configure/plugins/alias-plugin.mdx | 432 -- .../configure/plugins/breadcrumbs-plugin | 1 - .../configure/plugins/breadcrumbs-plugin.mdx | 468 -- .../configure/plugins/broken-links-plugin | 1 - .../configure/plugins/broken-links-plugin.mdx | 501 -- .../mosaic/configure/plugins/codemod-plugin | 1 - .../configure/plugins/codemod-plugin.mdx | 422 -- .../latest/mosaic/configure/plugins/index | 1 - .../latest/mosaic/configure/plugins/index.mdx | 523 -- .../mosaic/configure/plugins/lazy-page-plugin | 1 - .../configure/plugins/lazy-page-plugin.mdx | 479 -- .../configure/plugins/lifecycle/after-source | 1 - .../plugins/lifecycle/after-source.mdx | 461 -- .../configure/plugins/lifecycle/after-update | 1 - .../plugins/lifecycle/after-update.mdx | 450 -- .../configure/plugins/lifecycle/before-send | 1 - .../plugins/lifecycle/before-send.mdx | 446 -- .../mosaic/configure/plugins/lifecycle/index | 1 - .../configure/plugins/lifecycle/index.mdx | 438 -- .../plugins/lifecycle/shared-config.json | 1 - .../plugins/lifecycle/should-clear-cache | 1 - .../plugins/lifecycle/should-clear-cache.mdx | 452 -- .../lifecycle/should-update-namespace-sources | 1 - .../should-update-namespace-sources.mdx | 447 -- .../plugins/pages-wthout-extensions-plugin | 1 - .../pages-wthout-extensions-plugin.mdx | 454 -- .../configure/plugins/public-assets-plugin | 1 - .../plugins/public-assets-plugin.mdx | 461 -- .../configure/plugins/reading-time-plugin | 1 - .../configure/plugins/reading-time-plugin.mdx | 450 -- .../mosaic/configure/plugins/ref-plugin | 1 - .../mosaic/configure/plugins/ref-plugin.mdx | 430 -- .../configure/plugins/search-index-plugin | 1 - .../configure/plugins/search-index-plugin.mdx | 516 -- .../configure/plugins/shared-config-plugin | 1 - .../plugins/shared-config-plugin.mdx | 484 -- .../configure/plugins/shared-config.json | 1 - .../mosaic/configure/plugins/sidebar-plugin | 1 - .../configure/plugins/sidebar-plugin.mdx | 477 -- .../mosaic/configure/plugins/site-map-plugin | 1 - .../configure/plugins/site-map-plugin.mdx | 479 -- .../mosaic/configure/plugins/tag-plugin | 1 - .../mosaic/configure/plugins/tag-plugin.mdx | 495 -- .../mosaic/configure/plugins/toc-plugin | 1 - .../mosaic/configure/plugins/toc-plugin.mdx | 473 -- .../mosaic/configure/shared-config.json | 1 - .../latest/mosaic/configure/sidebar.json | 1 - .../mosaic/configure/sources/git-repo-source | 1 - .../configure/sources/git-repo-source.mdx | 492 -- .../mosaic/configure/sources/http-source | 1 - .../mosaic/configure/sources/http-source.mdx | 467 -- .../latest/mosaic/configure/sources/index | 1 - .../latest/mosaic/configure/sources/index.mdx | 536 -- .../configure/sources/local-folder-source | 1 - .../configure/sources/local-folder-source.mdx | 466 -- .../latest/mosaic/configure/sources/schedules | 1 - .../mosaic/configure/sources/schedules.mdx | 536 -- .../configure/sources/shared-config.json | 1 - .../mosaic/configure/sources/source-figma | 1 - .../mosaic/configure/sources/source-figma.mdx | 502 -- .../mosaic/configure/sources/source-readme | 1 - .../configure/sources/source-readme.mdx | 488 -- .../mosaic/configure/sources/source-storybook | 1 - .../configure/sources/source-storybook.mdx | 498 -- .../mosaic/configure/theme/custom-components | 1 - .../configure/theme/custom-components.mdx | 574 --- .../latest/mosaic/configure/theme/custom-css | 1 - .../mosaic/configure/theme/custom-css.mdx | 526 -- .../latest/mosaic/configure/theme/index | 1 - .../latest/mosaic/configure/theme/index.mdx | 439 -- .../mosaic/configure/theme/shared-config.json | 1 - .../snapshots/latest/mosaic/example/aliases | 1 - .../latest/mosaic/fragments/content-fragment | 1 - .../mosaic/fragments/content-fragment.mdx | 32 - .../snapshots/latest/mosaic/fragments/index | 1 - .../latest/mosaic/fragments/index.mdx | 32 - .../mosaic/fragments/shared-config.json | 1 - .../latest/mosaic/fragments/sidebar.json | 1 - .../snapshots/latest/mosaic/fragments/tile-a | 1 - .../latest/mosaic/fragments/tile-a.mdx | 30 - .../snapshots/latest/mosaic/fragments/tile-b | 1 - .../latest/mosaic/fragments/tile-b.mdx | 30 - .../mosaic/getting-started/create-a-site | 1 - .../mosaic/getting-started/create-a-site.mdx | 150 - .../latest/mosaic/getting-started/index | 1 - .../latest/mosaic/getting-started/index.mdx | 58 - .../getting-started/publish-site-to-aws | 1 - .../getting-started/publish-site-to-aws.mdx | 167 - .../mosaic/getting-started/shared-config.json | 1 - .../mosaic/getting-started/sidebar.json | 1 - packages/site/snapshots/latest/mosaic/index | 1 - .../site/snapshots/latest/mosaic/index.mdx | 65 - .../snapshots/latest/mosaic/products/producta | 1 - .../latest/mosaic/products/producta.mdx | 41 - .../snapshots/latest/mosaic/products/productb | 1 - .../latest/mosaic/products/productb.mdx | 41 - .../latest/mosaic/products/sidebar.json | 1 - .../snapshots/latest/mosaic/publish/index | 1 - .../snapshots/latest/mosaic/publish/index.mdx | 96 - .../latest/mosaic/publish/publish-site-to-aws | 1 - .../mosaic/publish/publish-site-to-aws.mdx | 91 - .../mosaic/publish/publish-site-to-vercel | 1 - .../mosaic/publish/publish-site-to-vercel.mdx | 114 - .../latest/mosaic/publish/shared-config.json | 1 - .../latest/mosaic/publish/sidebar.json | 1 - .../latest/mosaic/shared-config.json | 1 - packages/site/snapshots/latest/mosaic/sitemap | 1 - .../site/snapshots/latest/mosaic/sitemap.mdx | 21 - .../latest/mosaic/test/aliases/index | 1 - .../latest/mosaic/test/aliases/index.mdx | 164 - .../mosaic/test/aliases/shared-config.json | 1 - .../site/snapshots/latest/mosaic/test/example | 1 - .../site/snapshots/latest/mosaic/test/index | 1 - .../snapshots/latest/mosaic/test/index.mdx | 158 - .../mosaic/test/layouts/detail-highlight | 1 - .../mosaic/test/layouts/detail-highlight.mdx | 234 - .../mosaic/test/layouts/detail-overview | 1 - .../mosaic/test/layouts/detail-overview.mdx | 234 - .../mosaic/test/layouts/detail-technical | 1 - .../mosaic/test/layouts/detail-technical.mdx | 234 - .../snapshots/latest/mosaic/test/layouts/edit | 1 - .../latest/mosaic/test/layouts/edit.mdx | 190 - .../latest/mosaic/test/layouts/full-width | 1 - .../latest/mosaic/test/layouts/full-width.mdx | 190 - .../latest/mosaic/test/layouts/index | 1 - .../latest/mosaic/test/layouts/index.mdx | 164 - .../latest/mosaic/test/layouts/landing | 1 - .../latest/mosaic/test/layouts/landing.mdx | 207 - .../latest/mosaic/test/layouts/newsletter | 1 - .../latest/mosaic/test/layouts/newsletter.mdx | 234 - .../mosaic/test/layouts/product-discover | 1 - .../mosaic/test/layouts/product-discover.mdx | 234 - .../mosaic/test/layouts/product-preview | 1 - .../mosaic/test/layouts/product-preview.mdx | 234 - .../mosaic/test/layouts/shared-config.json | 1 - .../snapshots/latest/mosaic/test/refs/data | 1 - .../latest/mosaic/test/refs/data.mdx | 162 - .../snapshots/latest/mosaic/test/refs/index | 1 - .../latest/mosaic/test/refs/index.mdx | 170 - .../mosaic/test/refs/shared-config.json | 1 - .../latest/mosaic/test/shared-config.json | 1 - .../snapshots/latest/mosaic/test/sidebar.json | 1 - .../snapshots/latest/mosaic/test/tags/index | 1 - .../latest/mosaic/test/tags/index.mdx | 179 - .../mosaic/test/tags/shared-config.json | 1 - .../latest/search-data-condensed.json | 1 - .../site/snapshots/latest/search-data.json | 1 - packages/site/snapshots/latest/sitemap.xml | 422 -- packages/site/src/app/[...slug]/Body.tsx | 34 + packages/site/src/app/[...slug]/View.tsx | 23 + packages/site/src/app/[...slug]/error.tsx | 22 + packages/site/src/app/[...slug]/layout.tsx | 57 + packages/site/src/app/[...slug]/page.tsx | 48 + packages/site/src/app/error.tsx | 29 + packages/site/src/app/favicon.ico | Bin 0 -> 15662 bytes packages/site/src/app/fonts.ts | 16 + packages/site/src/app/layout.tsx | 23 + packages/site/src/app/not-found.tsx | 18 + packages/site/src/pages/[...route].tsx | 33 - packages/site/src/pages/_app.tsx | 68 - packages/site/src/pages/_document.tsx | 8 - .../site/src/pages/api/content/preview.ts | 26 - packages/site/src/pages/index.tsx | 21 - packages/site/src/types/mosaic.ts | 25 - packages/site/tsconfig.json | 14 +- packages/source-git-repo/src/Repo.ts | 2 +- .../standard-generator/scripts/bundle.mjs | 11 +- .../src/templates/next.config.js.hbs | 1 - .../src/templates/package.json.hbs | 6 +- packages/store/package.json | 6 +- packages/store/src/StoreContext.ts | 6 + packages/store/src/StoreProvider.tsx | 21 + packages/store/src/__tests__/store.test.ts | 219 +- .../store/src/__tests__/test-utils/utils.tsx | 26 - .../store/src/__tests__/useAppHeader.test.ts | 158 - .../src/__tests__/useBreadcrumbs.test.ts | 43 - .../store/src/__tests__/useColorMode.test.ts | 25 +- .../store/src/__tests__/useFooter.test.ts | 65 - .../src/__tests__/useImageComponent.test.ts | 26 + .../store/src/__tests__/useLayout.test.ts | 25 - .../src/__tests__/useLinkComponent.test.ts | 26 + packages/store/src/__tests__/useMeta.test.ts | 36 - packages/store/src/__tests__/useRoute.test.ts | 25 - .../src/__tests__/useSearchIndex.test.ts | 87 - packages/store/src/__tests__/useStore.test.ts | 28 + .../src/__tests__/useStoreActions.test.ts | 36 - .../src/__tests__/useTableOfContents.test.ts | 33 - packages/store/src/__tests__/utils/utils.tsx | 15 + packages/store/src/index.ts | 19 +- packages/store/src/store.ts | 140 +- packages/store/src/types/colorMode.ts | 4 - packages/store/src/types/index.ts | 12 - packages/store/src/types/layout.ts | 7 - packages/store/src/types/meta.ts | 13 - packages/store/src/types/route.ts | 7 - packages/store/src/useAppHeader.ts | 46 - packages/store/src/useBreadcrumbs.ts | 11 - packages/store/src/useColorMode.ts | 17 +- packages/store/src/useFooter.ts | 10 - packages/store/src/useImageComponent.ts | 7 + packages/store/src/useLayout.ts | 9 - packages/store/src/useLinkComponent.ts | 7 + packages/store/src/useMeta.ts | 17 - packages/store/src/useNavigation.ts | 10 - packages/store/src/useRoute.ts | 9 - packages/store/src/useSearchIndex.ts | 17 - packages/store/src/useSidebar.ts | 23 - packages/store/src/useStore.ts | 16 + packages/store/src/useStoreActions.ts | 2 - packages/store/src/useTableOfContents.ts | 8 - packages/theme/package.json | 14 +- packages/theme/src/baseline/baseline.css.ts | 6 +- packages/theme/src/color/callout.css.ts | 39 - packages/theme/src/config.ts | 3 +- packages/theme/src/gutter/index.css.ts | 23 + packages/theme/src/icon/index.ts | 1 - packages/theme/src/index.ts | 4 +- packages/theme/src/pre/index.css.ts | 11 + .../theme/src/responsive/responsive.css.ts | 126 +- packages/theme/src/typography/action.css.ts | 12 +- packages/theme/src/typography/amount.css.ts | 12 +- packages/theme/src/typography/caption.css.ts | 12 +- packages/theme/src/typography/code.css.ts | 39 +- packages/theme/src/typography/eyebrow.css.ts | 12 +- packages/theme/src/typography/heading.css.ts | 28 +- .../theme/src/typography/paragraph.css.ts | 12 +- packages/theme/src/typography/subtitle.css.ts | 12 +- .../theme/src/typography/watermark.css.ts | 12 +- packages/types/src/Mode.ts | 16 - .../src/types => types/src}/appHeader.ts | 7 +- .../src/types => types/src}/breadcrumbs.ts | 8 - .../{store/src/types => types/src}/footer.ts | 2 +- .../src/types => types/src}/helpLinks.ts | 0 packages/types/src/index.ts | 10 +- .../src/types => types/src}/navigation.ts | 4 - .../src/types => types/src}/searchIndex.ts | 5 - .../src/types => types/src}/sharedConfig.ts | 8 +- .../{store/src/types => types/src}/sidebar.ts | 10 +- .../types => types/src}/tableOfContents.ts | 0 tsconfig.bundle.json | 3 +- tsconfig.json | 4 +- turbo.json | 11 +- yarn.lock | 4433 +++++++++++------ 590 files changed, 5811 insertions(+), 38014 deletions(-) delete mode 100644 .changeset/brown-tips-cover.md delete mode 100644 .changeset/fluffy-onions-cry.md delete mode 100644 .changeset/ten-carrots-mix.md delete mode 100644 packages/cli/src/build.ts create mode 100644 packages/cli/src/exportStatic.ts create mode 100644 packages/cli/src/serveStatic.ts delete mode 100644 packages/cli/src/upload-s3-snapshot.ts delete mode 100644 packages/components/src/FormattedContent.tsx delete mode 100644 packages/components/src/ImageProvider.ts delete mode 100644 packages/components/src/LinkProvider.ts delete mode 100644 packages/components/src/Markdown/Heading.tsx delete mode 100644 packages/components/src/Markdown/Pre/index.css.ts delete mode 100644 packages/components/src/Markdown/Pre/index.tsx delete mode 100644 packages/components/src/Markdown/index.tsx delete mode 100644 packages/components/src/Markdown/markdownElements.tsx delete mode 100644 packages/components/src/Markdown/withMarkdownSpacing/styles.css.ts delete mode 100644 packages/components/src/ReactLive/index.tsx delete mode 100644 packages/components/src/ReactLive/styles.css.ts delete mode 100644 packages/components/src/ThemeProvider.tsx delete mode 100644 packages/components/src/__tests__/ReactLive.test.tsx create mode 100644 packages/content-editor-plugin/src/LazyEditor.tsx create mode 100644 packages/content-editor-plugin/src/components/ContentPreview.tsx create mode 100644 packages/icons/README.md create mode 100644 packages/icons/package.json rename packages/{theme => icons}/scripts/buildIcons.mjs (100%) create mode 100644 packages/icons/scripts/bundle.mjs rename packages/{theme => icons}/scripts/saltIconNames.mjs (99%) rename packages/{theme/src/icon/icons.ts => icons/src/index.ts} (92%) create mode 100644 packages/icons/tsconfig.json rename packages/{theme => icons}/types/saltIconNames.d.ts (100%) delete mode 100644 packages/layouts/src/Fade.tsx delete mode 100644 packages/layouts/src/LayoutConfigProvider/index.tsx delete mode 100644 packages/layouts/src/LayoutProvider.tsx delete mode 100644 packages/layouts/src/hooks/useIsLoading.ts create mode 100644 packages/layouts/src/layouts/Edit/index.css.ts delete mode 100644 packages/layouts/src/layouts/Edit/styles.css.ts delete mode 100644 packages/layouts/src/layouts/PythonDoc/index.tsx delete mode 100644 packages/layouts/src/layouts/PythonDoc/styles.css.ts delete mode 100644 packages/layouts/src/layouts/TypeDoc/ExportsSidebar/index.tsx delete mode 100644 packages/layouts/src/layouts/TypeDoc/ExportsSidebar/styles.css.ts delete mode 100644 packages/layouts/src/layouts/TypeDoc/icons.css delete mode 100644 packages/layouts/src/layouts/TypeDoc/icons.png delete mode 100644 packages/layouts/src/layouts/TypeDoc/icons@2x.png delete mode 100644 packages/layouts/src/layouts/TypeDoc/index.tsx delete mode 100644 packages/layouts/src/layouts/TypeDoc/style.css delete mode 100644 packages/layouts/src/layouts/TypeDoc/styles.css.ts delete mode 100644 packages/layouts/src/layouts/TypeDoc/widgets.png delete mode 100644 packages/layouts/src/layouts/TypeDoc/widgets@2x.png create mode 100644 packages/loaders/README.md create mode 100644 packages/loaders/package.json create mode 100644 packages/loaders/scripts/bundle.mjs create mode 100644 packages/loaders/src/index.ts create mode 100644 packages/loaders/src/types/index.ts rename packages/{site-middleware => loaders}/tsconfig.json (100%) create mode 100644 packages/mdx-components/README.md create mode 100644 packages/mdx-components/package.json rename packages/{components/src/Markdown => mdx-components/src}/BlockQuote/index.css.ts (100%) rename packages/{components/src/Markdown => mdx-components/src}/BlockQuote/index.tsx (100%) rename packages/{components/src/Markdown/AnchorHeading/index.css.ts => mdx-components/src/Heading/AnchorHeading.css.ts} (100%) rename packages/{components/src/Markdown/AnchorHeading/index.tsx => mdx-components/src/Heading/AnchorHeading.tsx} (86%) rename packages/{components/src/Markdown => mdx-components/src/Heading}/__tests__/Heading.test.tsx (83%) rename packages/{components/src/Markdown/AnchorHeading => mdx-components/src/Heading}/__tests__/index.test.tsx (80%) create mode 100644 packages/mdx-components/src/Heading/index.tsx rename packages/{components/src/Markdown => mdx-components/src}/InlineCode.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Link.tsx (75%) rename packages/{components/src/Markdown => mdx-components/src}/Table.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Tbody.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Td.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Th.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Thead.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/ThematicBreak/index.css.ts (100%) rename packages/{components/src/Markdown => mdx-components/src}/ThematicBreak/index.tsx (100%) rename packages/{components/src/Markdown => mdx-components/src}/Tr.tsx (100%) create mode 100644 packages/mdx-components/src/components.ts create mode 100644 packages/mdx-components/src/index.tsx create mode 100644 packages/mdx-components/src/markdownElements.tsx create mode 100644 packages/mdx-components/src/typography.tsx rename packages/{components/src/Markdown => mdx-components/src}/withMarkdownSpacing/index.tsx (100%) create mode 100644 packages/mdx-components/src/withMarkdownSpacing/styles.css.ts create mode 100644 packages/mdx-components/tsconfig.json delete mode 100644 packages/open-api-component/src/IsomorphicSuspense.tsx create mode 100644 packages/open-api-component/src/index.ts delete mode 100644 packages/open-api-component/src/index.tsx rename packages/open-api-component/src/{OpenAPI => }/styles.css.ts (100%) delete mode 100644 packages/open-api-component/src/styles.ts create mode 100644 packages/schemas/src/ActiveEnvSchema.ts create mode 100644 packages/site-components-next/package.json create mode 100644 packages/site-components-next/src/AppHeader/index.tsx create mode 100644 packages/site-components-next/src/Breadcrumbs/index.tsx create mode 100644 packages/site-components-next/src/DocPaginator/index.tsx create mode 100644 packages/site-components-next/src/EditionFilterView/index.tsx create mode 100644 packages/site-components-next/src/Footer/index.tsx create mode 100644 packages/site-components-next/src/MDXContent/index.tsx create mode 100644 packages/site-components-next/src/SearchInput/index.tsx create mode 100644 packages/site-components-next/src/Sidebar/index.tsx create mode 100644 packages/site-components-next/src/TOC/index.tsx create mode 100644 packages/site-components-next/src/actions/compile.ts create mode 100644 packages/site-components-next/src/actions/preview.ts create mode 100644 packages/site-components-next/src/index.ts create mode 100644 packages/site-components-next/src/mdx/elements.ts create mode 100644 packages/site-components-next/src/mdx/index.tsx create mode 100644 packages/site-components-next/tsconfig.json delete mode 100644 packages/site-components/src/AppHeader/withAppHeaderAdapter.tsx delete mode 100644 packages/site-components/src/BaseUrlProvider.tsx delete mode 100644 packages/site-components/src/Body.tsx delete mode 100644 packages/site-components/src/Breadcrumbs/withBreadcrumbsAdapter.tsx delete mode 100644 packages/site-components/src/DocPaginator/withNavigationAdapter.tsx delete mode 100644 packages/site-components/src/Document.tsx delete mode 100644 packages/site-components/src/Footer/withFooterAdapter.tsx delete mode 100644 packages/site-components/src/HTMLView.tsx delete mode 100644 packages/site-components/src/Home/__tests__/index.test.tsx delete mode 100644 packages/site-components/src/Home/index.tsx delete mode 100644 packages/site-components/src/Home/styles.css.ts delete mode 100644 packages/site-components/src/Metadata.tsx delete mode 100644 packages/site-components/src/SearchInput/useSearchData.ts create mode 100644 packages/site-components/src/SessionProvider.tsx delete mode 100644 packages/site-components/src/TableOfContents/withTableOfContentsAdapter.tsx create mode 100644 packages/site-components/src/ThemeProvider.tsx delete mode 100644 packages/site-components/src/mdx.tsx create mode 100644 packages/site-components/src/package.json delete mode 100644 packages/site-middleware/CHANGELOG.md delete mode 100644 packages/site-middleware/README.md delete mode 100644 packages/site-middleware/package.json delete mode 100644 packages/site-middleware/src/MiddlewareError.ts delete mode 100644 packages/site-middleware/src/__tests__/withMDXContent.test.ts delete mode 100644 packages/site-middleware/src/__tests__/withSearchIndex.test.ts delete mode 100644 packages/site-middleware/src/__tests__/withSharedConfig.test.ts delete mode 100644 packages/site-middleware/src/compileMdx.ts delete mode 100644 packages/site-middleware/src/createMiddlewareRunner.ts delete mode 100644 packages/site-middleware/src/index.ts delete mode 100644 packages/site-middleware/src/loaders/__tests__/createS3Loader.test.ts delete mode 100644 packages/site-middleware/src/loaders/__tests__/getS3Config.test.ts delete mode 100644 packages/site-middleware/src/loaders/__tests__/loadLocalFile.test.ts delete mode 100644 packages/site-middleware/src/loaders/createS3Loader.ts delete mode 100644 packages/site-middleware/src/loaders/getSnapshotFileConfig.ts delete mode 100644 packages/site-middleware/src/loaders/getSnapshotS3Config.ts delete mode 100644 packages/site-middleware/src/loaders/index.ts delete mode 100644 packages/site-middleware/src/loaders/loadLocalFile.ts delete mode 100644 packages/site-middleware/src/middlewarePresets.ts delete mode 100644 packages/site-middleware/src/plugins/codeBlocks.ts delete mode 100644 packages/site-middleware/src/withMDXContent.ts delete mode 100644 packages/site-middleware/src/withMosaicMode.ts delete mode 100644 packages/site-middleware/src/withSearchIndex.ts delete mode 100644 packages/site-middleware/src/withSession.ts delete mode 100644 packages/site-middleware/src/withSharedConfig.ts rename packages/site/public/img/{favicon.png => logo.png} (100%) rename packages/site/{snapshots/latest => public}/search-config.json (100%) create mode 100644 packages/site/public/search-data-condensed.json delete mode 120000 packages/site/snapshots/latest/mosaic/another/example delete mode 120000 packages/site/snapshots/latest/mosaic/author/aliases delete mode 100644 packages/site/snapshots/latest/mosaic/author/aliases.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/fragments delete mode 100644 packages/site/snapshots/latest/mosaic/author/fragments.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/frontmatter delete mode 100644 packages/site/snapshots/latest/mosaic/author/frontmatter.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/index delete mode 100644 packages/site/snapshots/latest/mosaic/author/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/markdown-syntax delete mode 100644 packages/site/snapshots/latest/mosaic/author/markdown-syntax.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/refs delete mode 100644 packages/site/snapshots/latest/mosaic/author/refs.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/author/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/author/sidebars delete mode 100644 packages/site/snapshots/latest/mosaic/author/sidebars.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/tags delete mode 100644 packages/site/snapshots/latest/mosaic/author/tags.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/author/ui-components delete mode 100644 packages/site/snapshots/latest/mosaic/author/ui-components.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/admin/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/admin/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/admin/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/landing delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/landing.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/product-discover delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/product-discover.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/product-preview delete mode 100644 packages/site/snapshots/latest/mosaic/configure/layouts/product-preview.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/layouts/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/modes/active delete mode 100644 packages/site/snapshots/latest/mosaic/configure/modes/active.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/modes/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/modes/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/modes/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file delete mode 100644 packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3 delete mode 100644 packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin delete mode 100644 packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/http-source delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/http-source.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/schedules delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/schedules.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/source-figma delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/source-figma.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/source-readme delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/source-readme.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/sources/source-storybook delete mode 100644 packages/site/snapshots/latest/mosaic/configure/sources/source-storybook.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/theme/custom-components delete mode 100644 packages/site/snapshots/latest/mosaic/configure/theme/custom-components.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/theme/custom-css delete mode 100644 packages/site/snapshots/latest/mosaic/configure/theme/custom-css.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/theme/index delete mode 100644 packages/site/snapshots/latest/mosaic/configure/theme/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/configure/theme/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/example/aliases delete mode 120000 packages/site/snapshots/latest/mosaic/fragments/content-fragment delete mode 100644 packages/site/snapshots/latest/mosaic/fragments/content-fragment.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/fragments/index delete mode 100644 packages/site/snapshots/latest/mosaic/fragments/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/fragments/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/fragments/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/fragments/tile-a delete mode 100644 packages/site/snapshots/latest/mosaic/fragments/tile-a.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/fragments/tile-b delete mode 100644 packages/site/snapshots/latest/mosaic/fragments/tile-b.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/getting-started/create-a-site delete mode 100644 packages/site/snapshots/latest/mosaic/getting-started/create-a-site.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/getting-started/index delete mode 100644 packages/site/snapshots/latest/mosaic/getting-started/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws delete mode 100644 packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/getting-started/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/getting-started/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/index delete mode 100644 packages/site/snapshots/latest/mosaic/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/products/producta delete mode 100644 packages/site/snapshots/latest/mosaic/products/producta.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/products/productb delete mode 100644 packages/site/snapshots/latest/mosaic/products/productb.mdx delete mode 100644 packages/site/snapshots/latest/mosaic/products/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/publish/index delete mode 100644 packages/site/snapshots/latest/mosaic/publish/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws delete mode 100644 packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel delete mode 100644 packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/publish/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/publish/sidebar.json delete mode 100644 packages/site/snapshots/latest/mosaic/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/sitemap delete mode 100644 packages/site/snapshots/latest/mosaic/sitemap.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/aliases/index delete mode 100644 packages/site/snapshots/latest/mosaic/test/aliases/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/aliases/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/test/example delete mode 120000 packages/site/snapshots/latest/mosaic/test/index delete mode 100644 packages/site/snapshots/latest/mosaic/test/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/detail-overview delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/detail-overview.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/detail-technical delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/detail-technical.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/edit delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/edit.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/full-width delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/full-width.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/index delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/landing delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/landing.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/newsletter delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/newsletter.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/product-discover delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/product-discover.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/product-preview delete mode 100644 packages/site/snapshots/latest/mosaic/test/layouts/product-preview.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/layouts/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/test/refs/data delete mode 100644 packages/site/snapshots/latest/mosaic/test/refs/data.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/refs/index delete mode 100644 packages/site/snapshots/latest/mosaic/test/refs/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/refs/shared-config.json delete mode 120000 packages/site/snapshots/latest/mosaic/test/shared-config.json delete mode 100644 packages/site/snapshots/latest/mosaic/test/sidebar.json delete mode 120000 packages/site/snapshots/latest/mosaic/test/tags/index delete mode 100644 packages/site/snapshots/latest/mosaic/test/tags/index.mdx delete mode 120000 packages/site/snapshots/latest/mosaic/test/tags/shared-config.json delete mode 100644 packages/site/snapshots/latest/search-data-condensed.json delete mode 100644 packages/site/snapshots/latest/search-data.json delete mode 100644 packages/site/snapshots/latest/sitemap.xml create mode 100644 packages/site/src/app/[...slug]/Body.tsx create mode 100644 packages/site/src/app/[...slug]/View.tsx create mode 100644 packages/site/src/app/[...slug]/error.tsx create mode 100644 packages/site/src/app/[...slug]/layout.tsx create mode 100644 packages/site/src/app/[...slug]/page.tsx create mode 100644 packages/site/src/app/error.tsx create mode 100644 packages/site/src/app/favicon.ico create mode 100644 packages/site/src/app/fonts.ts create mode 100644 packages/site/src/app/layout.tsx create mode 100644 packages/site/src/app/not-found.tsx delete mode 100755 packages/site/src/pages/[...route].tsx delete mode 100755 packages/site/src/pages/_app.tsx delete mode 100644 packages/site/src/pages/_document.tsx delete mode 100644 packages/site/src/pages/api/content/preview.ts delete mode 100644 packages/site/src/pages/index.tsx delete mode 100644 packages/site/src/types/mosaic.ts create mode 100644 packages/store/src/StoreContext.ts create mode 100644 packages/store/src/StoreProvider.tsx delete mode 100644 packages/store/src/__tests__/test-utils/utils.tsx delete mode 100644 packages/store/src/__tests__/useAppHeader.test.ts delete mode 100644 packages/store/src/__tests__/useBreadcrumbs.test.ts delete mode 100644 packages/store/src/__tests__/useFooter.test.ts create mode 100644 packages/store/src/__tests__/useImageComponent.test.ts delete mode 100644 packages/store/src/__tests__/useLayout.test.ts create mode 100644 packages/store/src/__tests__/useLinkComponent.test.ts delete mode 100644 packages/store/src/__tests__/useMeta.test.ts delete mode 100644 packages/store/src/__tests__/useRoute.test.ts delete mode 100644 packages/store/src/__tests__/useSearchIndex.test.ts create mode 100644 packages/store/src/__tests__/useStore.test.ts delete mode 100644 packages/store/src/__tests__/useStoreActions.test.ts delete mode 100644 packages/store/src/__tests__/useTableOfContents.test.ts create mode 100644 packages/store/src/__tests__/utils/utils.tsx delete mode 100644 packages/store/src/types/colorMode.ts delete mode 100644 packages/store/src/types/index.ts delete mode 100644 packages/store/src/types/layout.ts delete mode 100644 packages/store/src/types/meta.ts delete mode 100644 packages/store/src/types/route.ts delete mode 100644 packages/store/src/useAppHeader.ts delete mode 100644 packages/store/src/useBreadcrumbs.ts delete mode 100644 packages/store/src/useFooter.ts create mode 100644 packages/store/src/useImageComponent.ts delete mode 100644 packages/store/src/useLayout.ts create mode 100644 packages/store/src/useLinkComponent.ts delete mode 100644 packages/store/src/useMeta.ts delete mode 100644 packages/store/src/useNavigation.ts delete mode 100644 packages/store/src/useRoute.ts delete mode 100644 packages/store/src/useSearchIndex.ts delete mode 100644 packages/store/src/useSidebar.ts create mode 100644 packages/store/src/useStore.ts delete mode 100644 packages/store/src/useStoreActions.ts delete mode 100644 packages/store/src/useTableOfContents.ts create mode 100644 packages/theme/src/gutter/index.css.ts delete mode 100644 packages/theme/src/icon/index.ts create mode 100644 packages/theme/src/pre/index.css.ts delete mode 100644 packages/types/src/Mode.ts rename packages/{store/src/types => types/src}/appHeader.ts (91%) rename packages/{store/src/types => types/src}/breadcrumbs.ts (61%) rename packages/{store/src/types => types/src}/footer.ts (87%) rename packages/{store/src/types => types/src}/helpLinks.ts (100%) rename packages/{store/src/types => types/src}/navigation.ts (86%) rename packages/{store/src/types => types/src}/searchIndex.ts (78%) rename packages/{store/src/types => types/src}/sharedConfig.ts (54%) rename packages/{store/src/types => types/src}/sidebar.ts (83%) rename packages/{store/src/types => types/src}/tableOfContents.ts (100%) diff --git a/.changeset/brown-tips-cover.md b/.changeset/brown-tips-cover.md deleted file mode 100644 index 672d6b26..00000000 --- a/.changeset/brown-tips-cover.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@jpmorganchase/mosaic-site': patch -'@jpmorganchase/mosaic-standard-generator': patch ---- - -Fixed site font not loading from next/font diff --git a/.changeset/fluffy-onions-cry.md b/.changeset/fluffy-onions-cry.md deleted file mode 100644 index f4fe1c8f..00000000 --- a/.changeset/fluffy-onions-cry.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@jpmorganchase/mosaic-components': patch -'@jpmorganchase/mosaic-labs-components': patch -'@jpmorganchase/mosaic-content-editor-plugin': patch -'@jpmorganchase/mosaic-layouts': patch -'@jpmorganchase/mosaic-site': patch -'@jpmorganchase/mosaic-site-components': patch -'@jpmorganchase/mosaic-sitemap-component': patch ---- - -Updated Salt packages. diff --git a/.changeset/ten-carrots-mix.md b/.changeset/ten-carrots-mix.md deleted file mode 100644 index bfcb2805..00000000 --- a/.changeset/ten-carrots-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@jpmorganchase/mosaic-theme': patch ---- - -Added type:module to the package.json diff --git a/.eslintrc.js b/.eslintrc.js index f76c4c0e..38dcb30a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,11 @@ module.exports = { - extends: ['airbnb', 'airbnb-typescript', 'plugin:eslint-comments/recommended', 'prettier'], + extends: [ + 'airbnb', + 'airbnb-typescript', + 'plugin:eslint-comments/recommended', + 'prettier', + 'plugin:react-hooks/recommended' + ], parserOptions: { project: ['./tsconfig.json'] }, @@ -16,11 +22,13 @@ module.exports = { 'max-classes-per-file': 'off', 'import/prefer-default-export': 'off', 'react/function-component-definition': 'off', - 'react/require-default-props': 'off' + 'react/require-default-props': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/jsx-props-no-spreading': 'off' }, overrides: [ { - files: ['**/*.ts', 'packages/*/src/**/*.tsx', 'packages/site/newsletters/**/*.tsx'], + files: ['**/*.ts', 'packages/*/src/**/*.tsx'], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], extends: ['plugin:@typescript-eslint/recommended', 'plugin:import/typescript'], @@ -32,5 +40,10 @@ module.exports = { '@typescript-eslint/lines-between-class-members': 0 } } - ] + ], + settings: { + react: { + version: 'detect' + } + } }; diff --git a/.gitignore b/.gitignore index cf3946ce..dfbdd414 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ tsconfig.tsbuildinfo # Deployment packages/rig packages/site/public/images +packages/site/out # Test Results coverage diff --git a/.prettierignore b/.prettierignore index 425feed8..00661863 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,6 +11,7 @@ LICENSE *.png *.hbs *.jpg +*.ico **/build **/dist diff --git a/__mocks__/zustand.ts b/__mocks__/zustand.ts index 4e71448d..3c9324cc 100644 --- a/__mocks__/zustand.ts +++ b/__mocks__/zustand.ts @@ -1,23 +1,62 @@ +/** + * From: https://docs.pmnd.rs/zustand/guides/testing + * + * Modified to also export useStore + */ + +import * as zustand from 'zustand'; import { vi, afterEach } from 'vitest'; -const actualZustand = await vi.importActual('zustand'); +import { act } from '@testing-library/react'; -const actualCreate = actualZustand.create; +const { + create: actualCreate, + createStore: actualCreateStore, + useStore: actualUseStore +} = await vi.importActual('zustand'); -const stores = new Set<() => unknown>(); +// a variable to hold reset functions for all stores declared in the app +export const storeResetFns = new Set<() => void>(); -const create = ((createState: any) => { - const store = actualCreate(createState); +const createUncurried = (stateCreator: zustand.StateCreator) => { + const store = actualCreate(stateCreator); const initialState = store.getState(); - stores.add(() => store.setState(initialState, true)); + storeResetFns.add(() => { + store.setState(initialState, true); + }); + return store; +}; +// when creating a store, we get its initial state, create a reset function and add it in the set +export const create = ((stateCreator: zustand.StateCreator) => + // to support curried version of create + typeof stateCreator === 'function' + ? createUncurried(stateCreator) + : createUncurried) as typeof zustand.create; + +const createStoreUncurried = (stateCreator: zustand.StateCreator) => { + const store = actualCreateStore(stateCreator); + const initialState = store.getState(); + storeResetFns.add(() => { + store.setState(initialState, true); + }); return store; -}) as typeof actualCreate; +}; -afterEach(() => { - stores.forEach(resetFn => resetFn()); -}); +// when creating a store, we get its initial state, create a reset function and add it in the set +export const createStore = ((stateCreator: zustand.StateCreator) => + // to support curried version of createStore + typeof stateCreator === 'function' + ? createStoreUncurried(stateCreator) + : createStoreUncurried) as typeof zustand.createStore; -const { createStore, useStore } = actualZustand; +export { actualUseStore as useStore }; -export { create, createStore, useStore }; +// reset all stores after each test run +afterEach(() => { + act(() => { + storeResetFns.forEach(resetFn => { + resetFn(); + }); + }); +}); diff --git a/docs/author/refs.mdx b/docs/author/refs.mdx index d8ccbcd2..e6d69d9e 100644 --- a/docs/author/refs.mdx +++ b/docs/author/refs.mdx @@ -157,6 +157,7 @@ You can use Mosaic components with referenced data as well. Below we are using t {meta.data.modes.map(mode => ( =18.0.0 || >=20.0.0" }, - "bin": { - "mosaic": "yarn workspace @jpmorganchase/mosaic-cli" - }, "scripts": { "build:site": "turbo run build --filter=@jpmorganchase/mosaic-site", "build": "turbo run build", @@ -27,10 +24,10 @@ "e2e:codegen": "turbo run e2e:codegen --filter=@jpmorganchase/mosaic-site", "e2e:setup": "npx playwright install", "e2e": "turbo run e2e --filter=@jpmorganchase/mosaic-site", + "export:static": "turbo run export:static --filter=@jpmorganchase/mosaic-site", "gen:rig": "turbo run create:rig copy:rig:images --filter=//", "gen:site": "turbo run create:site copy:site:images --filter=//", - "gen:snapshot": "turbo run gen:snapshot --filter=@jpmorganchase/mosaic-site", - "gen": "turbo run gen:site gen:snapshot --filter=//", + "gen": "turbo run gen:site export:static --filter=//", "lint": "turbo run lint", "mosaic": "node ./packages/cli/dist/index.js", "postinstall": "patch-package", @@ -38,9 +35,8 @@ "prettier:ci": "prettier --check .", "prettier": "prettier --write .", "serve:rig": "turbo run serve --filter=@jpmorganchase/mosaic-rig", - "serve:snapshot:file": "turbo run serve:snapshot:file --filter=@jpmorganchase/mosaic-site", - "serve:snapshot:s3": "turbo run serve:snapshot:s3 --filter=@jpmorganchase/mosaic-site", "serve": "turbo run serve --filter=@jpmorganchase/mosaic-site", + "serve:static": "turbo run serve:static --filter=@jpmorganchase/mosaic-site", "start": "turbo run start --filter=@jpmorganchase/mosaic-site", "test:client": "vitest --project=client", "test:server": "vitest --project=server", @@ -59,7 +55,9 @@ "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.0.0", "@types/lodash-es": "^4.17.6", - "@types/node": "^17.0.24", + "@types/node": "^18.0.0", + "@types/react": "^18.2.46", + "@types/react-dom": "^18.2.18", "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "@vanilla-extract/esbuild-plugin": "^2.3.11", @@ -67,8 +65,8 @@ "concurrently": "^7.1.0", "del-cli": "^4.0.1", "esbuild": "0.23.1", - "esbuild-node-externals": "^1.7.0", - "eslint": "^7.23.0", + "esbuild-node-externals": "^1.12.0", + "eslint": "^8.51.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-prettier": "^8.5.0", @@ -77,7 +75,7 @@ "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "7.31.8", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.3.0", "fast-glob": "^3.2.7", "husky": "^8.0.0", @@ -90,7 +88,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "resize-observer-polyfill": "1.5.1", - "typescript": "^4.8.3", + "typescript": "^5.2.2", "vitest": "^2.0.0" }, "dependencies": { @@ -100,7 +98,8 @@ }, "resolutions": { "@braintree/sanitize-url": "^6.0.0", - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", + "@types/react-dom": "^18.2.18", "commander": "^9.4.0", "esbuild": "0.23.1", "json5": "^1.0.2" diff --git a/packages/cli/package.json b/packages/cli/package.json index 27e6dd83..45869a03 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -40,7 +40,7 @@ "devDependencies": { "@jpmorganchase/mosaic-types": "^0.1.0-beta.89", "esbuild": "0.23.1", - "esbuild-node-externals": "^1.0.2", + "esbuild-node-externals": "^1.12.0", "fast-glob": "^3.2.7", "@types/ws": "^8.5.7" }, @@ -52,6 +52,7 @@ "@aws-sdk/client-s3": "^3.645.0", "@fastify/middie": "^8.3.0", "@fastify/websocket": "^8.2.0", + "@fastify/static": "^6.11.2", "commander": "^9.4.1", "cors": "^2.8.5", "deepmerge": "^4.2.2", diff --git a/packages/cli/src/build.ts b/packages/cli/src/build.ts deleted file mode 100644 index 886125ca..00000000 --- a/packages/cli/src/build.ts +++ /dev/null @@ -1,105 +0,0 @@ -import fs from 'node:fs'; -import path from 'node:path'; -import deepmerge from 'deepmerge'; -import fsExtra from 'fs-extra'; -import MosaicCore from '@jpmorganchase/mosaic-core'; - -export default async function build(config, targetDir, options) { - // Strip out any plugins that are meant for runtime use only (i.e. `LazyPagePlugin`) - config.plugins = config.plugins.filter(({ runTimeOnly }) => !runTimeOnly); - // Turn off `cache` for each source - config.sources = config.sources.map(source => ({ - ...source, - options: { ...source.options, cache: false } - })); - const scope = options.scope && options.scope.split(','); - const mosaic = new MosaicCore(config); - const pathDir = path.posix.join(targetDir, options.name ?? new Date().toISOString()); - await fsExtra.emptyDir(pathDir); - await mosaic.start(); - // If `scope` arg was used, scope the filesystem to those namespaces - const filesystem = Array.isArray(scope) ? mosaic.filesystem.scope(scope) : mosaic.filesystem; - let calls = 0; - mosaic.onSourceUpdate(async () => { - try { - if (++calls === config.sources.length) { - const symlinks = filesystem.symlinksToJSON(); - const allFiles = await filesystem.promises.glob('**', { - cwd: '/', - onlyFiles: true - }); - for (const filePath of allFiles) { - // if (dotDirRegExp.test(filePath)) { - // continue; - // } - const rawFiles = await filesystem.promises.readFile(String(filePath), { - includeConflicts: true - }); - let rawFile = rawFiles[0]; - if (rawFiles.length > 1) { - // Join colliding JSON files together. e.g. sidebar.json files - if (path.posix.extname(String(filePath)) === '.json') { - console.warn( - `'${filePath}' returned multiple files at the same location. Since the files were JSON dot files, they were merged using \`deepmerge\`.` - ); - const allRawFiles: string[] = rawFiles.map(fileData => JSON.parse(String(fileData))); - rawFile = Buffer.from(JSON.stringify(deepmerge(allRawFiles[0], allRawFiles[1]))); - } else { - throw new Error(`'${filePath}' returned multiple files at the same location, this will result in overwritten data in the output. Aborting build. - -Try using \`--scope\` to just output certain namespaced sources, or adding a \`prefixDir\` to the source options to move the source files into a separate folder.`); - } - } - await fs.promises.mkdir(path.dirname(path.join(pathDir, String(filePath))), { - recursive: true - }); - await fs.promises.writeFile(path.join(pathDir, String(filePath)), rawFile); - } - const pwd = process.cwd(); - for (const alias in symlinks) { - if (alias.startsWith('/.tags')) { - continue; - } - for (const { target } of symlinks[alias]) { - if (target.startsWith('/.tags')) { - continue; - } - await fsExtra.ensureDir(path.join(pathDir, path.dirname(alias))); - - try { - const exists = !!(await fs.promises.stat(path.join(pathDir, alias))); - if (exists) { - console.error( - new Error( - `Symlink at '${path.join(pathDir, alias)}' already exists. Aborting build.` - ) - ); - process.exit(1); - } - } catch { - const targetPath = path.join(pathDir, target); - const aliasPath = path.join(pathDir, alias); - const aliasBasename = path.basename(aliasPath); - const targetSymlink = path.relative(path.dirname(aliasPath), targetPath); - process.chdir(path.dirname(aliasPath)); - if (fs.existsSync(aliasBasename)) { - fs.unlinkSync(aliasBasename); - } - await fs.promises.symlink(targetSymlink, aliasBasename); - } - } - } - process.chdir(pwd); - console.log( - `[Mosaic] filesystem for ${ - Array.isArray(scope) ? scope.length : config.sources.length - } source(s) written to disk at '${pathDir}'` - ); - mosaic.stop(); - } - } catch (e) { - console.error(e); - process.exit(1); - } - }); -} diff --git a/packages/cli/src/exportStatic.ts b/packages/cli/src/exportStatic.ts new file mode 100644 index 00000000..47af8153 --- /dev/null +++ b/packages/cli/src/exportStatic.ts @@ -0,0 +1,22 @@ +import { spawn } from 'node:child_process'; + +function runCommand(command) { + const child = spawn(command, { + cwd: process.cwd(), + shell: true + }); + child.stdout.on('data', progress => console.log(progress.toString())); + child.stderr.on('data', error => console.error(error.toString())); + return child; +} + +export default async function exportStatic() { + try { + const fsChild = runCommand(`yarn serve:fs`); + const buildChild = runCommand(`yarn build:static`); + buildChild.on('close', () => fsChild.kill()); + } catch (error) { + console.error(error); + process.exit(1); + } +} diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index d04f5199..bea1ba08 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -4,45 +4,42 @@ import path from 'node:path'; import { pathToFileURL } from 'node:url'; import serve from './serve.js'; -import uploadS3Snapshot from './upload-s3-snapshot.js'; -import build from './build.js'; +import exportStatic from './exportStatic.js'; +import serveStatic from './serveStatic.js'; import { updateTraceFile } from './vercel-snapshot.js'; program .option('-c, --config ', 'Config path') .option('-o, --out ', 'Output directory', '.tmp/.mosaic-build') .option('-s, --scope ', 'Command separated namespaces') - .option('-p, --port ', 'Port to serve on', '8080') - .option('-n, --name ', 'Snapshot name') - .option('-S, --snapshot ', 'Snapshot path'); + .option('-p, --port ', 'Port to serve on', '8080'); program.parse(); const options = program.opts(); -let config; -if (options.config !== undefined) { - config = await import(pathToFileURL(path.resolve(process.cwd(), options.config)).toString()); - - if (!config) { - throw new Error( - `[Mosaic] could not find config file at ${path.resolve(process.cwd(), options.config)}.` - ); - } +if (program.args[0] === 'export:static') { + exportStatic(); +} else if (program.args[0] === 'serve:static') { + serveStatic(path.resolve(process.cwd(), options.out), options.port); } else { - throw new Error(`[Mosaic] no config file provided`); -} + let config; + if (options.config !== undefined) { + config = await import(pathToFileURL(path.resolve(process.cwd(), options.config)).toString()); + + if (!config) { + throw new Error( + `[Mosaic] could not find config file at ${path.resolve(process.cwd(), options.config)}.` + ); + } + } else { + throw new Error(`[Mosaic] no config file provided`); + } -if (program.args[0] === 'build') { - build(config.default, path.resolve(process.cwd(), options.out), options); -} -if (program.args[0] === 'serve') { - serve(config.default, options.port, options.scope && options.scope.split(',')); -} -if (program.args[0] === 'upload') { - uploadS3Snapshot(path.resolve(process.cwd(), options.snapshot)); -} -if (program.args[0] === 'deploy') { - updateTraceFile(config.default, options); + if (program.args[0] === 'serve') { + serve(config.default, options.port, options.scope && options.scope.split(',')); + } else if (program.args[0] === 'deploy') { + updateTraceFile(config.default, options); + } } diff --git a/packages/cli/src/serveStatic.ts b/packages/cli/src/serveStatic.ts new file mode 100644 index 00000000..5eefbac0 --- /dev/null +++ b/packages/cli/src/serveStatic.ts @@ -0,0 +1,24 @@ +#!/usr/bin/env node +import Fastify from 'fastify'; +import fastifyStatic from '@fastify/static'; + +export default async function serveStatic(staticPath, port) { + const start = async () => { + try { + await server.listen({ port }); + console.log(`[Mosaic] Listening on port ${port}`); + } catch (err) { + server.log.error(err); + process.exit(1); + } + }; + + const server = Fastify(); + await server.register(fastifyStatic, { + root: staticPath + }); + server.setNotFoundHandler((_request, reply) => { + reply.sendFile(`404.html`); + }); + await start(); +} diff --git a/packages/cli/src/upload-s3-snapshot.ts b/packages/cli/src/upload-s3-snapshot.ts deleted file mode 100644 index 4493f9d5..00000000 --- a/packages/cli/src/upload-s3-snapshot.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { globby } from 'globby'; -import path from 'path'; -import fs from 'fs'; -import { S3Client, CreateBucketCommand, PutObjectCommand } from '@aws-sdk/client-s3'; -import assert from 'assert'; - -function createClient(region, accessKeyId, secretAccessKey): S3Client { - return new S3Client({ - region, - credentials: { - accessKeyId, - secretAccessKey - } - }); -} - -export default async function uploadS3Snapshot(targetDir) { - assert( - process.env.MOSAIC_S3_BUCKET, - 'Cannot read S3 bucket - MOSAIC_S3_BUCKET environment var is missing' - ); - assert( - process.env.MOSAIC_S3_REGION, - 'Cannot read S3 bucket - MOSAIC_S3_REGION environment var is missing' - ); - assert( - process.env.MOSAIC_S3_ACCESS_KEY_ID, - 'Cannot read S3 bucket - MOSAIC_S3_ACCESS_KEY_ID environment var is missing' - ); - assert( - process.env.MOSAIC_S3_SECRET_ACCESS_KEY, - 'Cannot read S3 bucket - MOSAIC_S3_SECRET_ACCESS_KEY environment var is missing' - ); - const bucket: string = process.env.MOSAIC_S3_BUCKET; - const region: string = process.env.MOSAIC_S3_REGION; - const accessKeyId: string = process.env.MOSAIC_S3_ACCESS_KEY_ID; - const secretAccessKey: string = process.env.MOSAIC_S3_SECRET_ACCESS_KEY; - - const client = createClient(region, accessKeyId, secretAccessKey); - await client.send(new CreateBucketCommand({ Bucket: bucket })); - const paths = await globby(targetDir); - paths.forEach(async filePath => { - const key = filePath.replace(`${targetDir}${path.sep}`, ''); - console.log(`Upload ${key} to bucket ${bucket}`); - const body = await fs.promises.readFile(filePath, { encoding: 'utf-8' }); - const putCommand = new PutObjectCommand({ - Bucket: bucket, - Key: key, - Body: body - }); - await client.send(putCommand); - }); -} diff --git a/packages/cli/src/vercel-snapshot.ts b/packages/cli/src/vercel-snapshot.ts index a7455550..9a360c76 100644 --- a/packages/cli/src/vercel-snapshot.ts +++ b/packages/cli/src/vercel-snapshot.ts @@ -22,7 +22,6 @@ export async function updateTraceFile(config, options) { const projectBase = process.cwd(); const buildDir = path.posix.join(projectBase, '.next'); const snapshotDir = options.out; - const snapshotName = options.name ?? new Date().toISOString(); if (!fsExtra.existsSync(buildDir)) { console.warn( @@ -32,7 +31,7 @@ export async function updateTraceFile(config, options) { const nftFilePath = path.posix.join(buildDir, 'server', 'pages', '[...route].js.nft.json'); // Find all snapshot files - const paths = await globby(`**/${snapshotDir}/${snapshotName}/**`, { + const paths = await globby(`**/${snapshotDir}/**`, { cwd: projectBase, onlyFiles: true }); diff --git a/packages/components-labs/package.json b/packages/components-labs/package.json index d5326541..1f2e9dd0 100644 --- a/packages/components-labs/package.json +++ b/packages/components-labs/package.json @@ -37,15 +37,15 @@ "@types/styled-components": "^5.1.26", "@vanilla-extract/esbuild-plugin": "^2.3.11", "del-cli": "^4.0.1", - "typescript": "^4.8.3" + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", "@salt-ds/core": "^1.33.0", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/recipes": "^0.2.1", - "@vanilla-extract/sprinkles": "^1.3.0", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/recipes": "^0.5.1", + "@vanilla-extract/sprinkles": "^1.6.1", "d3": "^7.7.0", "deepmerge": "^2.0.1", "mermaid": "9.3.0", @@ -53,7 +53,7 @@ "warning": "^3.0.0" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/components-labs/src/Diagram.tsx b/packages/components-labs/src/Diagram.tsx index 73c41bcc..7bc99bae 100644 --- a/packages/components-labs/src/Diagram.tsx +++ b/packages/components-labs/src/Diagram.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { Mermaid, MermaidProps } from 'mdx-mermaid/lib/Mermaid'; import warning from 'warning'; diff --git a/packages/components-labs/src/index.ts b/packages/components-labs/src/index.ts index a9b2953f..e2efa0e5 100644 --- a/packages/components-labs/src/index.ts +++ b/packages/components-labs/src/index.ts @@ -1,13 +1,4 @@ -import { withMarkdownSpacing } from '@jpmorganchase/mosaic-components'; -import { Diagram } from './Diagram'; -import { Sitemap } from './Sitemap'; -import type { SitemapProps } from './Sitemap'; -import type { DiagramProps } from './Diagram'; +'use client'; export * from './Diagram'; export * from './Sitemap'; - -export const getLabMarkdownComponents = () => ({ - Diagram: withMarkdownSpacing(Diagram), - Sitemap: withMarkdownSpacing(Sitemap) -}); diff --git a/packages/components/README.md b/packages/components/README.md index d13df85a..c747f247 100644 --- a/packages/components/README.md +++ b/packages/components/README.md @@ -2,9 +2,6 @@ `@jpmorganchase/mosaic-components` contains re-usable UI components that conform to the Mosaic Design language. -All the Mosaic UI components are available within the MDX context of a Mosaic site but equally could be used outside a -Mosaic site. - ## Installation `yarn add @jpmorganchase/mosaic-components` @@ -15,3 +12,4 @@ The criteria for a component within `@jpmorganchase/mosaic-components` is - It can be used outside the Mosaic site with only Mosaic theme dependencies. - It **should not** contain any Mosaic Store, NextJS or other site specific dependencies. +- Should be client-side only components diff --git a/packages/components/package.json b/packages/components/package.json index 2242fee7..72311628 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -38,31 +38,27 @@ "devDependencies": { "react": "^18.2.0", "del-cli": "^4.0.1", - "typescript": "^4.8.3" + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-store": "^0.1.0-beta.89", "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", "@salt-ds/core": "^1.33.0", "@salt-ds/lab": "1.0.0-alpha.50", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/sprinkles": "^1.3.0", - "@vanilla-extract/recipes": "^0.2.1", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/sprinkles": "^1.6.1", + "@vanilla-extract/recipes": "^0.5.1", "clsx": "^2.0.0", "deepmerge": "^2.0.1", "hoist-non-react-statics": "^3.3.2", "lodash-es": "^4.17.21", - "prism-react-renderer": "^1.1.1", - "react-live": "^4.0.0", - "react-markdown": "^9.0.0", "react-responsive-carousel": "3.2.10", "react-table": "^7.8.0", - "swagger-ui-react": "^5.0.0", "use-memo-one": "^1.1.1", "warning": "^3.0.0" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/components/src/BrowserOnly.tsx b/packages/components/src/BrowserOnly.tsx index a5c510a7..cc8198a7 100644 --- a/packages/components/src/BrowserOnly.tsx +++ b/packages/components/src/BrowserOnly.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { canUseDOM } from './canUseDOM'; export function BrowserOnly({ diff --git a/packages/components/src/Button.tsx b/packages/components/src/Button.tsx index f09526db..4b606c67 100644 --- a/packages/components/src/Button.tsx +++ b/packages/components/src/Button.tsx @@ -1,4 +1,4 @@ -import React, { type Ref, type ReactNode, forwardRef } from 'react'; +import { type Ref, type ReactNode, forwardRef } from 'react'; import classnames from 'clsx'; import { Button as SaltButton, ButtonProps as SaltButtonProps } from '@salt-ds/core'; import { button as buttonStyles } from '@jpmorganchase/mosaic-theme'; diff --git a/packages/components/src/EditionFilterView/index.tsx b/packages/components/src/EditionFilterView/index.tsx index 49015741..492fecc8 100644 --- a/packages/components/src/EditionFilterView/index.tsx +++ b/packages/components/src/EditionFilterView/index.tsx @@ -1,10 +1,10 @@ -import React from 'react'; +import React, { ReactNode } from 'react'; import classnames from 'clsx'; import { FilterResultCount, FilterView } from '../FilterView'; import { FilterDropdown, FilterSortDropdown } from '../FilterToolbar'; import { EditionTileLink } from '../EditionTileLink'; -import { FormattedContent } from '../FormattedContent'; +import { useBreakpoint } from '../useBreakpoint'; import styles from './styles.css'; export const createCustomFilter = (view, filters) => @@ -38,7 +38,7 @@ export type Edition = { group?: string; link: string; publicationDate: string; - formattedDescription?: string; + formattedDescription?: ReactNode; title?: string; }; @@ -58,20 +58,20 @@ export type EditionFilterViewProps = { ItemRenderer: EditionFilterViewRenderer; }; -export const DefaultEditionFilterViewRenderer: EditionFilterViewRenderer = (item, itemIndex) => ( - {item.formattedDescription} - ) : null - } - eyebrow={item.eyebrow} - image={item.image} - key={`editionTile-${itemIndex}`} - link={item.link} - title={item.title} - /> -); +export const DefaultEditionFilterViewRenderer: EditionFilterViewRenderer = (item, itemIndex) => { + const breakpoint = useBreakpoint(); + return ( + + ); +}; export const EditionFilterView: React.FC> = ({ className, ItemRenderer = DefaultEditionFilterViewRenderer, diff --git a/packages/components/src/EditionTileLink/index.tsx b/packages/components/src/EditionTileLink/index.tsx index 8307dba0..c2cfd620 100644 --- a/packages/components/src/EditionTileLink/index.tsx +++ b/packages/components/src/EditionTileLink/index.tsx @@ -1,22 +1,10 @@ -import React, { FC, ReactNode } from 'react'; +import React, { FC, ReactNode, useRef } from 'react'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; -import { LinkBase } from '../LinkBase'; -import { LinkText } from '../LinkText'; -import { TileBase, useTileState } from '../TileBase'; -import { useImageComponent } from '../ImageProvider'; import { useBreakpoint } from '../useBreakpoint'; import styles, { imageRecipe, tileImageRecipe } from './styles.css'; - -const PseudoLink = ({ children }) => { - const { - highlighted: [isHighlighted] - } = useTileState(); - return ( - - {children} - - ); -}; +import { Link } from '../Link'; +import { TileBase } from '../TileBase'; export type EditionTileLinkProps = { /** Additional class name for root class override */ @@ -65,26 +53,38 @@ export const EditionTileLink: React.FC { const breakpoint = useBreakpoint(); + const linkRef = useRef(null); const imagePlacementResponsive = breakpoint === 'mobile' ? 'fullWidth' : 'left'; const imagePlacement = imagePlacementProp || imagePlacementResponsive; + + const handleSelect = () => { + console.log('handle select'); + /** + * Why don't we just make the EditionTileLink a link itself and not use refs? + * Editions may contain content which **includes** links. + * It is invalid for a link to be within a link and will cause React hydration errors. + */ + linkRef.current?.click(); + }; + return ( - - + +
{image ? : null}
{eyebrow ?

{eyebrow}

: null} {title ?

{title}

: null} {description ?
{description}
: null} - -

Read More

-
+ + Read More +
- +
); }; diff --git a/packages/components/src/Feature/Feature.tsx b/packages/components/src/Feature/Feature.tsx index 4305510b..844b0654 100644 --- a/packages/components/src/Feature/Feature.tsx +++ b/packages/components/src/Feature/Feature.tsx @@ -1,9 +1,9 @@ import React from 'react'; import classnames from 'clsx'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; import { feature } from '@jpmorganchase/mosaic-theme'; import styles from './styles.css'; -import { useImageComponent } from '../ImageProvider'; export type FeatureClassesType = { content?: string; diff --git a/packages/components/src/FilterToolbar/FilterDropdown/index.tsx b/packages/components/src/FilterToolbar/FilterDropdown/index.tsx index f1ff6b3f..4c9950b9 100644 --- a/packages/components/src/FilterToolbar/FilterDropdown/index.tsx +++ b/packages/components/src/FilterToolbar/FilterDropdown/index.tsx @@ -1,4 +1,4 @@ -import React, { SyntheticEvent, useMemo } from 'react'; +import { SyntheticEvent, useMemo } from 'react'; import { Dropdown, DropdownProps, Option } from '@salt-ds/core'; import { Icon } from '../../Icon'; import { useToolbarDispatch, useToolbarState } from '../ToolbarProvider'; diff --git a/packages/components/src/FilterToolbar/Search/index.tsx b/packages/components/src/FilterToolbar/Search/index.tsx index b98f8f8d..efe590c2 100644 --- a/packages/components/src/FilterToolbar/Search/index.tsx +++ b/packages/components/src/FilterToolbar/Search/index.tsx @@ -1,4 +1,4 @@ -import React, { ChangeEvent, SyntheticEvent, useState } from 'react'; +import { ChangeEvent, SyntheticEvent, useState } from 'react'; import classnames from 'clsx'; import { ComboBox, Option, ComboBoxProps } from '@salt-ds/core'; import { Icon } from '../../Icon'; diff --git a/packages/components/src/FilterToolbar/SortDropdown/index.tsx b/packages/components/src/FilterToolbar/SortDropdown/index.tsx index 8b0cddaf..18a45167 100644 --- a/packages/components/src/FilterToolbar/SortDropdown/index.tsx +++ b/packages/components/src/FilterToolbar/SortDropdown/index.tsx @@ -1,4 +1,4 @@ -import React, { SyntheticEvent, useState } from 'react'; +import { SyntheticEvent, useState } from 'react'; import { Dropdown, Option, DropdownProps } from '@salt-ds/core'; import { Icon } from '../../Icon'; import { useToolbarDispatch, useToolbarState } from '../ToolbarProvider'; diff --git a/packages/components/src/FilterToolbar/index.tsx b/packages/components/src/FilterToolbar/index.tsx index 1ba88b03..a8069083 100644 --- a/packages/components/src/FilterToolbar/index.tsx +++ b/packages/components/src/FilterToolbar/index.tsx @@ -4,6 +4,4 @@ export * from './SortDropdown'; export * from './ToolbarProvider'; export * from './ContentArea'; export * from './Toolbar'; -export * from './PillGroup'; export * from './Search'; -export * from './SortDropdown'; diff --git a/packages/components/src/FormattedContent.tsx b/packages/components/src/FormattedContent.tsx deleted file mode 100644 index ecd02a32..00000000 --- a/packages/components/src/FormattedContent.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import ReactMarkdown, { Components } from 'react-markdown'; - -import { getMarkdownElements } from './Markdown/markdownElements'; - -type SupportedComponents = Pick< - Components, - 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'em' | 'strong' | 'ul' | 'ol' | 'li' -> & { - listItem: SupportedComponents['li']; - emphasis: SupportedComponents['em']; -}; - -type FormattedContentProps = { - className?: string; - children: string; - components?: SupportedComponents; -}; - -const { - h1: H1, - h2: H2, - h3: H3, - h4: H4, - h5: H5, - h6: H6, - ol: Ol, - ul: Ul, - li: ListItem, - em: Emphasis, - p: P, - strong: Strong -} = getMarkdownElements(); - -const renderers: SupportedComponents = { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h1: ({ node, ...props }) =>

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h2: ({ node, ...props }) =>

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h3: ({ node, ...props }) =>

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h4: ({ node, ...props }) =>

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h5: ({ node, ...props }) =>

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - h6: ({ node, ...props }) =>
, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - p: ({ node, children, ...props }) =>

{children}

, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - emphasis: ({ node, children, ...props }) => {children}, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - strong: ({ node, children, ...props }) => {children}, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ul: ({ node, children, ...props }) =>
    {children}
, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ol: ({ node, children, ...props }) =>
    {children}
, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - listItem: ({ node, children, ...props }) => {children} -}; - -export const FormattedContent: React.FC> = ({ - children, - components = {}, - ...rest -}) => ( - - {children} - -); diff --git a/packages/components/src/Grid/index.tsx b/packages/components/src/Grid/index.tsx index 489b360f..2bc9eaaa 100644 --- a/packages/components/src/Grid/index.tsx +++ b/packages/components/src/Grid/index.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, ReactNode, Ref } from 'react'; +import { forwardRef, ReactNode, Ref } from 'react'; import classnames from 'clsx'; import styles from './styles.css'; diff --git a/packages/components/src/GridBase/index.tsx b/packages/components/src/GridBase/index.tsx index 97b09325..608884e6 100644 --- a/packages/components/src/GridBase/index.tsx +++ b/packages/components/src/GridBase/index.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, ReactElement, Ref } from 'react'; +import { forwardRef, ReactElement, Ref } from 'react'; import classnames from 'clsx'; import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; import type { SpaceVars } from '@jpmorganchase/mosaic-theme'; diff --git a/packages/components/src/Hero/index.tsx b/packages/components/src/Hero/index.tsx index d9a33ecb..c2a284bd 100644 --- a/packages/components/src/Hero/index.tsx +++ b/packages/components/src/Hero/index.tsx @@ -1,10 +1,10 @@ -import React, { ReactElement } from 'react'; +import React, { ReactElement, ReactNode } from 'react'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; import classnames from 'clsx'; import { LinkButton } from '../LinkButton'; import styles from './styles.css'; import { Eyebrow, H1, P2 } from '../Typography'; -import { useImageComponent } from '../ImageProvider'; const formatTitle = (fullWidth: boolean, title: string, key: string): React.ReactNode => { const lines = title ? title.split('
') : []; @@ -30,6 +30,8 @@ export interface HeroLink { */ export interface HeroProps { backgroundImage?: string; + /** Optional children to use instead of links */ + children?: ReactNode; /** Additional class name for root class override. */ className?: string; /** Prop to provide a datestamp. */ @@ -42,7 +44,7 @@ export interface HeroProps { /** Image to be displayed. */ image?: string; /** The title of the Hero. */ - title: string | ReactElement; + title?: string | ReactElement; links?: HeroLink[]; /** Defines the variant. * @defaultValue `regular` @@ -95,8 +97,9 @@ function HeroImageContainer({ isFramed, heroBackgroundImage, heroImage, isFullWi * /> * ``` */ -export const Hero: React.FC> = ({ +export const Hero: React.FC = ({ backgroundImage, + children, className, datestamp, datestampLabel = 'Last Modified', @@ -139,7 +142,7 @@ export const Hero: React.FC> = ({ ) : null} {description ? {description} : null} {links ? ( -
+
{links.map((link, linkIndex) => { const isLastLink = linkIndex === links.length - 1; return ( @@ -157,7 +160,9 @@ export const Hero: React.FC> = ({ ); })}
- ) : null} + ) : ( +
{children}
+ )}
{image ? ( = createContext('img'); - -export const useImageComponent = (): ElementType => useContext(ImageContext); - -export const ImageProvider = ImageContext.Provider; diff --git a/packages/components/src/Impact/index.tsx b/packages/components/src/Impact/index.tsx index 32860c32..45b0c090 100644 --- a/packages/components/src/Impact/index.tsx +++ b/packages/components/src/Impact/index.tsx @@ -1,8 +1,8 @@ import React from 'react'; import classnames from 'clsx'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; import styles from './styles.css'; -import { useImageComponent } from '../ImageProvider'; export interface ImpactProps { /** Additional class name for root class override */ diff --git a/packages/components/src/Link/index.tsx b/packages/components/src/Link/index.tsx index 75ab2344..fc089115 100644 --- a/packages/components/src/Link/index.tsx +++ b/packages/components/src/Link/index.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, Ref } from 'react'; +import { forwardRef, Ref } from 'react'; import classnames from 'clsx'; import { LinkBase, LinkBaseProps } from '../LinkBase'; diff --git a/packages/components/src/LinkBase/index.tsx b/packages/components/src/LinkBase/index.tsx index 9929eeb1..add60b29 100644 --- a/packages/components/src/LinkBase/index.tsx +++ b/packages/components/src/LinkBase/index.tsx @@ -1,6 +1,6 @@ import React, { forwardRef, Ref } from 'react'; +import { useLinkComponent } from '@jpmorganchase/mosaic-store'; -import { useLinkComponent } from '../LinkProvider'; import { hasProtocol } from '../utils/hasProtocol'; export interface LinkBaseProps extends Omit, 'ref'> { diff --git a/packages/components/src/LinkProvider.ts b/packages/components/src/LinkProvider.ts deleted file mode 100644 index eff307d0..00000000 --- a/packages/components/src/LinkProvider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createContext, Context, ElementType, useContext } from 'react'; - -export type LinkProviderValue = ElementType; - -const LinkContext: Context = createContext('a'); - -export const useLinkComponent = (): ElementType => useContext(LinkContext); - -export const LinkProvider = LinkContext.Provider; diff --git a/packages/components/src/Markdown/Heading.tsx b/packages/components/src/Markdown/Heading.tsx deleted file mode 100644 index a77965b9..00000000 --- a/packages/components/src/Markdown/Heading.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { heading } from '@jpmorganchase/mosaic-theme'; - -import { withStyledTypography } from '../Typography/withStyledTypography'; - -export const H0 = withStyledTypography( - heading({ variant: 'heading0', context: 'markdown' }), - 'h1', - { role: 'heading' } -); -export const H1 = withStyledTypography( - heading({ variant: 'heading1', context: 'markdown' }), - 'h1', - { role: 'heading' } -); -export const H2 = withStyledTypography( - heading({ variant: 'heading2', context: 'markdown' }), - 'h2', - { role: 'heading' } -); -export const H3 = withStyledTypography( - heading({ variant: 'heading3', context: 'markdown' }), - 'h3', - { role: 'heading' } -); -export const H4 = withStyledTypography( - heading({ variant: 'heading4', context: 'markdown' }), - 'h4', - { role: 'heading' } -); -export const H5 = withStyledTypography( - heading({ variant: 'heading5', context: 'markdown' }), - 'h5', - { role: 'heading' } -); -export const H6 = withStyledTypography( - heading({ variant: 'heading6', context: 'markdown' }), - 'h6', - { role: 'heading' } -); diff --git a/packages/components/src/Markdown/Pre/index.css.ts b/packages/components/src/Markdown/Pre/index.css.ts deleted file mode 100644 index cce44f2b..00000000 --- a/packages/components/src/Markdown/Pre/index.css.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { style, globalStyle } from '@vanilla-extract/css'; -import { backgroundColor, foregroundColor, responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -const root = style({ - position: 'relative' -}); - -globalStyle(`${root} pre[class*=language-]`, { - textShadow: 'none' -}); - -export default { - button: style({ - top: '0px', - right: '0px', - selectors: { - [`${root} &`]: { - position: 'absolute' - } - } - }), - filename: style([ - backgroundColor({ variant: 'emphasis' }), - foregroundColor({ variant: 'low' }), - responsiveSprinkles({ - paddingLeft: ['x4', 'x4', 'x4', 'x4'] - }) - ]), - pre: style({ - selectors: { - [`${root} &`]: { - fontSize: '85%', - margin: 0, - whiteSpace: 'pre-wrap' - } - } - }), - root -}; diff --git a/packages/components/src/Markdown/Pre/index.tsx b/packages/components/src/Markdown/Pre/index.tsx deleted file mode 100644 index aae3e0d7..00000000 --- a/packages/components/src/Markdown/Pre/index.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import React, { useEffect, useState, useRef } from 'react'; -import classnames from 'clsx'; -import Highlight, { defaultProps as defaultPrismProps } from 'prism-react-renderer'; -import type { Language } from 'prism-react-renderer'; -import { Icon } from '../../Icon'; - -import { Button } from '../../Button'; -import { Link } from '../../Link'; -import { ReactLive } from '../../ReactLive'; -import { P2 } from '../../Typography'; -import styles from './index.css'; - -export type CodeBlockPropsType = { - components?: Record; -}; -export type CodeBlockMeta = { - code?: string; - filename?: string; - language?: Language; - live?: boolean; -}; - -export type PreProps = CodeBlockMeta & - React.HTMLProps & { CodeBlockProps?: CodeBlockPropsType }; - -const httpPattern = /^((http[s]?):\/\/)/; - -/** - * Supported syntax: - * - * ```jsx live - *
I will be live editable!
- * ``` - */ -export const Pre: React.FC> = ({ - children, - className, - code: codeProp = '', - CodeBlockProps, - filename, - language: languageProp, - live, - ...rest -}) => { - const preRef = useRef(null); - const [hovered, setHovered] = useState(false); - - const handleMouseEnter = () => { - setHovered(true); - }; - const handleMouseLeave = () => { - setHovered(false); - }; - const handleClickCopy = () => { - if (preRef.current && preRef.current.textContent) { - navigator.clipboard.writeText(preRef.current.textContent); - } - }; - - let code: string | undefined = codeProp.replace(/
/g, '\n'); - let language: Language | undefined = languageProp; - if (children) { - const codeBlock = (children as React.ReactElement<{ className?: string; children: string }>) - .props; - code = codeBlock.children; - language = codeBlock.className?.replace('language-', '') as Language; - } - - if (typeof code !== 'string') { - return null; - } - - let FilenameElement; - if (!filename) { - FilenameElement = null; - } else if (httpPattern.test(filename)) { - const basename = filename.substring(filename.lastIndexOf('/') + 1); - FilenameElement = ( - - {basename} - - ); - } else { - FilenameElement = {filename}; - } - - // If a language other than JSX or TSX is specified, bail out - const isLive = live && (language === 'tsx' || language === 'jsx'); - - return ( -
-
- {FilenameElement} - {hovered && ( - - )} -
- -
- ); -}; - -const CodeBlock = React.memo( - React.forwardRef< - HTMLPreElement | null, - { isLive?: boolean; code: string; components?: Record; language?: Language } - >(({ code, components, isLive = false, language = '' }, ref) => - isLive ? ( - - {code} - - ) : ( -
-        
-      
- ) - ) -); - -const CodeHighlight: React.FC> = - function CodeHighlight({ code, language }) { - const [isClient, setIsClient] = useState(false); - useEffect(() => { - setIsClient(true); - }, []); - - if (!isClient) { - return null; - } - let trimmedCode = code.replace(/\n+$/, ''); - return ( - - {({ tokens, getLineProps, getTokenProps }) => ( - <> - {tokens.map((line, i) => ( - // eslint-disable-next-line react/jsx-key -
- {line.map((token, key) => ( - // eslint-disable-next-line react/jsx-key - - ))} -
- ))} - - )} -
- ); - }; diff --git a/packages/components/src/Markdown/index.tsx b/packages/components/src/Markdown/index.tsx deleted file mode 100644 index 0a9ac220..00000000 --- a/packages/components/src/Markdown/index.tsx +++ /dev/null @@ -1,347 +0,0 @@ -import type { Ref } from 'react'; -import { - action, - amount, - caption, - eyebrow, - heading, - paragraph, - subtitle, - watermark -} from '@jpmorganchase/mosaic-theme'; -import { Icon, IconProps } from '../Icon'; -import { getMarkdownElements } from './markdownElements'; -import { Accordion, AccordionSection, AccordionDetails, AccordionSummary } from '../Accordion'; -import type { AccordionProps } from '../Accordion'; -import { AudioPlayer } from '../AudioPlayer'; -import { Button } from '../Button'; -import { Callout } from '../Callout'; -import type { CalloutProps } from '../Callout'; -import { Card } from '../Card'; -import type { CardProps } from '../Card'; -import { Cards } from '../Cards'; -import type { CardsProps } from '../Cards'; -import { ComponentExample } from '../ComponentExample'; -import type { ComponentExampleProps } from '../ComponentExample'; -import { DataTable } from '../DataTable'; -import type { DataTableProps } from '../DataTable'; -import { Feature, FeatureActions, FeatureContent, FeatureTitle, FeatureEyebrow } from '../Feature'; -import type { FeatureProps } from '../Feature'; -import type { FeaturesProps } from '../Features'; -import { Features } from '../Features'; -import { - FilterDropdown, - FilterPillGroup, - FilterSearch, - FilterSortDropdown, - FilterToolbar -} from '../FilterToolbar'; -import type { - FilterDropdownProps, - FilterPillGroupProps, - FilterSearchProps, - FilterSortDropdownProps, - FilterToolbarProps -} from '../FilterToolbar'; -import { FilterNoResults, FilterResultCount, FilterView } from '../FilterView'; -import type { FilterViewProps, FilterResultCountProps, FilterNoResultsProps } from '../FilterView'; -import { HelpLinks } from '../HelpLinks'; -import type { HelpLinksProps } from '../HelpLinks'; -import { Hero } from '../Hero'; -import { Impact } from '../Impact'; -import type { ImpactProps } from '../Impact'; -import { Impacts } from '../Impacts'; -import type { ImpactsProps } from '../Impacts'; -import { Label } from '../Label'; -import type { LabelProps } from '../Label'; -import { Link } from '../Link'; -import { LinkBase, LinkBaseProps } from '../LinkBase'; -import { LinkText, LinkTextProps } from '../LinkText'; -import { Links } from '../Links'; -import type { LinksProps } from '../Links'; -import { Tag } from '../Tag'; -import type { TagProps } from '../Tag'; -import { EditionFilterView } from '../EditionFilterView'; -import type { EditionTileLinkProps } from '../EditionTileLink'; -import { EditionTileLink } from '../EditionTileLink'; -import { GridBase } from '../GridBase'; -import type { GridBaseProps } from '../GridBase'; -import { Grid } from '../Grid'; -import type { GridProps } from '../Grid'; -import { PageFilterView } from '../PageFilterView'; -import { SecondaryNavbar } from '../SecondaryNavbar'; -import type { SecondaryNavbarProps } from '../SecondaryNavbar'; -import { SectionHeading } from '../SectionHeading'; -import { StickyHeader } from '../StickyHeader'; -import { Story } from '../Story'; -import type { StoryProps } from '../Story'; -import { TabsBase } from '../TabsBase'; -import { Tabs, Tab } from '../Tabs'; -import type { TabsProps } from '../Tabs'; -import { Tiles } from '../Tiles'; -import type { TilesProps } from '../Tiles'; -import { TileBase } from '../TileBase'; -import type { TileBaseProps } from '../TileBase'; -import { TileButton } from '../TileButton'; -import type { TileButtonProps } from '../TileButton'; -import { TileContent } from '../TileContent'; -import type { TileContentProps } from '../TileContent'; -import { TileContentLabel } from '../TileContentLabel'; -import type { TileContentLabelProps } from '../TileContentLabel'; -import { TileLink } from '../TileLink'; -import type { TileLinkProps } from '../TileLink'; -import { VideoPlayer } from '../VideoPlayer'; -import { ViewStack, View } from '../ViewStack'; -import type { ViewStackProps } from '../ViewStack'; -import { withStyledTypography } from '../Typography/withStyledTypography'; -import { withMarkdownSpacing } from './withMarkdownSpacing'; -import { ListItem, OrderedList, UnorderedList } from '../List'; -import type { ListItemProps, OrderedListProps, UnOrderedListProps } from '../List'; -import { LinkButton, LinkButtonProps } from '../LinkButton'; - -export { getMarkdownElements } from './markdownElements'; - -export { withMarkdownSpacing } from './withMarkdownSpacing'; -export * from './Pre'; - -export const getMarkdownComponents = () => { - const markdownElements = getMarkdownElements(); - return { - Accordion: withMarkdownSpacing(Accordion), - AccordionDetails, - AccordionSection, - AccordionSummary, - AudioPlayer, - Button, - Callout: withMarkdownSpacing(Callout), - Card: withMarkdownSpacing(Card), - Cards: withMarkdownSpacing(Cards), - ComponentExample: withMarkdownSpacing(ComponentExample), - DataTable: withMarkdownSpacing< - DataTableProps & { - ref?: Ref; - } - >(DataTable), - EditionFilterView, - EditionTileLink: withMarkdownSpacing(EditionTileLink), - Feature: withMarkdownSpacing(Feature), - FeatureActions, - FeatureContent, - FeatureEyebrow, - FeatureTitle, - Features: withMarkdownSpacing(Features), - FilterView: withMarkdownSpacing>(FilterView), - FilterDropdown: withMarkdownSpacing(FilterDropdown), - FilterToolbar: withMarkdownSpacing(FilterToolbar), - FilterNoResults: withMarkdownSpacing(FilterNoResults), - FilterPillGroup: withMarkdownSpacing(FilterPillGroup), - FilterSortDropdown: withMarkdownSpacing(FilterSortDropdown), - FilterSearch: withMarkdownSpacing(FilterSearch), - FilterResultCount: withMarkdownSpacing(FilterResultCount), - Grid: withMarkdownSpacing(Grid), - GridBase: withMarkdownSpacing(GridBase), - Hero, - HelpLinks: withMarkdownSpacing(HelpLinks), - Icon: withMarkdownSpacing(Icon, 'regular', true), - Impact: withMarkdownSpacing(Impact), - Impacts: withMarkdownSpacing(Impacts), - Label: withMarkdownSpacing(Label), - Link, - LinkBase: withMarkdownSpacing(LinkBase), - LinkButton: withMarkdownSpacing(LinkButton), - LinkText: withMarkdownSpacing(LinkText), - Links: withMarkdownSpacing(Links), - ListItem: withMarkdownSpacing(ListItem), - OrderedList: withMarkdownSpacing(OrderedList), - PageFilterView, - Tag: withMarkdownSpacing(Tag), - SecondaryNavbar: withMarkdownSpacing(SecondaryNavbar), - SectionHeading, - StickyHeader, - Story: withMarkdownSpacing(Story), - Tabs: withMarkdownSpacing(Tabs), - Tab, - TabsBase, - Tiles: withMarkdownSpacing(Tiles), - TileBase: withMarkdownSpacing(TileBase), - TileButton: withMarkdownSpacing(TileButton), - TileContent: withMarkdownSpacing(TileContent), - TileContentLabel: withMarkdownSpacing(TileContentLabel), - TileLink: withMarkdownSpacing(TileLink), - UnorderedList: withMarkdownSpacing(UnorderedList), - ViewStack: withMarkdownSpacing>(ViewStack), - VideoPlayer, - View, - Action1: withStyledTypography( - action({ - variant: 'action1', - context: 'markdown' - }) - ), - Action2: withStyledTypography( - action({ - variant: 'action2', - context: 'markdown' - }) - ), - Action3: withStyledTypography( - action({ - variant: 'action3', - context: 'markdown' - }) - ), - Action4: withStyledTypography( - action({ - variant: 'action4', - context: 'markdown' - }) - ), - Action5: withStyledTypography( - action({ - variant: 'action5', - context: 'markdown' - }) - ), - Action6: withStyledTypography( - action({ - variant: 'action6', - context: 'markdown' - }) - ), - Action7: withStyledTypography( - action({ - variant: 'action7', - context: 'markdown' - }) - ), - Action8: withStyledTypography( - action({ - variant: 'action8', - context: 'markdown' - }) - ), - Caption1: withStyledTypography( - caption({ - variant: 'caption1', - context: 'markdown' - }) - ), - Caption2: withStyledTypography( - caption({ - variant: 'caption2', - context: 'markdown' - }) - ), - Caption3: withStyledTypography( - caption({ - variant: 'caption3', - context: 'markdown' - }) - ), - Caption4: withStyledTypography( - caption({ - variant: 'caption4', - context: 'markdown' - }) - ), - Caption5: withStyledTypography( - caption({ - variant: 'caption5', - context: 'markdown' - }) - ), - Caption6: withStyledTypography( - caption({ - variant: 'caption6', - context: 'markdown' - }) - ), - Hr: markdownElements.hr, - H0: withStyledTypography( - heading({ - variant: 'heading0', - context: 'markdown' - }), - 'h1' - ), - H1: markdownElements.h1, - H2: markdownElements.h2, - H3: markdownElements.h3, - H4: markdownElements.h4, - H5: markdownElements.h5, - H6: markdownElements.h6, - P1: markdownElements.p, - P2: withStyledTypography( - paragraph({ - variant: 'paragraph2', - context: 'markdown' - }) - ), - P3: withStyledTypography( - paragraph({ - variant: 'paragraph3', - context: 'markdown' - }) - ), - P4: withStyledTypography( - paragraph({ - variant: 'paragraph4', - context: 'markdown' - }) - ), - P5: withStyledTypography( - paragraph({ - variant: 'paragraph5', - context: 'markdown' - }) - ), - P6: withStyledTypography( - paragraph({ - variant: 'paragraph6', - context: 'markdown' - }) - ), - Subtitle1: withStyledTypography( - subtitle({ - variant: 'subtitle1', - context: 'markdown' - }) - ), - Subtitle2: withStyledTypography( - subtitle({ - variant: 'subtitle2', - context: 'markdown' - }) - ), - Subtitle3: withStyledTypography( - subtitle({ - variant: 'subtitle3', - context: 'markdown' - }) - ), - Subtitle4: withStyledTypography( - subtitle({ - variant: 'subtitle4', - context: 'markdown' - }) - ), - Subtitle5: withStyledTypography( - subtitle({ - variant: 'subtitle5', - context: 'markdown' - }) - ), - Subtitle6: withStyledTypography( - subtitle({ - variant: 'subtitle6', - context: 'markdown' - }) - ), - Amount: withStyledTypography(amount({ context: 'markdown' })), - Eyebrow: withStyledTypography(eyebrow({ context: 'markdown' })), - Watermark: withStyledTypography(watermark({ context: 'markdown' })), - Emphasis: markdownElements.em, - Strong: markdownElements.strong, - ...markdownElements - }; -}; diff --git a/packages/components/src/Markdown/markdownElements.tsx b/packages/components/src/Markdown/markdownElements.tsx deleted file mode 100644 index fc79f39a..00000000 --- a/packages/components/src/Markdown/markdownElements.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { emphasis, link, paragraph } from '@jpmorganchase/mosaic-theme'; - -import { withAnchorHeading } from './AnchorHeading'; -import { BlockQuote } from './BlockQuote'; -import * as Heading from './Heading'; -import { ListItem, OrderedList, UnorderedList } from '../List'; -import { InlineCode } from './InlineCode'; -import { Link } from './Link'; -import { Pre } from './Pre'; -import { Table } from './Table'; -import { Tbody } from './Tbody'; -import { Thead } from './Thead'; -import { Th } from './Th'; -import { Td } from './Td'; -import { Tr } from './Tr'; -import { withStyledTypography } from '../Typography/withStyledTypography'; -import { withMarkdownSpacing } from './withMarkdownSpacing'; -import { ThematicBreak } from './ThematicBreak'; - -export const getMarkdownElements = () => ({ - a: withMarkdownSpacing(Link, link({ context: 'markdown', variant: 'document' })), - blockquote: withMarkdownSpacing(BlockQuote), - code: withMarkdownSpacing(InlineCode), - ol: withMarkdownSpacing(OrderedList), - ul: withMarkdownSpacing(UnorderedList), - li: withMarkdownSpacing(ListItem, 'none'), - hr: ThematicBreak, - h1: withAnchorHeading(Heading.H1), - h2: withAnchorHeading(Heading.H2), - h3: withAnchorHeading(Heading.H3), - h4: withAnchorHeading(Heading.H4), - h5: withAnchorHeading(Heading.H5), - h6: withAnchorHeading(Heading.H6), - p: withStyledTypography(paragraph({ variant: 'paragraph2', context: 'markdown' })), - pre: withMarkdownSpacing(Pre), - Pre: withMarkdownSpacing(Pre), - inlineCode: withMarkdownSpacing(InlineCode, 'none'), - table: withMarkdownSpacing(Table), - Table: withMarkdownSpacing(Table), - tbody: withMarkdownSpacing(Tbody, 'none'), - Tbody: withMarkdownSpacing(Tbody, 'none'), - thead: withMarkdownSpacing(Thead, 'none'), - Thead: withMarkdownSpacing(Thead, 'none'), - th: withMarkdownSpacing(Th, 'none'), - Th: withMarkdownSpacing(Th, 'none'), - td: withMarkdownSpacing(Td, 'none'), - Td: withMarkdownSpacing(Td, 'none'), - tr: withMarkdownSpacing(Tr, 'none'), - Tr: withMarkdownSpacing(Tr, 'none'), - em: withStyledTypography(emphasis({ variant: 'regular', context: 'markdown' }), 'span'), - strong: withStyledTypography(emphasis({ variant: 'strong', context: 'markdown' }), 'span') -}); diff --git a/packages/components/src/Markdown/withMarkdownSpacing/styles.css.ts b/packages/components/src/Markdown/withMarkdownSpacing/styles.css.ts deleted file mode 100644 index f2ce965b..00000000 --- a/packages/components/src/Markdown/withMarkdownSpacing/styles.css.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -export default { - none: responsiveSprinkles({ marginTop: ['none', 'none', 'none', 'none'] }), - regular: responsiveSprinkles({ marginTop: ['x6', 'x6', 'x6', 'x6'] }), - inline: responsiveSprinkles({ paddingLeft: ['x1', 'x1', 'x1', 'x1'] }) -}; diff --git a/packages/components/src/PageFilterView/index.tsx b/packages/components/src/PageFilterView/index.tsx index 7ecc0687..f416a160 100644 --- a/packages/components/src/PageFilterView/index.tsx +++ b/packages/components/src/PageFilterView/index.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { TileContentLabel } from '../TileContentLabel'; import { TileLink } from '../TileLink'; import type { GridItemSize } from '../Grid'; diff --git a/packages/components/src/ReactLive/index.tsx b/packages/components/src/ReactLive/index.tsx deleted file mode 100644 index ca23c36b..00000000 --- a/packages/components/src/ReactLive/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useState } from 'react'; -import classnames from 'clsx'; -import { Switch } from '@salt-ds/core'; - -import { ComponentExample } from '../ComponentExample'; -import { getMarkdownComponents } from '../Markdown'; -import { IsomorphicSuspense } from '../IsomorphicSuspense'; -import styles from './styles.css'; - -type ReactLiveProps = { - /** Contents */ - children: string; - /** className determines the type of language flagged in the MD codeblock */ - className: string; - /** Scope (including components) for live editor */ - scope?: Record; -}; - -const LazyPreviewComponent = React.lazy(() => - import('react-live').then(reactLive => ({ - default: ({ className, codeString, scope }) => ( - - ) - })) -); - -function PreviewComponent({ - codeString, - className, - scope = getMarkdownComponents(), - LiveProvider, - LiveEditor, - LiveError, - LivePreview: ReactLivePreview -}) { - const [hidden, setHidden] = useState(true); - - return ( - - `${code.replace(/import(?:["'\s]*([\w*{}\n, ]+)from\s*)["'\s]*([@\w/_-]+)["'\s]*;?/gm, '')}` - } - > -
- - - -
-
- setHidden(!hidden)} /> -
-
- - {hidden ? null : } -
-
- ); -} - -export const ReactLive: React.FC = ({ children: codeString, className, scope }) => ( - - - -); diff --git a/packages/components/src/ReactLive/styles.css.ts b/packages/components/src/ReactLive/styles.css.ts deleted file mode 100644 index f18b2781..00000000 --- a/packages/components/src/ReactLive/styles.css.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { style } from '@vanilla-extract/css'; -import { responsiveSprinkles, vars } from '@jpmorganchase/mosaic-theme'; - -const root = style({}); - -export default { - root, - liveError: style([ - { - backgroundColor: 'red', - color: 'white' - }, - responsiveSprinkles({ - marginBottom: ['none', 'none', 'none', 'none'], - padding: ['x4', 'x4', 'x4', 'x4'] - }) - ]), - liveEditor: style([{ backgroundColor: 'black', color: 'white', overflow: 'scroll' }]), - showLiveCodeContainer: style({ - position: 'relative' - }), - showLiveCode: style({ - right: vars.space.horizontal.x4, - bottom: '0px', - position: 'absolute', - lineHeight: 'initial' - }) -}; diff --git a/packages/components/src/SecondaryNavbar/index.tsx b/packages/components/src/SecondaryNavbar/index.tsx index 356f7840..f2c8e136 100644 --- a/packages/components/src/SecondaryNavbar/index.tsx +++ b/packages/components/src/SecondaryNavbar/index.tsx @@ -3,7 +3,7 @@ import classnames from 'clsx'; import { findLastIndex } from 'lodash-es'; import { config } from '@jpmorganchase/mosaic-theme'; -import { TabsBase, TabsMenu, TabMenuItemType, TabsLinkItem } from '../TabsBase'; +import { TabsBase, TabsMenu, TabsLinkItem } from '../TabsBase'; import { canUseDOM } from '../canUseDOM'; import { StickyHeader } from '../StickyHeader'; import styles from './styles.css'; @@ -22,7 +22,7 @@ export interface SecondaryNavbarProps { const getSelectedTabIndex = (items: TabsMenu, itemPath: string): number => findLastIndex(items, (item): boolean => { - if (item.type === TabMenuItemType.MENU) { + if (item.type === "menu") { return !!item.links.find(link => itemPath.startsWith(link.link)); } return itemPath.startsWith((item as TabsLinkItem).link); diff --git a/packages/components/src/Story/index.tsx b/packages/components/src/Story/index.tsx index 62f25b77..c581ef75 100644 --- a/packages/components/src/Story/index.tsx +++ b/packages/components/src/Story/index.tsx @@ -1,8 +1,8 @@ import React from 'react'; import classnames from 'clsx'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; import { LinkButton } from '../LinkButton'; -import { useImageComponent } from '../ImageProvider'; import styles from './styles.css'; export interface StoryProps { diff --git a/packages/components/src/Tabs/index.tsx b/packages/components/src/Tabs/index.tsx index 3e1df1d4..d23f06d6 100644 --- a/packages/components/src/Tabs/index.tsx +++ b/packages/components/src/Tabs/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import classnames from 'clsx'; -import { TabsBase, TabsButtonItem, TabMenuItemType } from '../TabsBase'; +import { TabsBase, TabsButtonItem } from '../TabsBase'; import { ViewStack } from '../ViewStack'; import type { ViewProps } from '../ViewStack/View'; import styles from './styles.css'; @@ -36,7 +36,7 @@ export const Tabs: React.FC = ({ className, children }) => { const tabButtonItem: ExtendedTabsButtonItem = { title: tabElement.props.id || `Tab ${childIndex}`, defaultView: Object.prototype.hasOwnProperty.call(child.props, 'defaultView'), - type: TabMenuItemType.BUTTON, + type: 'button', onSelect: (_event, sourceItem) => setCurrentViewId(sourceItem) }; return tabButtonItem; diff --git a/packages/components/src/TabsBase/TabsBase.tsx b/packages/components/src/TabsBase/TabsBase.tsx index bed2448b..ee09ed93 100644 --- a/packages/components/src/TabsBase/TabsBase.tsx +++ b/packages/components/src/TabsBase/TabsBase.tsx @@ -6,11 +6,8 @@ import { TabsLink, TabsLinkItem } from './TabsLink'; import { TabsMenuButton, TabsMenuButtonItem } from './TabsMenuButton'; import styles from './styles.css'; -export enum TabMenuItemType { - MENU = 'menu', - LINK = 'link', - BUTTON = 'button' -} +export type TabMenuItemType = 'menu' | 'link' | 'button'; + export interface TabsBaseProps { /** Additional class name for root class override */ className?: string; @@ -24,10 +21,10 @@ export type TabsMenu = (TabsLinkItem | TabsButtonItem | TabsMenuButtonItem)[]; function TabsItem({ children, item }) { const { type } = item; - if (type === TabMenuItemType.MENU) { + if (type === 'menu') { return {children}; } - if (type === TabMenuItemType.BUTTON) { + if (type === 'button') { return {children}; } return {children}; diff --git a/packages/components/src/TabsBase/TabsButton.tsx b/packages/components/src/TabsBase/TabsButton.tsx index b8408a0f..f09bb145 100644 --- a/packages/components/src/TabsBase/TabsButton.tsx +++ b/packages/components/src/TabsBase/TabsButton.tsx @@ -1,6 +1,5 @@ import React, { FC } from 'react'; -import { TabMenuItemType } from './index'; import styles from './styles.css'; export interface TabsButtonItem { @@ -13,7 +12,7 @@ export interface TabsButtonItem { /** Title of Tab */ title: string; /** Type of Tab */ - type: TabMenuItemType.BUTTON; + type: 'button'; } interface TabButtonProps { diff --git a/packages/components/src/TabsBase/TabsLink.tsx b/packages/components/src/TabsBase/TabsLink.tsx index 098467b2..f52ea92b 100644 --- a/packages/components/src/TabsBase/TabsLink.tsx +++ b/packages/components/src/TabsBase/TabsLink.tsx @@ -1,7 +1,6 @@ import React, { FC } from 'react'; import { Link } from '../Link'; -import { TabMenuItemType } from './index'; import styles from './styles.css'; export interface TabsLinkItem { @@ -14,7 +13,7 @@ export interface TabsLinkItem { /** Title of Tab */ title?: string; /** Type of Tab */ - type: TabMenuItemType.LINK; + type: 'link'; } export interface TabsLinkProps { diff --git a/packages/components/src/TabsBase/TabsMenuButton.tsx b/packages/components/src/TabsBase/TabsMenuButton.tsx index 81630996..1efe8d3a 100644 --- a/packages/components/src/TabsBase/TabsMenuButton.tsx +++ b/packages/components/src/TabsBase/TabsMenuButton.tsx @@ -4,7 +4,6 @@ import classnames from 'clsx'; import styles from './tabsMenuButton.css'; import type { TabsLinkItem } from './TabsLink'; -import type { TabMenuItemType } from './index'; import { Icon } from '../Icon'; export interface TabsMenuButtonItem { @@ -15,11 +14,11 @@ export interface TabsMenuButtonItem { /** Collection of link options */ links: TabsLinkItem[]; /** Callback when Tab is selected */ - onSelect: (event: MouseEvent | KeyboardEvent, sourceItem: TabsLinkItem) => void; + onSelect?: (event: MouseEvent | KeyboardEvent, sourceItem: TabsLinkItem) => void; /** Title of Tab */ title: string; /** Type of Tab */ - type: TabMenuItemType.MENU; + type: "menu"; } export interface TabsMenuButtonProps { @@ -39,7 +38,7 @@ export const TabsMenuButton: FC = ({ children, className, i {item.links.map(link => ( - item.onSelect(event, link)}> + item.onSelect?.(event, link)}> {link.title || link.label} ))} diff --git a/packages/components/src/ThemeProvider.tsx b/packages/components/src/ThemeProvider.tsx deleted file mode 100644 index de4ab20b..00000000 --- a/packages/components/src/ThemeProvider.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useColorMode } from '@jpmorganchase/mosaic-store'; -import { ssrClassName } from '@jpmorganchase/mosaic-theme'; -import { SaltProvider, UNSTABLE_SaltProviderNext } from '@salt-ds/core'; -import React, { type ReactNode, useEffect, useState } from 'react'; - -import classnames from 'clsx'; - -const useHasHydrated = () => { - const [hasHydrated, setHasHydrated] = useState(false); - - useEffect(() => { - setHasHydrated(true); - }, []); - - return hasHydrated; -}; - -interface ThemeProviderProps { - /** Applies to `SaltProvider` `theme` prop */ - themeClassName?: string; - className?: string; - children?: ReactNode; - /** Enables Salt theme next */ - themeNext?: boolean; -} - -export function ThemeProvider({ - themeClassName, - className, - themeNext, - children -}: ThemeProviderProps) { - const hasHydrated = useHasHydrated(); - const colorMode = useColorMode(); - - const ssrClassname = hasHydrated ? undefined : ssrClassName; - - const ChosenSaltProvider = themeNext ? UNSTABLE_SaltProviderNext : SaltProvider; - - return ( - -
- {children} -
-
- - ); -} diff --git a/packages/components/src/TileContent/index.tsx b/packages/components/src/TileContent/index.tsx index f9dc10c4..97ffc82d 100644 --- a/packages/components/src/TileContent/index.tsx +++ b/packages/components/src/TileContent/index.tsx @@ -1,5 +1,6 @@ import React, { FC, forwardRef, ReactNode, Ref } from 'react'; import classnames from 'clsx'; +import { useImageComponent } from '@jpmorganchase/mosaic-store'; import { useTileState } from '../TileBase'; import styles, { @@ -11,7 +12,6 @@ import styles, { titleRecipe } from './styles.css'; import { Size } from '../common/types'; -import { useImageComponent } from '../ImageProvider'; export type TileContentClassesType = { action?: string; diff --git a/packages/components/src/Tiles.tsx b/packages/components/src/Tiles.tsx index 539800db..a8b31c20 100644 --- a/packages/components/src/Tiles.tsx +++ b/packages/components/src/Tiles.tsx @@ -1,4 +1,4 @@ -import React, { FC, forwardRef, ReactElement, Ref } from 'react'; +import { FC, forwardRef, ReactElement, Ref } from 'react'; import { TileBaseProps } from './TileBase'; import { Grid, GridProps } from './Grid'; diff --git a/packages/components/src/Typography/index.tsx b/packages/components/src/Typography/index.tsx index 99cdf295..87850597 100644 --- a/packages/components/src/Typography/index.tsx +++ b/packages/components/src/Typography/index.tsx @@ -11,6 +11,7 @@ import { } from '@jpmorganchase/mosaic-theme'; import { withStyledTypography } from './withStyledTypography'; +export { withStyledTypography } from './withStyledTypography'; export const Action1 = withStyledTypography(action({ variant: 'action1' })); export const Action2 = withStyledTypography(action({ variant: 'action2' })); diff --git a/packages/components/src/__tests__/ReactLive.test.tsx b/packages/components/src/__tests__/ReactLive.test.tsx deleted file mode 100644 index 5242be62..00000000 --- a/packages/components/src/__tests__/ReactLive.test.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import React from 'react'; -import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import { ReactLive } from '../ReactLive'; - -describe('GIVEN a ReactLive view', () => - it('THEN it should render code in a live view', async () => { - // arrange - const { container } = render({'

Hello World

'}
); - - // assert - await waitFor(() => { - expect(screen.getByText('Show Live Code')).toBeInTheDocument(); - expect(screen.getByText('Hello World')).toBeInTheDocument(); - }); - // act - const showLiveCode = screen.getByText('Show Live Code'); - fireEvent.click(showLiveCode); - // assert - expect(container.querySelector('pre')).toHaveAttribute('class', 'prism-code language-tsx'); - expect(container.querySelector('pre')).toHaveAttribute('spellcheck', 'false'); - })); diff --git a/packages/components/src/index.tsx b/packages/components/src/index.tsx index 1e3bcb74..38604bd4 100644 --- a/packages/components/src/index.tsx +++ b/packages/components/src/index.tsx @@ -1,3 +1,4 @@ +'use client'; export * from './Accordion'; export * from './AudioPlayer'; export * from './Button'; @@ -12,27 +13,22 @@ export * from './Feature'; export * from './Features'; export * from './FilterToolbar'; export * from './FilterView'; -export * from './FormattedContent'; export * from './Grid'; export * from './GridBase'; export * from './HelpLinks'; export * from './Hero'; export * from './Icon'; -export * from './IsomorphicSuspense'; -export * from './ImageProvider'; export * from './Impact'; export * from './Impacts'; +export * from './IsomorphicSuspense'; export * from './Label'; export * from './Link'; export * from './LinkBase'; export * from './LinkButton'; -export * from './LinkProvider'; export * from './Links'; export * from './LinkText'; export * from './List'; -export * from './Markdown'; export * from './PageFilterView'; -export * from './ReactLive'; export * from './SecondaryNavbar'; export * from './SectionHeading'; export * from './StickyHeader'; @@ -40,7 +36,6 @@ export * from './Story'; export * from './Tabs'; export * from './TabsBase'; export * from './Tag'; -export * from './ThemeProvider'; export * from './TileBase'; export * from './TileButton'; export * from './TileContent'; diff --git a/packages/components/src/styles.ts b/packages/components/src/styles.ts index 4dadcd97..3932333d 100644 --- a/packages/components/src/styles.ts +++ b/packages/components/src/styles.ts @@ -25,11 +25,6 @@ import './Impact/styles.css'; import './Link/styles.css'; import './LinkText/styles.css'; import './Links/styles.css'; -import './Markdown/AnchorHeading/index.css'; -import './Markdown/BlockQuote/index.css'; -import './Markdown/Pre/index.css'; -import './Markdown/withMarkdownSpacing/styles.css'; -import './ReactLive/styles.css'; import './SecondaryNavbar/styles.css'; import './SectionHeading/styles.css'; import './StickyHeader/styles.css'; diff --git a/packages/content-editor-plugin/package.json b/packages/content-editor-plugin/package.json index a0fed841..4a791e72 100644 --- a/packages/content-editor-plugin/package.json +++ b/packages/content-editor-plugin/package.json @@ -35,7 +35,8 @@ "dev": "node ../../scripts/bundle.mjs watch" }, "devDependencies": { - "typescript": "^4.8.3" + "msw": "^0.49.1", + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", @@ -54,18 +55,19 @@ "@lexical/selection": "^0.17.1", "@lexical/utils": "^0.17.1", "@lexical/markdown": "^0.17.1", - "@vanilla-extract/css": "^1.6.0", + "@vanilla-extract/css": "^1.14.0", + "client-only": "^0.0.1", "clsx": "^2.0.0", "gray-matter": "^4.0.3", "lexical": "^0.17.1", "react-split": "^2.0.14", - "lodash-es": "^4.17.21", "md5": "*", + "use-debounce" : "^10.0.0", "yup": "^0.32.9", - "zustand": "^4.1.1" + "zustand": "^4.4.7" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/content-editor-plugin/src/LazyEditor.tsx b/packages/content-editor-plugin/src/LazyEditor.tsx new file mode 100644 index 00000000..545b2270 --- /dev/null +++ b/packages/content-editor-plugin/src/LazyEditor.tsx @@ -0,0 +1,11 @@ +import { Suspense, lazy } from 'react'; + +import type { EditorProps } from './components/Editor'; + +const LazyEditor = lazy(() => import('./components/Editor')); + +export const Editor = (props: EditorProps) => ( + Loading Editor...
}> + + +); diff --git a/packages/content-editor-plugin/src/components/ActionMenu/ActionMenu.tsx b/packages/content-editor-plugin/src/components/ActionMenu/ActionMenu.tsx index 60a13b03..d11828de 100644 --- a/packages/content-editor-plugin/src/components/ActionMenu/ActionMenu.tsx +++ b/packages/content-editor-plugin/src/components/ActionMenu/ActionMenu.tsx @@ -1,7 +1,6 @@ -import React from 'react'; import { Menu, MenuTrigger, MenuPanel, MenuItem } from '@salt-ds/core'; import { Icon, Button } from '@jpmorganchase/mosaic-components'; -import { IconNames } from '@jpmorganchase/mosaic-theme'; +import { IconNames } from '@jpmorganchase/mosaic-icons'; export type ActionMenuItem = { title: string; diff --git a/packages/content-editor-plugin/src/components/BaseToolbar/BaseToolbar.tsx b/packages/content-editor-plugin/src/components/BaseToolbar/BaseToolbar.tsx index 99a3c80f..9af92f9b 100644 --- a/packages/content-editor-plugin/src/components/BaseToolbar/BaseToolbar.tsx +++ b/packages/content-editor-plugin/src/components/BaseToolbar/BaseToolbar.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode } from 'react'; +import { type ReactNode } from 'react'; import classnames from 'clsx'; import styles from './BaseToolbar.css'; diff --git a/packages/content-editor-plugin/src/components/BaseTooltray/BaseTooltray.tsx b/packages/content-editor-plugin/src/components/BaseTooltray/BaseTooltray.tsx index 45d0c1f4..c06934e2 100644 --- a/packages/content-editor-plugin/src/components/BaseTooltray/BaseTooltray.tsx +++ b/packages/content-editor-plugin/src/components/BaseTooltray/BaseTooltray.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode } from 'react'; +import { type ReactNode } from 'react'; import classnames from 'clsx'; import styles from './BaseTooltray.css'; diff --git a/packages/content-editor-plugin/src/components/ContentEditor.tsx b/packages/content-editor-plugin/src/components/ContentEditor.tsx index 46451aa1..73002c39 100644 --- a/packages/content-editor-plugin/src/components/ContentEditor.tsx +++ b/packages/content-editor-plugin/src/components/ContentEditor.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'; import { ContentEditable } from '@lexical/react/LexicalContentEditable'; import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary'; diff --git a/packages/content-editor-plugin/src/components/ContentPreview.tsx b/packages/content-editor-plugin/src/components/ContentPreview.tsx new file mode 100644 index 00000000..b765c4a2 --- /dev/null +++ b/packages/content-editor-plugin/src/components/ContentPreview.tsx @@ -0,0 +1,7 @@ +import useContentEditor from '../store/index'; + +export const ContentPreview = ({ children }) => { + const { previewContent } = useContentEditor(); + + return previewContent || children; +}; diff --git a/packages/content-editor-plugin/src/components/Dialog.tsx b/packages/content-editor-plugin/src/components/Dialog.tsx index b3d5d6d3..78e042c2 100644 --- a/packages/content-editor-plugin/src/components/Dialog.tsx +++ b/packages/content-editor-plugin/src/components/Dialog.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Dialog as SaltDialog, type DialogProps as SaltDialogProps } from '@salt-ds/core'; import { themeClassName } from '@jpmorganchase/mosaic-theme'; import classnames from 'clsx'; diff --git a/packages/content-editor-plugin/src/components/Editor.tsx b/packages/content-editor-plugin/src/components/Editor.tsx index e91eaf16..4a4d2c7d 100644 --- a/packages/content-editor-plugin/src/components/Editor.tsx +++ b/packages/content-editor-plugin/src/components/Editor.tsx @@ -1,6 +1,5 @@ -import React, { ComponentType, FC, useRef, useState } from 'react'; +import React, { FC, useRef, useState } from 'react'; import classnames from 'clsx'; -import matter from 'gray-matter'; import { LexicalComposer } from '@lexical/react/LexicalComposer'; import { ListPlugin } from '@lexical/react/LexicalListPlugin'; import { TablePlugin } from '@lexical/react/LexicalTablePlugin'; @@ -13,8 +12,8 @@ import { $convertFromMarkdownString } from '@lexical/markdown'; import transformers from '../transformers'; import ContentEditor from './ContentEditor'; import { nodes } from '../nodes'; -import { useEditorUser, usePreviewContent } from '../store'; -import { PreviewPlugin } from '../plugins/PreviewPlugin'; +import { useEditorUser } from '../store'; +import { PreviewPlugin, type PreviewPluginProps } from '../plugins/PreviewPlugin'; import styles from './Editor.css'; import Toolbar from './Toolbar/Toolbar'; import theme from '../theme'; @@ -27,6 +26,7 @@ import { ScrollableSection } from './ScrollableSection/ScrollableSection'; import HorizontalRulePlugin from '../plugins/HorizontalRulePlugin'; import { FloatingToolbarPlugin } from '../plugins/FloatingToolbarPlugin'; import { TableActionMenuPlugin } from '../plugins/TableActionMenuPlugin'; +import { ContentPreview } from './ContentPreview'; function onError(error: Error) { console.error(error); @@ -39,40 +39,23 @@ const initialConfig = { theme }; -interface PreviewComponentProps { - source: any; - meta?: any; - components: any; -} - -interface EditorProps extends PreviewComponentProps { +export interface EditorProps extends PreviewPluginProps { content: string; - PreviewComponent?: ComponentType; - previewUrl?: string; persistUrl?: string; user?: any; + children: React.ReactNode; } const gutter = () => { - const gutter = document.createElement('div'); - gutter.className = styles.gutter; - return gutter; + const gutterDiv = document.createElement('div'); + gutterDiv.className = styles.gutter; + return gutterDiv; }; -const Editor: FC = ({ - components, - content, - persistUrl, - PreviewComponent, - previewUrl, - source, - user -}) => { - const previewContent = usePreviewContent() || source; +const Editor: FC = ({ content, persistUrl, user, meta, children, onChange }) => { const { setUser } = useEditorUser(); const [focused, setFocused] = useState(false); const containerRef = useRef(null); - const { data: meta, content: markdown } = matter(content); const handleEditorFocus = () => { setFocused(true); @@ -87,7 +70,7 @@ const Editor: FC = ({ $convertFromMarkdownString(markdown, transformers) + editorState: () => $convertFromMarkdownString(content, transformers) }} >
@@ -119,9 +102,7 @@ const Editor: FC = ({ - {PreviewComponent && ( - - )} + {children} @@ -129,7 +110,7 @@ const Editor: FC = ({ - {previewUrl ? : null} + {onChange ? : null} diff --git a/packages/content-editor-plugin/src/components/EditorControls.tsx b/packages/content-editor-plugin/src/components/EditorControls.tsx index 1cc415ed..201cb2b0 100644 --- a/packages/content-editor-plugin/src/components/EditorControls.tsx +++ b/packages/content-editor-plugin/src/components/EditorControls.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import { BaseToolbar as Toolbar } from './BaseToolbar/BaseToolbar'; import { BaseTooltray as Tooltray } from './BaseTooltray/BaseTooltray'; diff --git a/packages/content-editor-plugin/src/components/LinkEditor/EditLinkButton.tsx b/packages/content-editor-plugin/src/components/LinkEditor/EditLinkButton.tsx index d9521280..2cfbf6ab 100644 --- a/packages/content-editor-plugin/src/components/LinkEditor/EditLinkButton.tsx +++ b/packages/content-editor-plugin/src/components/LinkEditor/EditLinkButton.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import { ToolbarButton, type ToolbarButtonProps } from '../Toolbar/ToolbarButton'; diff --git a/packages/content-editor-plugin/src/components/LinkEditor/LinkEditor.tsx b/packages/content-editor-plugin/src/components/LinkEditor/LinkEditor.tsx index 26e6e5f8..79d0cc1e 100644 --- a/packages/content-editor-plugin/src/components/LinkEditor/LinkEditor.tsx +++ b/packages/content-editor-plugin/src/components/LinkEditor/LinkEditor.tsx @@ -6,7 +6,7 @@ import { RangeSelection, SELECTION_CHANGE_COMMAND } from 'lexical'; -import React, { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react'; +import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react'; import { $isLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { useFloatingUI, Input } from '@salt-ds/core'; diff --git a/packages/content-editor-plugin/src/components/LinkEditor/SaveAdornment.tsx b/packages/content-editor-plugin/src/components/LinkEditor/SaveAdornment.tsx index 66c65880..6d05fc69 100644 --- a/packages/content-editor-plugin/src/components/LinkEditor/SaveAdornment.tsx +++ b/packages/content-editor-plugin/src/components/LinkEditor/SaveAdornment.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import type { ButtonProps } from '@jpmorganchase/mosaic-components'; import { ToolbarButton } from '../Toolbar/ToolbarButton'; diff --git a/packages/content-editor-plugin/src/components/PersistEditDialog/PersistStatus.tsx b/packages/content-editor-plugin/src/components/PersistEditDialog/PersistStatus.tsx index bce0f5b5..e5ca6d10 100644 --- a/packages/content-editor-plugin/src/components/PersistEditDialog/PersistStatus.tsx +++ b/packages/content-editor-plugin/src/components/PersistEditDialog/PersistStatus.tsx @@ -1,9 +1,9 @@ -import React, { FC, ReactNode } from 'react'; +import { FC, ReactNode } from 'react'; import classnames from 'clsx'; import { P2, P6 } from '@jpmorganchase/mosaic-components'; +import { SourceWorkflowMessageEvent } from '@jpmorganchase/mosaic-types'; import styles from './PersistStatus.css'; -import { SourceWorkflowMessageEvent } from '@jpmorganchase/mosaic-types'; interface StepProps { children?: ReactNode; diff --git a/packages/content-editor-plugin/src/components/PersistEditDialog/index.tsx b/packages/content-editor-plugin/src/components/PersistEditDialog/index.tsx index a50fbe50..4fe7abb2 100644 --- a/packages/content-editor-plugin/src/components/PersistEditDialog/index.tsx +++ b/packages/content-editor-plugin/src/components/PersistEditDialog/index.tsx @@ -1,4 +1,4 @@ -import React, { FC, useState } from 'react'; +import { FC, useState } from 'react'; import md5 from 'md5'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { $convertToMarkdownString } from '@lexical/markdown'; @@ -65,7 +65,7 @@ export const PersistDialog = ({ meta, persistUrl }: PersistDialogProps) => { }; const handleErrorMessage = (errorMessage: string) => { - setError(errorMessage ? errorMessage : 'Sorry - an unexpected error has occurred'); + setError(errorMessage || 'Sorry - an unexpected error has occurred'); setPrHref(null); setProgress([]); setIsRaising(false); diff --git a/packages/content-editor-plugin/src/components/Popper/Popper.tsx b/packages/content-editor-plugin/src/components/Popper/Popper.tsx index 55611685..51064c6c 100644 --- a/packages/content-editor-plugin/src/components/Popper/Popper.tsx +++ b/packages/content-editor-plugin/src/components/Popper/Popper.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'; +import { forwardRef, HTMLAttributes, ReactNode } from 'react'; import { Portal, useWindow } from '@salt-ds/lab'; import { themeClassName } from '@jpmorganchase/mosaic-theme'; import classnames from 'clsx'; diff --git a/packages/content-editor-plugin/src/components/SaveButton.tsx b/packages/content-editor-plugin/src/components/SaveButton.tsx index f418e26c..969f7b6f 100644 --- a/packages/content-editor-plugin/src/components/SaveButton.tsx +++ b/packages/content-editor-plugin/src/components/SaveButton.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { Button, Icon } from '@jpmorganchase/mosaic-components'; import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'; diff --git a/packages/content-editor-plugin/src/components/StatusBanner.tsx b/packages/content-editor-plugin/src/components/StatusBanner.tsx index 92517cb2..71e6462c 100644 --- a/packages/content-editor-plugin/src/components/StatusBanner.tsx +++ b/packages/content-editor-plugin/src/components/StatusBanner.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Banner, BannerContent } from '@salt-ds/core'; import { usePageState } from '../store'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/InsertBlockDropdown.tsx b/packages/content-editor-plugin/src/components/Toolbar/InsertBlockDropdown.tsx index b5db4f9b..de3115f3 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/InsertBlockDropdown.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/InsertBlockDropdown.tsx @@ -1,4 +1,4 @@ -import React, { SyntheticEvent } from 'react'; +import { SyntheticEvent } from 'react'; import { Dropdown, Option } from '@salt-ds/core'; import { $createCodeNode } from '@lexical/code'; import { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND } from '@lexical/list'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/InsertHorizontalRule.tsx b/packages/content-editor-plugin/src/components/Toolbar/InsertHorizontalRule.tsx index 52787037..e87643bb 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/InsertHorizontalRule.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/InsertHorizontalRule.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { INSERT_HORIZONTAL_RULE_COMMAND } from '@lexical/react/LexicalHorizontalRuleNode'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/InsertImage.tsx b/packages/content-editor-plugin/src/components/Toolbar/InsertImage.tsx index 742e168a..5825c35d 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/InsertImage.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/InsertImage.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { Button, Icon } from '@jpmorganchase/mosaic-components'; import { string, object } from 'yup'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/InsertLink.tsx b/packages/content-editor-plugin/src/components/Toolbar/InsertLink.tsx index 4680f084..268aa9d5 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/InsertLink.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/InsertLink.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { Button, Icon } from '@jpmorganchase/mosaic-components'; import { string, object } from 'yup'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/InsertTable.tsx b/packages/content-editor-plugin/src/components/Toolbar/InsertTable.tsx index 5541ff54..86244cf6 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/InsertTable.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/InsertTable.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement, FC, ReactNode, MouseEventHandler, useRef, useState } from 'react'; +import { ReactElement, FC, ReactNode, MouseEventHandler, useRef, useState } from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { INSERT_TABLE_COMMAND } from '@lexical/table'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/TextFormatTooltray.tsx b/packages/content-editor-plugin/src/components/Toolbar/TextFormatTooltray.tsx index 2d4135ca..7375ab42 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/TextFormatTooltray.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/TextFormatTooltray.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import classnames from 'clsx'; import { FORMAT_TEXT_COMMAND, diff --git a/packages/content-editor-plugin/src/components/Toolbar/Toolbar.tsx b/packages/content-editor-plugin/src/components/Toolbar/Toolbar.tsx index fbfe9e41..c5f6545b 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/Toolbar.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/Toolbar.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Icon } from '@jpmorganchase/mosaic-components'; import { useEditHistory } from '../../hooks/useEditHistory'; import { usePageState } from '../../store'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/ToolbarButton.tsx b/packages/content-editor-plugin/src/components/Toolbar/ToolbarButton.tsx index 960ed394..efb5db1f 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/ToolbarButton.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/ToolbarButton.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, Ref } from 'react'; +import { forwardRef, Ref } from 'react'; import classnames from 'clsx'; import { Button, type ButtonProps, Label } from '@jpmorganchase/mosaic-components'; diff --git a/packages/content-editor-plugin/src/components/Toolbar/ToolbarSepartor.tsx b/packages/content-editor-plugin/src/components/Toolbar/ToolbarSepartor.tsx index ccacf3d3..2aebed6a 100644 --- a/packages/content-editor-plugin/src/components/Toolbar/ToolbarSepartor.tsx +++ b/packages/content-editor-plugin/src/components/Toolbar/ToolbarSepartor.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode } from 'react'; +import { type ReactNode } from 'react'; import classnames from 'clsx'; import styles from './ToolbarSeparator.css'; diff --git a/packages/content-editor-plugin/src/hooks/useWorkflowFeed.ts b/packages/content-editor-plugin/src/hooks/useWorkflowFeed.ts index 1765dee2..0ec32d34 100644 --- a/packages/content-editor-plugin/src/hooks/useWorkflowFeed.ts +++ b/packages/content-editor-plugin/src/hooks/useWorkflowFeed.ts @@ -13,41 +13,49 @@ export default function useDataFeed( onComplete: SourceWorkflowMessageEventHandler ) { const webSocketRef = useRef(); + const socketOpenRef = useRef(false); const channelRef = useRef(); - useEffect( - function subscribe() { - try { - if (connect) { - webSocketRef.current = new WebSocket(ENDPOINT); - webSocketRef.current.onopen = () => console.log(`Workflows websocket open: ${ENDPOINT}`); - webSocketRef.current.onclose = () => console.log('Workflows websocket closed'); + useEffect(() => { + try { + if (connect && !socketOpenRef.current && !webSocketRef.current) { + webSocketRef.current = new WebSocket(ENDPOINT); - webSocketRef.current.onmessage = (msg: MessageEvent) => { - const message: SourceWorkflowMessageEvent = JSON.parse(msg.data); + webSocketRef.current.onopen = () => { + socketOpenRef.current = true; + console.log(`Workflows websocket open: ${ENDPOINT}`); + }; - if (message.channel !== channelRef.current) { - // message is not for us; - return; - } + webSocketRef.current.onclose = () => { + socketOpenRef.current = false; + console.log('Workflows websocket closed'); + }; - if (message.status === 'ERROR') { - onError(message); - } - if (message.status === 'COMPLETE') { - onComplete(message); - } - if (message.status === 'IN_PROGRESS' || message.status === 'SUCCESS') { - onSuccess(message); - } - }; - } - } catch (ex) { + webSocketRef.current.onmessage = (msg: MessageEvent) => { + const message: SourceWorkflowMessageEvent = JSON.parse(msg.data); + + if (message.channel !== channelRef.current) { + // message is not for us; + return; + } + + if (message.status === 'ERROR') { + onError(message); + } + if (message.status === 'COMPLETE') { + onComplete(message); + } + if (message.status === 'IN_PROGRESS' || message.status === 'SUCCESS') { + onSuccess(message); + } + }; + } + } catch (ex) { onError(ex); } return () => { - if (webSocketRef.current && webSocketRef.current?.OPEN) { + if (webSocketRef.current && socketOpenRef.current) { channelRef.current = null; webSocketRef.current.close(); } diff --git a/packages/content-editor-plugin/src/index.ts b/packages/content-editor-plugin/src/index.ts index 566ff0ce..f56bbbaf 100644 --- a/packages/content-editor-plugin/src/index.ts +++ b/packages/content-editor-plugin/src/index.ts @@ -1,5 +1,7 @@ -import Editor from './components/Editor'; +import 'client-only'; + +import { Editor } from './LazyEditor'; import { EditorControls } from './components/EditorControls'; -import { default as useContentEditor, usePageState } from './store'; +import useContentEditor, { usePageState } from './store'; export { Editor, EditorControls, usePageState, useContentEditor }; diff --git a/packages/content-editor-plugin/src/plugins/FloatingToolbarPlugin.tsx b/packages/content-editor-plugin/src/plugins/FloatingToolbarPlugin.tsx index 512f3f82..009654c8 100644 --- a/packages/content-editor-plugin/src/plugins/FloatingToolbarPlugin.tsx +++ b/packages/content-editor-plugin/src/plugins/FloatingToolbarPlugin.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { mergeRegister } from '@lexical/utils'; import { diff --git a/packages/content-editor-plugin/src/plugins/MarkdownLinkPlugin.tsx b/packages/content-editor-plugin/src/plugins/MarkdownLinkPlugin.tsx index 4a94715c..7e0a31e8 100644 --- a/packages/content-editor-plugin/src/plugins/MarkdownLinkPlugin.tsx +++ b/packages/content-editor-plugin/src/plugins/MarkdownLinkPlugin.tsx @@ -10,7 +10,7 @@ import { createCommand, LexicalCommand } from 'lexical'; -import React, { useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { InsertLinkDialog } from '../components/Toolbar/InsertLink'; diff --git a/packages/content-editor-plugin/src/plugins/PreviewPlugin.tsx b/packages/content-editor-plugin/src/plugins/PreviewPlugin.tsx index 13a84abc..67aa80ba 100644 --- a/packages/content-editor-plugin/src/plugins/PreviewPlugin.tsx +++ b/packages/content-editor-plugin/src/plugins/PreviewPlugin.tsx @@ -2,70 +2,54 @@ import React from 'react'; import { $convertToMarkdownString } from '@lexical/markdown'; import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'; import type { EditorState } from 'lexical'; -import { debounce } from 'lodash-es'; +import { useDebouncedCallback } from 'use-debounce'; import transformers from '../transformers'; -import { useContentEditor } from '../index'; +import useContentEditor from '../store/index'; -interface SourceResponse { - source: { compiledSource: string; frontmatter: any; scope: any }; +export interface SourceResponse { + result?: React.ReactNode; error?: string; - exception?: string; } -async function fetchSource(previewUrl: string, markdown: string) { - const response = await fetch(previewUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ mode: 'markdown', text: markdown }) - }); - - const data = (await response.json()) as SourceResponse; - return data; +export interface PreviewPluginProps { + onChange: ({ + source, + data + }: { + source: string; + data: Record; + }) => Promise; + meta: Record; } function usePreview(onContentChange: (markdown: string) => void) { - const handleContentChange = debounce(onContentChange, 250, { maxWait: 500 }); - - const onChange = (editorState: EditorState) => { + const onChange = useDebouncedCallback((editorState: EditorState) => { editorState.read(() => { const markdown = $convertToMarkdownString(transformers); if (markdown) { - handleContentChange(markdown); + onContentChange(markdown); } }); - }; + }, 400); return { onChange }; } -interface PreviewPluginProps { - previewUrl: string; -} - -export const PreviewPlugin = ({ previewUrl }: PreviewPluginProps) => { - const { setErrorMessage, setPreviewContent } = useContentEditor(); - +export const PreviewPlugin = ({ onChange: onChangeProp, meta }: PreviewPluginProps) => { + const { setPreviewContent, setErrorMessage } = useContentEditor(); const handleContentChange = async (content: string) => { - try { - if (content) { - const data = await fetchSource(previewUrl, content); - if (!data.error && data?.source) { - setPreviewContent(data.source); - } else { - setErrorMessage(`${data.error?.toUpperCase()}: ${data?.exception}`); - } - } - } catch (e) { - if (e instanceof Error) { - setErrorMessage(`MDX Error: ${e.message}`); + if (content) { + const previewResponse = await onChangeProp({ source: content, data: meta }); + + if (previewResponse.error) { + setErrorMessage(`MDX Error: ${previewResponse.error}`); + } else { + setPreviewContent(previewResponse.result); } } }; const { onChange } = usePreview(handleContentChange); - return ; }; diff --git a/packages/content-editor-plugin/src/plugins/TableActionMenuPlugin.tsx b/packages/content-editor-plugin/src/plugins/TableActionMenuPlugin.tsx index cd053f04..d17953d0 100644 --- a/packages/content-editor-plugin/src/plugins/TableActionMenuPlugin.tsx +++ b/packages/content-editor-plugin/src/plugins/TableActionMenuPlugin.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { $getSelection, $isRangeSelection, LexicalEditor } from 'lexical'; import { diff --git a/packages/content-editor-plugin/src/store/index.ts b/packages/content-editor-plugin/src/store/index.ts index 3a3b124b..906bbb7e 100644 --- a/packages/content-editor-plugin/src/store/index.ts +++ b/packages/content-editor-plugin/src/store/index.ts @@ -1,4 +1,4 @@ -import { useCallback } from 'react'; +import { ReactNode, useCallback } from 'react'; import { create } from 'zustand'; type PageState = 'VIEW' | 'EDIT' | 'REVIEW' | 'SAVING' | 'ERROR'; @@ -7,13 +7,13 @@ type UserType = { sid: string; displayName: string; email: string }; export interface ContentEditorState { pageState: PageState; user?: UserType; - previewContent?: any; + previewContent?: ReactNode; errorMessage?: string; isInsertingLink: boolean; setPageState: (state: PageState) => void; startEditing: () => void; stopEditing: () => void; - setPreviewContent: (content: any) => void; + setPreviewContent: (content: ReactNode) => void; setErrorMessage: (errorMessage: string) => void; setUser: (user: UserType) => void; setIsInsertingLink: (isInsertingLink: boolean) => void; @@ -35,7 +35,7 @@ const useStore = create(set => ({ setPageState: state => set({ pageState: state }), startEditing: () => set({ ...initialState, pageState: 'EDIT' }), stopEditing: () => set({ pageState: initialState.pageState }), - setPreviewContent: (content: string) => + setPreviewContent: (content: ReactNode) => set({ pageState: 'EDIT', previewContent: content, errorMessage: undefined }), setErrorMessage: (errorMessage: string) => set({ errorMessage, pageState: 'ERROR' }), setUser: (user: any) => set({ user }), diff --git a/packages/core/src/filesystems/RestrictedVolume.ts b/packages/core/src/filesystems/RestrictedVolume.ts index e36c0dd4..ee69090e 100644 --- a/packages/core/src/filesystems/RestrictedVolume.ts +++ b/packages/core/src/filesystems/RestrictedVolume.ts @@ -14,6 +14,8 @@ class RestrictedVolume extends ImmutableFileSystem implements IVolumePartiallyMu this.#vfs = vfs; } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /** @ts-ignore */ promises = create(this.promises, { unlink: target => this.#vfs.unlink(target), symlink: (target, alias, type) => this.#vfs.symlink(target, alias, type), diff --git a/packages/core/src/filesystems/UnionVolume.ts b/packages/core/src/filesystems/UnionVolume.ts index db634bb8..38011354 100644 --- a/packages/core/src/filesystems/UnionVolume.ts +++ b/packages/core/src/filesystems/UnionVolume.ts @@ -13,6 +13,8 @@ export default class UnionVolume extends MutableVolume implements IUnionVolume { this.#vfs = vfs; } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /** @ts-ignore */ promises = create(this.promises, { readFile: (file, options) => { if (options?.includeConflicts) { diff --git a/packages/icons/README.md b/packages/icons/README.md new file mode 100644 index 00000000..c93007cc --- /dev/null +++ b/packages/icons/README.md @@ -0,0 +1,15 @@ +# Mosaic Icon Library + +`@jpmorganchase/mosaic-icons`contains icons used by the Mosaic. + +## Installation + +`yarn add @jpmorganchase/mosaic-icons` + +## Criteria + +The criteria for a component within `@jpmorganchase/mosaic-icons` is + +- It can be used outside the Mosaic site with only Mosaic theme dependencies. +- It **should not** contain any Mosaic Store, NextJS or other site specific dependencies. +- Should be client-side only components diff --git a/packages/icons/package.json b/packages/icons/package.json new file mode 100644 index 00000000..bd361432 --- /dev/null +++ b/packages/icons/package.json @@ -0,0 +1,52 @@ +{ + "name": "@jpmorganchase/mosaic-icons", + "description": "Mosaic - Icons", + "version": "0.1.0-beta.89", + "author": "", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git@github.com:jpmorganchase/mosaic.git", + "directory": "packages/icons" + }, + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "style": "./dist/index.css", + "exports": { + "./index.css": "./dist/index.css", + ".": { + "style": "./dist/index.css", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "node": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "npm-run-all --parallel build:*", + "build:types": "tsc", + "build:components": "node ./scripts/bundle.mjs", + "clean": "npx del-cli 'dist/**' && find . -type d -empty -delete", + "lint": "eslint --ignore-pattern \"**/__tests__/**\"", + "dev": "node ./scripts/bundle.mjs watch" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.0.0", + "del-cli": "^4.0.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", + "@salt-ds/core": "^1.13.3" + }, + "peerDependencies": { + "@types/react": "^18.2.46", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} diff --git a/packages/theme/scripts/buildIcons.mjs b/packages/icons/scripts/buildIcons.mjs similarity index 100% rename from packages/theme/scripts/buildIcons.mjs rename to packages/icons/scripts/buildIcons.mjs diff --git a/packages/icons/scripts/bundle.mjs b/packages/icons/scripts/bundle.mjs new file mode 100644 index 00000000..da9eb8ad --- /dev/null +++ b/packages/icons/scripts/bundle.mjs @@ -0,0 +1,63 @@ +import esbuild from 'esbuild'; +import { nodeExternalsPlugin } from 'esbuild-node-externals'; +import glob from 'fast-glob'; + +const args = process.argv.slice(2); +const watchEnabled = args[0] === 'watch'; +const packageName = process.env.npm_package_name; + +try { + const context = await esbuild.context({ + entryPoints: glob.sync(['src/**/*.ts?(x)', 'src/*.ts?(x)'], { + ignore: ['**/__tests__'] + }), + loader: { + '.jpg': 'dataurl', + '.png': 'dataurl', + '.svg': 'text' + }, + outdir: './dist', + bundle: true, + sourcemap: false, + splitting: true, + minify: true, + format: 'esm', + target: ['es2022'], + plugins: [ + nodeExternalsPlugin(), + { + name: 'on-end', + setup(build) { + build.onEnd(({ errors = [] }) => { + if (errors.length) { + console.error(`build failed for ${packageName}:`, errors); + } else { + console.log(`build succeeded for ${packageName}:`); + } + }); + } + } + ], + external: ['react', 'react-dom'] + }); + + await context.rebuild(); + if (watchEnabled) { + await context.watch(); + } + await context.serve(); + context.dispose(); +} catch (e) { + if (e.errors && e.errors.length > 0) { + console.group(`!!!!!!! ${packageName} build errors !!!!!!!`); + console.error(e.errors); + console.groupEnd(); + } + + if (e.warnings && e.warnings.length > 0) { + console.group(`!!!!!!! ${packageName} build warnings !!!!!!!`); + console.error(e.warnings); + console.groupEnd(); + } + process.exit(1); +} diff --git a/packages/theme/scripts/saltIconNames.mjs b/packages/icons/scripts/saltIconNames.mjs similarity index 99% rename from packages/theme/scripts/saltIconNames.mjs rename to packages/icons/scripts/saltIconNames.mjs index 494e4ac3..774254a1 100644 --- a/packages/theme/scripts/saltIconNames.mjs +++ b/packages/icons/scripts/saltIconNames.mjs @@ -30,4 +30,4 @@ export const saltIconNames = { }); }); } -}; +}; \ No newline at end of file diff --git a/packages/theme/src/icon/icons.ts b/packages/icons/src/index.ts similarity index 92% rename from packages/theme/src/icon/icons.ts rename to packages/icons/src/index.ts index 59623831..064f37cf 100644 --- a/packages/theme/src/icon/icons.ts +++ b/packages/icons/src/index.ts @@ -1,7 +1,8 @@ +'use client'; import React from 'react'; import * as SaltIcons from '@salt-ds/icons'; import type { IconProps as SaltIconProps } from '@salt-ds/icons'; -import type { saltIconNames } from '../../types/saltIconNames'; +import type { saltIconNames } from '../types/saltIconNames'; const { DEFAULT_ICON_SIZE: DEDEFAULT_ICON_SIZE, diff --git a/packages/icons/tsconfig.json b/packages/icons/tsconfig.json new file mode 100644 index 00000000..a179de40 --- /dev/null +++ b/packages/icons/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.bundle.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src"] +} diff --git a/packages/theme/types/saltIconNames.d.ts b/packages/icons/types/saltIconNames.d.ts similarity index 100% rename from packages/theme/types/saltIconNames.d.ts rename to packages/icons/types/saltIconNames.d.ts diff --git a/packages/layouts/package.json b/packages/layouts/package.json index f6173b96..8191564f 100644 --- a/packages/layouts/package.json +++ b/packages/layouts/package.json @@ -36,25 +36,25 @@ }, "devDependencies": { "del-cli": "^4.0.1", - "esbuild-node-externals": "^1.0.2", - "typescript": "^4.8.3" + "esbuild-node-externals": "^1.12.0", + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", - "@jpmorganchase/mosaic-content-editor-plugin": "0.1.0-beta.89", "@jpmorganchase/mosaic-site-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-site-components-next": "^0.1.0-beta.89", "@jpmorganchase/mosaic-store": "^0.1.0-beta.89", "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", "@salt-ds/core": "^1.33.0", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/sprinkles": "^1.3.0", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/sprinkles": "^1.6.1", "clsx": "^2.0.0", "lodash-es": "^4.17.21", "next": "^14.0.0", "react-transition-group": "^4.4.5" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/layouts/src/Fade.tsx b/packages/layouts/src/Fade.tsx deleted file mode 100644 index 69ec0119..00000000 --- a/packages/layouts/src/Fade.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useRef } from 'react'; -import { Transition } from 'react-transition-group'; - -const transitionStyles = { - entering: { opacity: 1 }, - entered: { opacity: 1 }, - exiting: { opacity: 0 }, - exited: { opacity: 0 } -}; - -type FadeProps = { - children: React.ReactElement; - duration?: { - enter: number; - exit: number; - }; - in: boolean; - style?: React.CSSProperties; -}; - -export const Fade: React.FC = ({ children, duration, in: inProp, style }) => { - const nodeRef = useRef(null); - const defaultStyle = { - transition: `opacity ${duration?.enter}ms ease-in-out`, - opacity: 0 - }; - return ( - - {state => ( -
- {children} -
- )} -
- ); -}; diff --git a/packages/layouts/src/LayoutBase/index.tsx b/packages/layouts/src/LayoutBase/index.tsx index 618fff95..e58350cc 100644 --- a/packages/layouts/src/LayoutBase/index.tsx +++ b/packages/layouts/src/LayoutBase/index.tsx @@ -1,9 +1,6 @@ import React from 'react'; -import { Spinner } from '@salt-ds/core'; import classnames from 'clsx'; -import { useIsLoading } from '../hooks/useIsLoading'; -import { Fade } from '../Fade'; import styles from './styles.css'; export const LayoutBase = ({ @@ -14,21 +11,9 @@ export const LayoutBase = ({ Header?: React.ReactNode; className?: string; children?: React.ReactNode; -}) => { - // Add a delay before showing loading state, so loading screen doesn't appear if page loads quickly - const isLoading = useIsLoading({ loadingDelay: 50 }); - return ( -
-
{Header}
-
- -
-
- -
- - {children} -
-
- ); -}; +}) => ( +
+
{Header}
+
{children}
+
+); diff --git a/packages/layouts/src/LayoutColumns/index.tsx b/packages/layouts/src/LayoutColumns/index.tsx index db94a008..efbc6b01 100644 --- a/packages/layouts/src/LayoutColumns/index.tsx +++ b/packages/layouts/src/LayoutColumns/index.tsx @@ -1,20 +1,9 @@ import React from 'react'; -import { Drawer, Sidebar, TriggerElementProps } from '@jpmorganchase/mosaic-site-components'; -import { Button, Icon, useBreakpoint } from '@jpmorganchase/mosaic-components'; +import { Sidebar } from '@jpmorganchase/mosaic-site-components'; import styles from './styles.css'; -const TriggerElement: React.FC = ({ open, onClick: handleClick }) => ( - -); - export const LayoutColumns = ({ PrimarySidebar, SecondarySidebar, @@ -25,26 +14,15 @@ export const LayoutColumns = ({ SecondarySidebar?: React.ReactNode; Footer?: React.ReactNode; children?: React.ReactNode; -}) => { - const breakpoint = useBreakpoint(); - const showDrawer = breakpoint === 'mobile' || breakpoint == 'tablet'; - return ( -
-
- {showDrawer && PrimarySidebar && ( - - {PrimarySidebar} - - )} - {!showDrawer && PrimarySidebar && {PrimarySidebar}} -
-
- {children} - {Footer && Footer} -
-
- {SecondarySidebar && !showDrawer ? {SecondarySidebar} : null} -
+}) => ( +
+
{PrimarySidebar && {PrimarySidebar}}
+
+ {children} + {Footer && Footer} +
+
+ {SecondarySidebar ? {SecondarySidebar} : null}
- ); -}; +
+); diff --git a/packages/layouts/src/LayoutColumns/styles.css.ts b/packages/layouts/src/LayoutColumns/styles.css.ts index d25ea2e8..832ff289 100644 --- a/packages/layouts/src/LayoutColumns/styles.css.ts +++ b/packages/layouts/src/LayoutColumns/styles.css.ts @@ -29,6 +29,10 @@ const rootGridProperties = defineProperties({ const rootGridSprinkles = createSprinkles(rootGridProperties); +const responsiveGridArea = responsiveSprinkles({ + display: ['none', 'none', 'flex', 'flex'] +}); + const styles = { root: style([ style({ @@ -66,18 +70,23 @@ const styles = { marginRight: 'auto', marginLeft: 'auto' }), - sidebar: style({ - gridArea: 'layout-column-sidebar', - position: 'sticky', - top: `${config.appHeader.height}px`, - display: 'flex' - }), - toc: style({ - gridArea: 'layout-column-toc', - position: 'sticky', - top: `${config.appHeader.height}px`, - maxWidth: '500px' - }), + sidebar: style([ + style({ + gridArea: 'layout-column-sidebar', + position: 'sticky', + top: `${config.appHeader.height}px` + }), + responsiveGridArea + ]), + toc: style([ + style({ + gridArea: 'layout-column-toc', + position: 'sticky', + top: `${config.appHeader.height}px`, + maxWidth: '500px' + }), + responsiveGridArea + ]), toggleButton: style([ { diff --git a/packages/layouts/src/LayoutConfigProvider/index.tsx b/packages/layouts/src/LayoutConfigProvider/index.tsx deleted file mode 100644 index 3edfd4cc..00000000 --- a/packages/layouts/src/LayoutConfigProvider/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { ReactNode } from 'react'; - -let LayoutContext; - -export function LayoutConfigProvider({ - children, - config -}: { - children?: ReactNode; - config: unknown; -}) { - LayoutContext = LayoutContext || React.createContext(config); - return children; -} - -export function useLayoutConfig() { - if (!LayoutContext) { - throw new Error('Trying to use `useLayoutConfig` outside of a `LayoutConfigContext`.'); - } - - return React.useContext(LayoutContext); -} diff --git a/packages/layouts/src/LayoutFullWidth/index.tsx b/packages/layouts/src/LayoutFullWidth/index.tsx index 8186b360..42967a90 100644 --- a/packages/layouts/src/LayoutFullWidth/index.tsx +++ b/packages/layouts/src/LayoutFullWidth/index.tsx @@ -4,7 +4,7 @@ import classnames from 'clsx'; import styles from './styles.css'; export interface LayoutFullWidthProps { - Footer?: React.ReactElement; + Footer?: React.ReactNode; children: React.ReactNode; className?: string; } diff --git a/packages/layouts/src/LayoutProvider.tsx b/packages/layouts/src/LayoutProvider.tsx deleted file mode 100644 index e8f1b19b..00000000 --- a/packages/layouts/src/LayoutProvider.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { FC, ReactNode } from 'react'; -import { useLayout } from '@jpmorganchase/mosaic-store'; -import { usePageState } from '@jpmorganchase/mosaic-content-editor-plugin'; - -import type { LayoutProps } from './types'; -import * as layouts from './layouts'; - -export type LayoutProviderProps = { - layoutComponents?: { - [name: string]: React.FC | undefined; - }; - LayoutProps?: LayoutProps; - children: ReactNode; - defaultLayout?: string; -}; - -export const LayoutProvider: FC = ({ - children, - layoutComponents, - LayoutProps = {}, - defaultLayout = 'FullWidth' -}) => { - const { layout: layoutInStore = defaultLayout } = useLayout(); - const { pageState } = usePageState(); - const layout = pageState !== 'VIEW' ? 'EditLayout' : layoutInStore; - - let LayoutComponent: FC | undefined = layoutComponents?.[layout] as FC; - if (!LayoutComponent) { - console.error(`Layout ${layout} is not supported, defaulting to ${defaultLayout}`); - LayoutComponent = layouts[defaultLayout]; - } - return LayoutComponent ? ( - {children} - ) : ( - <>children - ); -}; diff --git a/packages/layouts/src/hooks/useIsLoading.ts b/packages/layouts/src/hooks/useIsLoading.ts deleted file mode 100644 index 3f168bca..00000000 --- a/packages/layouts/src/hooks/useIsLoading.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { useState, useEffect } from 'react'; -import { useRouter } from 'next/router'; -import { debounce } from 'lodash-es'; - -// Unexported type from next/dist/shared/lib/mitt.d.ts -declare type Handler = (...evts: any[]) => void; - -export function useIsLoading({ loadingDelay }: { loadingDelay?: number } = {}) { - const router = useRouter(); - const [isLoading, setIsLoading] = useState(false); - - useEffect(() => { - const start = debounce(() => { - setIsLoading(true); - }, loadingDelay); - - const handleRouteChangeStart: Handler = (_url, { shallow }) => { - if (!shallow) { - start(); - } - }; - - const handleRouteChangeDone: Handler = (_url, { shallow }) => { - if (!shallow) { - setIsLoading(false); - } - }; - - router.events.on('routeChangeStart', handleRouteChangeStart); - router.events.on('routeChangeError', handleRouteChangeDone); - router.events.on('routeChangeComplete', handleRouteChangeDone); - - return () => { - router.events.off('routeChangeStart', handleRouteChangeStart); - router.events.off('routeChangeError', handleRouteChangeDone); - router.events.off('routeChangeComplete', handleRouteChangeDone); - }; - }, [router]); - - return isLoading; -} diff --git a/packages/layouts/src/index.ts b/packages/layouts/src/index.ts index f30ff3ca..399b7413 100644 --- a/packages/layouts/src/index.ts +++ b/packages/layouts/src/index.ts @@ -1,8 +1,5 @@ export * from './LayoutBase'; export * from './LayoutColumns'; export * from './LayoutFullWidth'; -export * from './hooks/useIsLoading'; -export * from './LayoutConfigProvider'; -export * from './LayoutProvider'; export * as layouts from './layouts'; diff --git a/packages/layouts/src/layouts/Detail/DetailContentOnly.tsx b/packages/layouts/src/layouts/Detail/DetailContentOnly.tsx index ca5a25c7..cb4fbbbf 100644 --- a/packages/layouts/src/layouts/Detail/DetailContentOnly.tsx +++ b/packages/layouts/src/layouts/Detail/DetailContentOnly.tsx @@ -1,15 +1,8 @@ import React from 'react'; -import { AppHeader, Breadcrumbs, Footer } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutFullWidth } from '../../LayoutFullWidth'; import type { LayoutProps } from '../../types'; -export const DetailContentOnly: React.FC = ({ FooterProps, children }) => ( - }> - }> - - {children} - - +export const DetailContentOnly: React.FC = ({ children, FooterComponent }) => ( + {children} ); diff --git a/packages/layouts/src/layouts/Detail/DetailHighlight.tsx b/packages/layouts/src/layouts/Detail/DetailHighlight.tsx index 78af1eec..41774fac 100644 --- a/packages/layouts/src/layouts/Detail/DetailHighlight.tsx +++ b/packages/layouts/src/layouts/Detail/DetailHighlight.tsx @@ -1,24 +1,18 @@ import React from 'react'; -import { - AppHeader, - Breadcrumbs, - Footer, - TableOfContents -} from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutColumns } from '../../LayoutColumns'; import type { LayoutProps } from '../../types'; -export const DetailHighlight: React.FC = ({ FooterProps, children }) => ( - }> - } - Footer={
} - > - - {children} - - +export const DetailHighlight: React.FC = ({ + SecondarySidebarComponent, + FooterComponent, + children +}) => ( + + {children} + ); diff --git a/packages/layouts/src/layouts/Detail/DetailOverview.tsx b/packages/layouts/src/layouts/Detail/DetailOverview.tsx index 73db7abb..f0ec1928 100644 --- a/packages/layouts/src/layouts/Detail/DetailOverview.tsx +++ b/packages/layouts/src/layouts/Detail/DetailOverview.tsx @@ -1,15 +1,7 @@ import React from 'react'; import { HelpLinks } from '@jpmorganchase/mosaic-components'; -import { - AppHeader, - BackLink, - Breadcrumbs, - DocPaginator, - Footer, - PageNavigation -} from '@jpmorganchase/mosaic-site-components'; +import { BackLink } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutColumns } from '../../LayoutColumns'; import type { LayoutProps } from '../../types'; import styles from './styles.css'; @@ -17,7 +9,9 @@ import styles from './styles.css'; export const DetailOverview: React.FC = ({ BackLinkProps, SidebarProps, - FooterProps, + FooterComponent, + DocPaginatorComponent, + PrimarySidebarComponent, children }) => { const Sidebar = ( @@ -27,21 +21,14 @@ export const DetailOverview: React.FC = ({ )} - + {PrimarySidebarComponent} {SidebarProps?.helpLinks && } ); return ( - }> - } - > - - {children} - - - + + {children} + {DocPaginatorComponent} + ); }; diff --git a/packages/layouts/src/layouts/Detail/DetailTechnical.tsx b/packages/layouts/src/layouts/Detail/DetailTechnical.tsx index 1c799f95..33328339 100644 --- a/packages/layouts/src/layouts/Detail/DetailTechnical.tsx +++ b/packages/layouts/src/layouts/Detail/DetailTechnical.tsx @@ -1,28 +1,20 @@ import React from 'react'; import { HelpLinks } from '@jpmorganchase/mosaic-components'; -import { - AppHeader, - DocPaginator, - BackLink, - Breadcrumbs, - Footer, - TableOfContents, - PageNavigation -} from '@jpmorganchase/mosaic-site-components'; +import { BackLink } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutColumns } from '../../LayoutColumns'; import type { LayoutProps } from '../../types'; import styles from './styles.css'; export const DetailTechnical: React.FC = ({ BackLinkProps, - FooterProps, + FooterComponent, + DocPaginatorComponent, + SecondarySidebarComponent, + PrimarySidebarComponent, SidebarProps, children }) => { - const Header = ; - const PrimarySidebar = ( <> {BackLinkProps && ( @@ -30,24 +22,19 @@ export const DetailTechnical: React.FC = ({ )} - + {PrimarySidebarComponent} {SidebarProps?.helpLinks && } ); - const SecondarySidebar = ; - return ( - - } - > - - {children} - - - + + {children} + {DocPaginatorComponent} + ); }; diff --git a/packages/layouts/src/layouts/Edit/index.css.ts b/packages/layouts/src/layouts/Edit/index.css.ts new file mode 100644 index 00000000..de728d49 --- /dev/null +++ b/packages/layouts/src/layouts/Edit/index.css.ts @@ -0,0 +1,15 @@ +import { responsiveSprinkles, vars } from '@jpmorganchase/mosaic-theme'; +import { style } from '@vanilla-extract/css'; + +export default { + root: style([ + style({ + maxWidth: '100vw', + marginLeft: vars.space.horizontal.x10, + marginRight: vars.space.horizontal.x10 + }), + responsiveSprinkles({ + marginTop: ['x6', 'x6', 'x10', 'x10'] + }) + ]) +}; diff --git a/packages/layouts/src/layouts/Edit/index.tsx b/packages/layouts/src/layouts/Edit/index.tsx index fca7f7d1..6c7b8ea3 100644 --- a/packages/layouts/src/layouts/Edit/index.tsx +++ b/packages/layouts/src/layouts/Edit/index.tsx @@ -1,35 +1,13 @@ -import React, { useEffect } from 'react'; -import { useRouter } from 'next/router'; -import { useContentEditor } from '@jpmorganchase/mosaic-content-editor-plugin'; -import { AppHeader } from '@jpmorganchase/mosaic-site-components'; +import type { ReactNode } from 'react'; -import { LayoutBase } from '../../LayoutBase'; -import type { LayoutProps } from '../../types'; -import styles from './styles.css'; +import styles from './index.css'; -export const EditLayout: React.FC = ({ children }) => { - const router = useRouter(); - const { pageState, stopEditing } = useContentEditor(); +export interface EditLayoutProps { + children: ReactNode; +} - useEffect(() => { - const handleRouteChange = () => { - if (pageState === 'EDIT') { - stopEditing(); - } - }; - - router.events.on('routeChangeStart', handleRouteChange); - - return () => { - router.events.off('routeChangeStart', handleRouteChange); - }; - }, [pageState, router.events, stopEditing]); - - return ( - }> -
- {children} -
-
- ); -}; +export const Edit = ({ children }: EditLayoutProps) => ( +
+ {children} +
+); diff --git a/packages/layouts/src/layouts/Edit/styles.css.ts b/packages/layouts/src/layouts/Edit/styles.css.ts deleted file mode 100644 index f505763a..00000000 --- a/packages/layouts/src/layouts/Edit/styles.css.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { responsiveSprinkles, vars, config } from '@jpmorganchase/mosaic-theme'; -import { globalStyle, style } from '@vanilla-extract/css'; - -const base = style({}); - -globalStyle(`${base} > main`, { - height: `calc(100% + ${config.appHeader.height}px)` -}); - -export default { - root: style([ - style({ - maxWidth: '100vw', - marginLeft: vars.space.horizontal.x10, - marginRight: vars.space.horizontal.x10 - }), - responsiveSprinkles({ - marginTop: ['x6', 'x6', 'x10', 'x10'] - }) - ]), - base -}; diff --git a/packages/layouts/src/layouts/FullWidth/index.tsx b/packages/layouts/src/layouts/FullWidth/index.tsx index 06583185..5eee18b6 100644 --- a/packages/layouts/src/layouts/FullWidth/index.tsx +++ b/packages/layouts/src/layouts/FullWidth/index.tsx @@ -1,12 +1,8 @@ import React from 'react'; -import { AppHeader } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutFullWidth } from '../../LayoutFullWidth'; import type { LayoutProps } from '../../types'; export const FullWidth: React.FC = ({ children }) => ( - }> - {children} - + {children} ); diff --git a/packages/layouts/src/layouts/Landing/index.tsx b/packages/layouts/src/layouts/Landing/index.tsx index d68d01c2..efd9896f 100644 --- a/packages/layouts/src/layouts/Landing/index.tsx +++ b/packages/layouts/src/layouts/Landing/index.tsx @@ -1,12 +1,8 @@ import React from 'react'; -import { AppHeader, Footer } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutFullWidth } from '../../LayoutFullWidth'; import type { LayoutProps } from '../../types'; -export const Landing: React.FC = ({ FooterProps, children }) => ( - }> - }>{children} - +export const Landing: React.FC = ({ FooterComponent, children }) => ( + {children} ); diff --git a/packages/layouts/src/layouts/Newsletter/index.tsx b/packages/layouts/src/layouts/Newsletter/index.tsx index afc2b1fb..eb58137c 100644 --- a/packages/layouts/src/layouts/Newsletter/index.tsx +++ b/packages/layouts/src/layouts/Newsletter/index.tsx @@ -1,29 +1,27 @@ import React from 'react'; -import { AppHeader, DocPaginator, BackLink, Footer } from '@jpmorganchase/mosaic-site-components'; +import { BackLink } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutColumns } from '../../LayoutColumns'; import type { LayoutProps } from '../../types'; import styles from '../Detail/styles.css'; export interface NewsletterProps extends LayoutProps {} -export const Newsletter: React.FC = ({ children, BackLinkProps, FooterProps }) => { +export const Newsletter: React.FC = ({ + children, + BackLinkProps, + FooterComponent, + DocPaginatorComponent +}) => { const Sidebar = BackLinkProps?.link ? (
) : null; return ( - }> - } - SecondarySidebar={null} - > - {children} - - - + + {children} + {DocPaginatorComponent} + ); }; diff --git a/packages/layouts/src/layouts/Product/ProductDiscover.tsx b/packages/layouts/src/layouts/Product/ProductDiscover.tsx index 1d91c9f5..e443b952 100644 --- a/packages/layouts/src/layouts/Product/ProductDiscover.tsx +++ b/packages/layouts/src/layouts/Product/ProductDiscover.tsx @@ -1,15 +1,8 @@ import React from 'react'; -import { AppHeader, Breadcrumbs, Footer } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutFullWidth } from '../../LayoutFullWidth'; import type { LayoutProps } from '../../types'; -export const ProductDiscover: React.FC = ({ FooterProps, children }) => ( - }> - }> - - {children} - - +export const ProductDiscover: React.FC = ({ FooterComponent, children }) => ( + {children} ); diff --git a/packages/layouts/src/layouts/Product/ProductPreview.tsx b/packages/layouts/src/layouts/Product/ProductPreview.tsx index 3bed5ab7..ff67d82c 100644 --- a/packages/layouts/src/layouts/Product/ProductPreview.tsx +++ b/packages/layouts/src/layouts/Product/ProductPreview.tsx @@ -1,12 +1,8 @@ import React from 'react'; -import { AppHeader, Footer } from '@jpmorganchase/mosaic-site-components'; -import { LayoutBase } from '../../LayoutBase'; import { LayoutFullWidth } from '../../LayoutFullWidth'; import type { LayoutProps } from '../../types'; -export const ProductPreview: React.FC = ({ FooterProps, children }) => ( - }> - }>{children} - +export const ProductPreview: React.FC = ({ FooterComponent, children }) => ( + {children} ); diff --git a/packages/layouts/src/layouts/PythonDoc/index.tsx b/packages/layouts/src/layouts/PythonDoc/index.tsx deleted file mode 100644 index 9b9c528a..00000000 --- a/packages/layouts/src/layouts/PythonDoc/index.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import classnames from 'clsx'; -import { HelpLinks, Hero } from '@jpmorganchase/mosaic-components'; -import { - AppHeader, - BackLink, - Breadcrumbs, - DocPaginator, - Footer, - TableOfContents, - PageNavigation -} from '@jpmorganchase/mosaic-site-components'; - -import { LayoutBase } from '../../LayoutBase'; -import { LayoutColumns } from '../../LayoutColumns'; -import type { LayoutProps } from '../../types'; -import styles from './styles.css'; - -// TODO add image support to Hero via Mosaic plugin or provide a custom Layout -const APIHero = ({ description, name, pageType, releaseDate, title, version }) => ( - -); - -export const PythonDoc: React.FC = ({ - BackLinkProps, - FooterProps, - SidebarProps, - ToCProps, - children, - meta -}) => { - // Format the toc so that function calls do not have any arguments - // init(arg1, arg2) becomes init() - const formattedTableOfContentsItems = ToCProps?.items?.map(({ text, ...rest }) => ({ - ...rest, - text: text.replace(/\s*\(.*?\).*/g, '() ') - })); - - const PrimarySidebar = ( - <> - {BackLinkProps && ( -
- -
- )} - - {SidebarProps?.helpLinks && } - - ); - - const SecondarySidebar = ; - - return ( - }> - } - > -
- - {meta?.data?.pageType === 'root' || meta?.data?.pageType === 'index' ? ( - - ) : null} - {children} - -
-
-
- ); -}; diff --git a/packages/layouts/src/layouts/PythonDoc/styles.css.ts b/packages/layouts/src/layouts/PythonDoc/styles.css.ts deleted file mode 100644 index 3b51cba6..00000000 --- a/packages/layouts/src/layouts/PythonDoc/styles.css.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { style } from '@vanilla-extract/css'; -import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -export default { - root: style({ - width: '100%', - zIndex: 1, - display: 'flex' - }), - - main: style({ - width: '100%', - minWidth: 0, - display: 'flex', - justifyContent: 'center' - }), - - locked: style({ - width: '100%', - minWidth: 0, - display: 'flex', - justifyContent: 'center', - position: 'relative', - overflow: 'hidden' - }), - - columnWrapper: style([ - style({ - display: 'flex', - width: '100%', - maxWidth: '1128px' - }), - responsiveSprinkles({ - marginX: ['x8', 'x8', 'x8', 'x8'] - }) - ]), - - contentScrollMargin: style({}), - - contentColumn: style([ - style({ - display: 'flex', - flexDirection: 'column', - justifyContent: 'stretch', - zIndex: 2, - width: '100%' - }), - responsiveSprinkles({ - paddingTop: ['x10', 'x10', 'x20', 'x20'], - marginRight: ['none', 'none', 'none', 'x6'] - }) - ]), - - contentBody: style([ - style({ - flexGrow: 1 - }) - ]), - - sidebarHeader: style({ flexShrink: 0 }), - - wrapper: style({ - width: '100%', - overflow: 'hidden', - position: 'relative' - }) -}; diff --git a/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/index.tsx b/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/index.tsx deleted file mode 100644 index ee3507a3..00000000 --- a/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { Caption1, Caption2, Link } from '@jpmorganchase/mosaic-components'; - -import styles from './styles.css'; - -export type Item = { level: number; id: string; text: string }; - -function TableOfContentsItem({ item }) { - return ( -
  • - - {item.text} - -
  • - ); -} - -export function ExportsSidebar({ items }) { - if (!items) { - throw new Error('No `items` specified for Exports Sidebar TOC.'); - } - if (!items.length) { - return null; - } - - return ( - - ); -} diff --git a/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/styles.css.ts b/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/styles.css.ts deleted file mode 100644 index 85cc65cd..00000000 --- a/packages/layouts/src/layouts/TypeDoc/ExportsSidebar/styles.css.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { style } from '@vanilla-extract/css'; -import { link, navigableBorder, responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -export default { - root: style({ - position: 'sticky' - }), - list: style([ - style({ - listStyle: 'none' - }), - responsiveSprinkles({ - marginTop: ['x4', 'x4', 'x4', 'x4'], - marginBottom: ['x6', 'x6', 'x6', 'x6'], - padding: ['none', 'none', 'none', 'none'] - }) - ]), - item: style([ - { - cursor: 'pointer', - position: 'relative', - display: 'block' - }, - navigableBorder({ - variant: 'unselected', - borderLeftWidth: 'medium' - }), - navigableBorder({ - variant: 'hover', - borderLeftWidth: 'medium' - }), - navigableBorder({ - variant: 'selected', - borderLeftWidth: 'medium' - }), - link({ variant: 'selectable' }), - responsiveSprinkles({ - paddingTop: ['x2', 'x2', 'x2', 'x2'], - paddingRight: ['x4', 'x4', 'x4', 'x4'], - paddingBottom: ['x2', 'x2', 'x2', 'x2'], - paddingLeft: ['x4', 'x4', 'x4', 'x4'] - }) - ]) -}; diff --git a/packages/layouts/src/layouts/TypeDoc/icons.css b/packages/layouts/src/layouts/TypeDoc/icons.css deleted file mode 100644 index 29d5aae5..00000000 --- a/packages/layouts/src/layouts/TypeDoc/icons.css +++ /dev/null @@ -1,944 +0,0 @@ -.tsd-kind-icon { - display: block; - position: relative; - padding-left: 20px; - text-indent: -20px; -} -.tsd-kind-icon:before { - content: ''; - display: inline-block; - vertical-align: middle; - width: 17px; - height: 17px; - margin: 0 8px 2px 0; - background-image: url(./icons.png); -} -@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - .tsd-kind-icon:before { - background-image: url(./icons@2x.png); - background-size: 238px 204px; - } -} - -.tsd-signature.tsd-kind-icon:before { - background-position: 0 -153px; -} - -.tsd-kind-object-literal > .tsd-kind-icon:before { - background-position: 0px -17px; -} -.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -17px; -} -.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -17px; -} - -.tsd-kind-class > .tsd-kind-icon:before { - background-position: 0px -34px; -} -.tsd-kind-classes > .tsd-kind-icon:before { - background-position: 0px -34px; -} -.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -34px; -} -.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -34px; -} - -.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -51px; -} - -.tsd-kind-interface > .tsd-kind-icon:before { - background-position: 0px -68px; -} -.tsd-kind-interfaces > .tsd-kind-icon:before { - background-position: 0px -68px; -} -.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -68px; -} -.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -68px; -} - -.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -85px; -} - -.tsd-kind-namespace > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-module > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-enum > .tsd-kind-icon:before { - background-position: 0px -119px; -} -.tsd-kind-enums > .tsd-kind-icon:before { - background-position: 0px -119px; -} -.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -119px; -} -.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -119px; -} - -.tsd-kind-enum-member > .tsd-kind-icon:before { - background-position: 0px -136px; -} -.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -136px; -} -.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -136px; -} - -.tsd-kind-signature > .tsd-kind-icon:before { - background-position: 0px -153px; -} -.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -153px; -} -.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -153px; -} - -.tsd-kind-type-alias > .tsd-kind-icon:before { - background-position: 0px -170px; -} -.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -170px; -} -.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -170px; -} - -.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -187px; -} - -.tsd-kind-variable > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-property > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-get-signature > .tsd-kind-icon:before { - background-position: -136px -17px; -} -.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -17px; -} -.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -17px; -} - -.tsd-kind-set-signature > .tsd-kind-icon:before { - background-position: -136px -34px; -} -.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -34px; -} -.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -34px; -} - -.tsd-kind-accessor > .tsd-kind-icon:before { - background-position: -136px -51px; -} -.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -51px; -} -.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -51px; -} - -.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-constructor > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-constructor-signature > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-index-signature > .tsd-kind-icon:before { - background-position: -136px -119px; -} -.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -119px; -} -.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -119px; -} - -.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -136px; -} -.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -136px; -} -.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -136px; -} - -.tsd-is-static > .tsd-kind-icon:before { - background-position: -136px -153px; -} -.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -153px; -} -.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -102px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -153px; -} -.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -153px; -} - -.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -221px -187px; -} diff --git a/packages/layouts/src/layouts/TypeDoc/icons.png b/packages/layouts/src/layouts/TypeDoc/icons.png deleted file mode 100644 index 3836d5fe46e48bbe186116855aae879c23935327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9615 zcmZ{Kc_36>+`rwViHMAd#!?~-${LfgP1$7)F~(N1WKRsT#$-?;yNq3ylq}iztr1xY z8DtsBI<`UHtDfii{r-60Kg@OSJ?GqW=bZ2NvwY{NzOLpergKbGR8*&KBGn9m;|lQC z2Vwv|y`nSufCHVQijE2uRauuTeKZL;=kiiF^SbTk;N^?*u%}Y7bF;O-aMK0lXm4nb zvU~Kf+x|Kgl@Ro%nu?L%x8-yetd((kCqY|t;-%}@Y3Ez_m(HTRt=ekeUQ2n4-aRvJ zrlKaWct8JSc8Kxl4KHu+3VW1L`9%n~_KC5}g6&tFXqyKT-}R0?EdkYqCmQot47^9Z z6;opqR@7Nq-s|6=e6*0^`}+X1kg>CpuGnbpL7{xFTa|8nymC0{xgx*tI7n4mTKZNA znsd@3eVsV>YhATuv~+5(^Vu4j?)Tn`{x@8ijIA;wdf`+0P3$vnSrcWFXXc{Lx`1Z7 z%-n(BM(owD$7LzqJx)(f^Cusecq>OW z=h6n4YzSVM-V!-DK(sLT`!W~}($=O$9|ie`>_fpH0=1G1tiIFw($?~{5T>`74|p0H z``5=UydE)!CiFvmECW|s^TzG9*7pN|KknkVm3C{fEu30gffX&8iCm? zTFPm6*k%Hog`Q6JGj@dg9Z5nlAc6ApUe>;6xauB0-u!?wMU92jVL|3EcP9gEu5^wH z%tXRy#>HCEs*?KgMf73UcJ!lJ?x<6+)eJ{mEIS|HMDP7(7!(< z@X;?ACT8mncW9*XIaiJPW}Mw@b0W||)!sYnLw)0j4&-rXQgJhnQ2?frg1Nfk&JpmV8F=dDZl)e%#Grs|&0th7_o) z?7hQn<1078qcq?#;)CH=2kBBiGt37EtcXfpTXtHB59dr9=B~jI`yPm-Q?(ys=ajAu zGY;eS^z&WFvztZI3I~}*l}_lI^}6D<&CZ94;|&G9_pMx!C~$~EL4^8`QjT#|tqxxk zhl4CdxppbDiOk!Ht#SVAK4gf6Cr#=U&1sVxZ`y-X zTSi#@wHf(?(Dd6ypNOyshRZ*tneVP^W?y?$ur_!9iD-vY{&Q5(ooX2;`SkUjwEYA~ zwGcylCT4_`MZobm(0v$U(IhfYXxyjNJ@ztpH0sDmfpn|LMp3eM(R4uqKi_q1=D1-d z%GdV<&2+_9k@sc44xhIjqktRA2!Su|vzM0R-@#MK&{RdLoU#$Hc?{{JItvX{hKCtc zQNqZpkfG^@LGJRZM4H_>`F=N;O*+_`>M_ko_XWCgu@}ntqLX8VSeZQ_25Z8|^!d?o z$~}~9|`ZW9d_o<=8&K^~;Cr08b;qgq{(*e*sNt00lO2lZ;m-b<`Rl}=Lr6iQ8+$&br z!RLn{5a}j1Dh^|_1)Q?<;iBSrS0V|c_D@3}mc2d!%tV1VN?BC@clkFdx?HB&9KOTF z)9eHpmUEYsCqx^%JHuNdwY zz9P3oPYuTAXZVY}LRp&2qNl$pbsXL1GJ@wx?@CTO!acs+OFfW_U6?&As-(GJED}RR zO}B+Kxph7aUUm>i3rbPZQGXN}oQq;u`yTnFDAJ*d$4gjEJH!JPyt6V{cOUp*Jbyol zE$8wh)T=vpJOWRbv}HvR(cUSlO}ePIPdJ`J@yp=IC&E6K%r?QfW7F&%p!H~@?%yj5 z&MpiV!hyfukD56A097f!0+ANt`JSB~oLak75oKQN7FH=rQbX#Eak37|4&mqp@S~TA zOo51)xQxX}5NQ(3I_UeR4B;P0Q#x$_lDce78ET`Blo;`Hj*R;b8slZS7Oak(LjDuE z3z?-~-U@vWe*cEOsf^9|duH9};Pe)!=Ky+QQ!jr2VV-jMUH-F>oB>Ds zDJw}jm%V?OT^fu1y`$`yRdaW03L?)6vmInxhAsGrPhWIP8?=speMFf9Inn4^t zs$!88*B~c1A2J6t0~hgK2BJ_Pl23l=oeQQqjI2(4Mcv6U_#9#$PEN|qz36rCZ5$@I zNF1LpRe%ZG4qwuYr7ZdaynrPs?spt;9VbQM$462zbksMVhAOqPunrR7@Nbv#5;VKk zJB7xC?~QXd(e9REiLixHxRGhLcKR#0va}|LMS`AXKGOIGFKQv?=+>zf^ zN5XLjX6^`zh*%1UG_QV1H`@z!HZgC+OT2`+_B( z)J95hk;3C+K4XCswSP}au;fx=47~*$k`RAaYEU-qb03y0#x|&>LAeiXgri5E(!h9k z|9OVt@sk1-4+>0?ELyw|zs`~<95M=%o?Gix$?8z4Gz3Kpw|b>?BcD&s{X)-aXg!GJ zyq&`ZEP{K^u7ActXP$gGnO#F0Sr+QUZe0&d5*Yhw9A?C4(Sx2j3QKAlUpkQz7nji^ z%y8F|W{ypj(T%Bf#Wgyvq4szMo?*U-;3IGBRg1fK9!h-=YRsZ_+t~2!-)=pr;)Vnk zmt95&wMb02toOf`I9>M^Kv3LqKb_-#jauF&cGrWsCnMt?p7*uh zevugda={D04DB#7wR375=1i5}Z9fi3r)!F#7qmX9`SjppE&%8l8bKt+ADRMTWRv21 z4L&PldV8YpHw3b^`p0uWlIm#J&K65-y4lQW0VzZR!4#gfeT{b#fL1e*)Z*Ux}M^}bO%OM7uXip_4! zL@yo@q{utZeVV?3CtXs}i>nI|%26fwuzt0f#96fQ!{=dEX^YKnvIk*D%y9Cin;9R) zi{?)baJhgFs$1$SOZESTpldw2H&FD=v*v@1cA!`|s;avDKHa>Q+uJ8qhy!9%C4&lJSTN4OeydYOm4S?Bj7*e{xRYbU9Xos)R7qZT3dBBD5{ zo+(E3pR{>>)}hFhE+}!yYP0V+CVhyAq+RV{^X`XA3{iXj(ir$k@u|t8ZJ1ZnHq2dd zD$0RHmGJ=!?T5`*T2zOEJ~y}Nsyt7O)%+!0ulRQdsopJJxoznfpusv=2@zLXIq@^& z>0T5k4lzGCG(DnltLIe@6=ZOG@C(dvmYXfh4IhJfMfY8S?KkT znb7~EDE}Yhg$J1LxB7m`L4VMS(+(SXTQvh_mz!x&M3-6Z zFRB*a%_gVEqI^mL5|c%V=l_oi%|~h>gL0SB4QH5uonWd#={KPg6}6ES)zk0~#3^KJ zJq@{iqbHe3gyC))jeQ`W;(u3|q)JxuF24|GMsh%v5>>VY-bok%* z1Yl@(5G2UCK=fQck}pAyWV0n{`ML|rsl_N7vmW|frii__zB;ozrQ7{z)y}M^Sg@m_ z;+?{q3sUZs3WxnBbp~CyyL(TA?C*0KIeDPp7w0$!Ijd+M8#}r~vYW)NB*$mG*7-vH z@s^wK07OMxq>WveCEQFQ*p&2gjD1j%i+#G9z##Th`gew>H5=`RwyfPDg2G%f>x3@c z14Oy}pQK?(i06GWLWu%4cGjDoE-tTEI$`9^E?nLT663vu_>6K1e!N>A-^q&tfl$0& zy&>w~+yUelAa!c@xd8iyt^`B^$cj+}h}0i!40K2Ve1KFCDezBzZO8@=k&r)`TNTJ* zzF4Pim>SYL^=~7kW>EyiVHXNMT2)8l#v^IW!pLB_8ZvVfK&m8QHkjsZ)mvd?o$VYG zX#HiWwWlW>N{D85URJ-d)}_3h73|)X=E(6hFzi#TF{$4aSka4TeY>1a_(RIkFBL#O zE0_FoSQI)}+si51ufAqRHhDU=actTRQl@y#2h}xaDv-A&GP&0Qu9V4ED5aWnX z1E#mRT1QSvL!4~%Ozt84nP{&F>VIm6w2q!EPhh^BF-94$4JhCTcrdbDXA3Q&8mPTh zqdPv|X}??B?bIZPpl}z%(zr<8U-NoXjb*L#xyqHHfpIGAgN$5i(E9#rYPYq_tISC4 z2TDkd*uZ;CIhVI2o!||T)Kz`ER@%rTf-&SfmJFF>;d(RW(B6k!1<)uxHM_1G+9BWe zc)k`gBxYMcztqY5@jccaU)CqQ@^G5TBVx(nNf2}D@);3+{D)GzyT{>%dO6ibggS({N!!=P4=M8J}5R*&fgd(w36z0M0D$ z(SN5a`i%sZ9vmaEjiC4)DF}ix&`?mc-vYwK@+}8Gqzj6r6y)lT|Iqwlpj(LXqvh;- zb>jECiiOZ%&Q7gQg7(ix-?-RE*c(O6NG0F-+VCr;701@%L~fyfHnU<;Vk`m3A2{1MSmpii@G*k?KDq0GdZ)|hd`8OHep z8@6wv_|9NKNpe*sc#?zZ1S#}*qk{k<(I99u6(QT#>wf9w^u9~9_>;2d20T=^g-;b5 ze9x~fHZ-JL=J`hq-;W{2SgN)&m9RsVo=%?`JYp`pxEA_>`18Y>XA$rfWm^pQfG3MQ zxT^I1*({tZz2}+!5$AyNUE*jiYwu_S8v<#qZS4e!bGGBdY`3RkgLMf%Kz8s-;7PF+ z6w#-FwV#)PiKGR79miXmrDyv=ZTjc)j>N=&h4F+#G;unBZhhZz?a*;8@bi5`fV4)O zuU5pCs;tvRzbV@P5%W5xLI4I+w*^KExeVlzP4kNRGp-wi3g$lf-I|(o`JQ|u^XfkP zcik+g-5~2lG*oHfjLCpfNalFwz=4ZY>$Rc-QGpws&tCfFZUuJDL)3et%ap*$Q=-v0 zgLfsn-&%#+wnox~@)6ppx30sK(UJg1dCAvQF&}DkoPI+uX_wH))iaYvWtl}BtVKpU&MN= z0GdENbhdLgIwL-#_phGK;mZRlk4zq8*)akvV5zRX@jFUmvcr#3p99P@4z@m|bz-)^ zbZl8Wt?hR*z(sEZl;2PaILIG#835i@YoZQ@EwrD9IOBl7BpJX(ilLgcd)KCZAzo^b z6Z{|~=H;$D2dD53tejr_jx7^y-zT{SNZpNjn4+wJQX~K#LcrlKOv=D5xk%QXD{tg; z+xh`PvMV*HC*rF?xyjK5@KsMl5*w`r@wL#r13uFpso~#^oYIFc^&gGNS825eqFttU2_sG%_ z;X8VXD#Ol4X&$2B_Z$*&-)ZIUXf9I%mOOXJ3O%GbGpJfl+9(jY^fF_(b!Gt{{HAA3 zusUOCPDHYT@&*H~7a050c7r-_CaFACp$BXx)5==@fC11Gn|n~~+u@6N-}lvdyl3&6 z<#c_zm0Xp1F!8o2OBbFfgzzC4vno}9XEf40dGaVo;jiwiazo8hZ~iPVD(re=5k;H| zotm286$6nnTeIw>1FY$Ri|t{Lp?o(Fg3g_>|y~Z+16tvyLc@r?t9g7 zBuXyVuu9bC#q`?@OFIhgS)6v^XP@H0ukl2X!RPMsg%`YHMGad z4{VsgxaprFss3X%HbZablb6IdaNdbISVWp7yQXPPn=s7?J9qLEH{4>XAv8}%h&TDg zs()1sh}4at3nL3^%q!?P9BbW80e*ZwU63}CV7pt}gVu;~V6c$9p+*wfhw!zeE-z|V z=k{Ksec2)$Hu&?pRh;*TPk0T$Fc~^oAoBT4q?-Q}Y&3DluXeoMQ0LesTk}pVlf5(I z$dl8;zA0&=L&z*F*H>W7IeiPhTo@P0VTB~vyC2Bm7lCN}t7@NNlKFSHGKkh?z_qij zoYju!#D4b28cdslLdIM5Cmqe&!v^IcRr=qq^?l+P^n@6}fh@)IS81hx)SPAY7osk0)^ulqC1F*{hBNQl+Y}b>XjVXnS_Cc!L zIZ@Jq#mp^E&fKT~t4DM_^S17R@YJ@`(7;zv1mz_Y=~q*Gdg#*yXGxotY=#F|lvhPM zjlE)VHS=8=)njE^c7M|ZiBqARx>9Ib!y91$70iC8jPi$c+ysP}5Q3s`ti&1sx>~oG zI^>^1onS%G`mtq&)cZ15dZ{X^#MOfatyH0I=l%Q)n z7*@kZtC_3?=J_}?_G@?F?UK<0_AhYFclyrS-PkfYhAeVHcF z16x+quy10*2V$A%p_|@C(vlf}j3uY83h(#TSr$(;^8(I={_=YQQWmA9-IlwJv>tQm z=vN-I{TO7X`;qBxwb5w$91YLV?ZD5}pddq(7IdMCH zi>`qAn|#FITi!L5;K!(tYm9r416}Wof}P8~?R9I9Gp(?VA;uQg19MO47*gS7fH*&jBO!+ zA*<^BMccHjJIvGHguBb4a`X z3aZw#!c&Xr8&szD1+gu&;vYfoWo>0Pxfr2%m34tC33fmRbzWF9I_Pqb9nNK@N##9_ z7K)v)des!^owH`MoXY_O?|;^9;comiPx0e78xhnnVvTYt+t+cU1rn_>gaFJsL-iPn)?<9P9cF#4)7q&v+d&6|3G@s-AcJy+m zE&u*GUaMK|x|4GmT(CgBICk`2BP@3rqtjKIRD#uBy}y*d;<>`?W&mGsG;i*_}V&^tlP`%;=g39@jxP z+3lrtg*!i6N;irOpUfKcd;iDl5a`<#kr8RwFm9=^m+ouwwjcXmTB}w5V#9IF^&Bl$ zr1$Ly#cQ<3u86>am9}pk&i%nxu(W&s@>qEDtn_xVtH-_EiQ}iAK4Ssfsdn&L9t=)d z`XOQN7*J)g$Jrtq0=-yeLnHg*23LxYA7$cxz^Yc)I6E-!;{LQwu_wfGw4&MYy7{n< z@{g0Hf)N5gAJKQ1Z&HGPn9x9B7U(m(9K&=+LHAc_D{YdMBZs~x)u1Y8|Oq!`C4(3_9<&$ddi6>R$Nsz z*ti?=jA-Sr_97V}feo+}Lq3-cfpgWR;PLI8s{ve9@?e;2o}0MpquOucipz^DrT}QH z*(<{nLb4h9799hx4&%I8KPj}xcQ}llgcaG1!nRb(PP?m)=CzA4v%6>oOe96H9 zv4mUhw`>V$29k?)$Co>qIqq(~3w4jJ;Hv5(RxjB-j_iEhlF;&|DDC|I8IcT>Vn;RY zhtw5mT0ygXAu=M%{^;GqYuYIMu4H;Mj--5CL}|zMEhOum_o51Y7i|D>$XmUFoe;@1 z%GsTUsKgF4w%-Cr3lg#~h)8;Lk%WQTLBS8r*sE{YBUDw4HU#o}E)8pVIEfWv&14?U z-+Za${OFm=>IA358en)nB5Iaqxw&Xi*ty@uDOX8o2c0tq0^sX>ZXD+Hn|;KY!Omm1 z^%wgf&Zy9Azd?vmU`~zuOOA0{TZ*mAC!_>|avcN83F#c+sFn_6tGo!v?95IUR2bL$ zlO(OlhszqAgy)mNt8PRulC#6u^SL#z-O&@{=_!AzBZ>T4ROorj%fx$A;u8u>saum0ha7p zeHRX-z)PW*@v9bruyAtVI@)PhaEs5kp`xyxTQ`U9$Whwz#z$=U$V|&0w@EfCUS!Ob zACSTE{VeC-0V~ZCpkKq~P4CLgdOeBy>vB+0ZxIt_Cp4aa%vI#LS^K}ui07WNo}5r0 zagMHmq-jqTf-OD<kAvu_ob1mUP%1jxeKqB!1&-)_hP{p74hHE%WM!atyx68j5b zSqwh8aKo|NIOL<2_eiX+iOsRP`{MUt{0iQetB*SL!F_8)_;0f$iJ4(o__4KWuvy_! z8TZ{dTb*rL6VmuN-yl2Z>0glL84u^jAH^DQl}VRI=x0CnuF*|;|My-5aPI;>(mo+m z`nyEOe&k$RG11$vEdDPG7^raBCw|#C*4#pIUoZJNx?4|ZC{)l>+jaSiiJ`GBKf}l) zUk1>%A61hqy!KvfRsM^|u6vwbH5WpfH(I5AdpBAg%rar%zW}nccGxfgRV4&v`tEoGyBq!uz^f zVqWEtxn%j&+Q2Fi$rL)H`M_HExP+?mFyN^){c{JXs{IM}f}p>7lfD zLZ;s)%6a(Ow@`(jP}k~pn@!dv6JhJkZf5UoumHv`g-tcCs)w* z#0sc%t9@Li{p}f*$vg$UiQ*RGZUr=ykDIaxRDU_(QfcURuYrpX*7IQcS$(Buw%VW7 zxaffDgn{-=K@iEh)LlPc3MPzc+qM^>RXr6Y8ASnP&dr6fqmwYILTpmh$E%{Iz%Qz( NZmR35l_G4O{0}dcmS_L~ diff --git a/packages/layouts/src/layouts/TypeDoc/icons@2x.png b/packages/layouts/src/layouts/TypeDoc/icons@2x.png deleted file mode 100644 index 5a209e2f6d7f915cc9cb6fe7a4264c8be4db87b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28144 zcmeFZcUTka`>%_-5TzIqq$xo`r3nZ`iiBRG(z{ZnN$)K|ii-3S5u{fmRRNLEoAh2n z@4X|01dtAA(50@mzH5K?{+)CF+}EWTz2eMdW-{;n-p}WG1C$hCWW;pD1Ox#ad~k9g4`y4!oVfq@3c(iW~uhy*`T7_0aH7`>`EnYuXVq#+YC==3#rnNM4TqqzM zpi2Elr!3hl!ZdK#y0bV+yVc8rwFEtAX3=QlvJ&e-EsBp)Q`0yKXbNuf-yYw7kh0CD z|Flk1UuHgvoR+*QR0ee&IDUfUzE7*`A=P$6nC;BPI@VJs|F#`Xc>X!`<6%M7XXNok zw^unt1h0m>-&2{GiIGsByulr92XZRrazZs&&M3jJintF7A}cE^uW4zt_r81yHt1I! z6-_gmO@78G3$})kfyhR0^qk?zev_%4R$qSjQI3MAg0)9EM#TOAD=_tf(*)S$7yiiR z&5v>wk3Bn**iD9S_I#2%^vi(^O+gpv2i^A);6^AcH%VC>0nH8|O!jN*L<#RtT z@aF9HMNu*d(BdiZq(LBO%(qsjSot+ZXQd{zLYh#CvOrK(?#u+|XYRylqcXOLk=m!) zBp`~~1dg7kF(Q#m)I8ZHMOD5%m&U)5jGOW@7+sm1N+O~^j*zRG;e4x@OteV=T4yo9 zSG`^0j^S)ZYp2DT>}AR|n$S)4FPI#8#(R~;Y**AZ9`&yqT;p`rks7Nhz;)dn-TgXU zw!^Bo@W6|jfp@}ijsSEFo#x3LnG;`o_yXK@2KuG8cTv&K@=dU?_PK*6=YU9!Ix8l;<_!y*Qc2phVpLM}&t|CuHBv&{M$K?VXtTabi(7kUMwV zl!>5cDNNqK6`Br*B~EcVh#5Z!FgiJZBN5nzpC7?UdAc+&AT0ivd;DA2$@YXMPK6=< z+#U~?*!R0i`3uu|#zDrRRN&j-j>ZOu#h-n#7WO^)@0> zCT6a$LGWwFLcPfN=(3#6`*UIS%uIT=LIXV-RbGE&!!+8)q~dkx`l{aKCe1`{J<5&< zlhRo;JX-UC>5)X;mwR+W96`@&ucHp$jIb~B_w_=mH>In?BLume!Wta=`ca+&7~pek zBVD?f5{nelCaje~EtZn+g3%5GJF}R_b`q}IH$Iom2IRD$^h*R)Cid8Q5~4Dzm!P&Q z<`iI)4wA#l@TwjPL)*9k5Vc!!;`9;bf?HRMm86wi9LI8A%*NGep3g11H{aP)>%l2Q zRMMQU!*0J$hJI5Qs3b=6?}qR7O;BU%Yzufc*ZKBV`}ro7zm=C?OY6Vlabc^r6r7P> z?1c^jD{e4n*Ou441V=Pd1eE8utX@)G5gq72HQAXLZ4l2wKd@yIYC+s) z-mu`E`kj=B!)a^B;pecv4W5oh>_tpj>^NU8L*eH4EhcOxQ|);$x(z(Yb5^tudSptV z%8z{(h@_t`chWkvFX=r!p~Vjhf1AdM>uGK05$1fyLb5D7m0!MUKW=JTZv)bXz9~*F z$yP@U3UE0=$;yjWr8b7C(1^oNDMZVxYYeMtL}ZnvQDkm>S0)=r_ugabEZ}AJ<<_Fu z{I^KKIz+V8K|pK811W5r##z8^S*2fr9Ln zlRG?Zzz8;xu9VSE8s+=(!^TGi1P2hC7%7MUqF=cZqFBtJNW9BROV ziv0cjsUmVvsU^X!`1UivK|dy+fSG$3YH8W0`q${`)taBT9jV{Hfh|&RIaJVvqRIFh zC*Rmvl&3*;XcMiJZ-+Mvfe0xN4N?AvJeABnNdgs(BYb!fK5<1)5UvM!Tz4_aojmUX z#Ymoh)m%fN(>6|#*RP~Lxt1?5);w}yT_lftje3sidO&MxNgcMg9@S+>M%s~y)0i`8 zT_+7LrZ~d<7V^K^C^~ast~@nM04^c5dw*&660^p%^R>n4xzd&jo)Y@ z1r=F09>jFOr%wsj^a3;>N!{rvf(qpkAdWM*5IYCsuwNwoJh7;9I$#`T6-NUIEKsiS;OylQ(XY zQtCiR1dyEGJV=~|zaFOEveB&szAVx*wsyuY?hiBGWR{h0!D zv;G`;F9cnib*YxugasrI^%uy@i)>BvC4V8@! zwy5#iHC#Qar(i0EPA3CuMQbaKy4m$CLjLSNwJs!13b%h{&x7479bv{SjC&3?SO&)3 z6q4nRRP(zOfw-mQrmx@Z64~o}GNXa9YCE$vD-(CLseaF%6HH+WZz4 zbRiJ~zAtA6*i9;z!+zZ?9~V0Lr66|Ae;}U1e#6D^hMhB6XJNHZi{t>DgU&jb=#rPK z@s04Hr_SOr%UCRY_SdDuSw^D*Rzre~4PCqgc)DBYam}@G^TxsTqX%w-yWtYU-Q2IX-a2Z4Kz_-yIe`m;x2bY1F?XZoIH=`uW{$R)ICXxqU$- zG#M6s!fDZwUOA_cs|PXe1T@XN3^UdYyR*t}943A1dTvXp!=%8c%)(s)5y@OJ@@%1a ztlq}Uvhfo3^ZO>ZO|NKfu37JMRRmXfJ_*VOBVnxFFmbq!zc%A+R+w|={11?sJpmca zCeCi;;-*yO)ywzKxa#q?E%@U-+LGH4{=2|reRd-Kz*Ps1$u6sPFO>{K9^k2Y!@=h7rZt472^BCU& z|0MZmbh1HlC3#bcjoX#m73R?H>6oW=45{gu0$S>j`v?``ch#0kGur}QbO_gO3XrB- zS4pz-Yrnqqt-k_LE-&~ox9gd#^n&HE%Z~grM;N@Das8-#U304PA$v*rj36j~qQzYN zsX>8?%q9DhpxrWR@M>30YI^WUDh4bcn+*bYn;~zt_g`$3{#G+=lBmWE;j}5e&vlDa zjsdE(Xg^o(Z|3$Tx>~-q5NrZ}^$y0eMd|h`7Y4OWkgF0(Cu&CfJV03AKfzSGBhMU4bqd4kc`qE!CH4Q^FdOCtUHaZW3R&>S}$! zhk=OYL~3fch$-?wa0)OEkynDzJR=vc^vuUQ$hF(>E(q3{7{4uhC^f@bzHUZT>k%%R zsekA}E`OlGE(x+lP1smp0;Ba7{C$F=@Pp~i$AsJkc)x+3Vf9xQB=aSN>D!T;Y5iU~39#6yoQuj6Bj%kdYC z`72YjnSoF_A)d#@S`|;~F|6TOn%b{4?MWJC4uG&NK=D zqd0rU$A@62MtWD$=Gg>TgO6)b6Vf41#Au&Zq<@p1RG!t}NG8kv#>%{bHuCdAeIao2 zkWX{dyO`XCdv`FlK?jS{48~Uaz;oD6PtoFF0u6HBTHCHh<)5wP<r?9UIw%{psu)`l~*PK0?1^oH}d{D_wF{En-ejdBHTK|(*2$K?xVkG zwYXl8^HAjVOqKQj0f6s~O`)Slp+alXd8@#4Iw?pHys|MW1|l%ipCPeN)|fLB$Dc(9s}LNw@?8G{ zU>U(Vid5}ltIy~zNv>o09)rC()g8O`<5~!qF*Z_?L;+2Sy!WSv=}|67mnOPb!A*2; z^f>okkk+f3+9?Tg&6NBMX%;BtB3Ds#(PZ6E4`X0e`~amc=9QGw3J-$!nw6)l1A8;m zFdl>D?g@J3P-41+3N`R32d*Hq0GWj!{3n&rVA)dpcB+|5`XZFFZI1bKA7d;-x=0wt zy;$6nvCJ$_&JDjWa%`LQYq&(6LqBP7G_+`+4$|qk7IlS4wK{qnP-3!yFO%_fw(8(Q(#|htD?ECEYPeT&anf%0GjGQC<0)vR3x=4pq`@gX z{0?*O(e3p_zu@N9G2O%!F8j&|FRhF(c@BWMxZTpdW0xv^K!`2L39%+Hs0#R>a@n-J#u*kF6~?DIhPrUi@$pR0tS?5wF%PE z(-eYCc#{7tVRzd>j~xO&LBPK62xxwmxrdd{N6!G1hfD0H?fV)_B^PBIm|@~CZXnpdaM=<+?&D8Md^RL00JfP zK|cm@`4bB6muuN!Zck2>k+wh^8kM73#1(%6#^TG;42H{?eTC(h^zB32g{Skc%t3Dn zcHX3$TQhR}n9xXCd$?igvlBH@ZU~p4OO*Gf=$@=w?9vYs)!RYa9V@}xVt8Sr4y_!< zGjn5?gnlSKhqS-YW^o#@NScez6I3x{ zv>meTLLYSK!pa+|kqQI8rWST7_)jL~mqQ}Ou*!V2U-g|ZR+pB%Z@w|HnZrV~uY*w?_gMhSp+4fY?hMmdNXYD(iruAlj0&qga8nQ1=c#y* zgYc@oWp>=|LQ+s})zQ5kv*UF?QMJ2|FN1CzjX$x&TwGJ!4VjOiZxVDVz#r28{^WRn z{o1SYRs*^Nt9(ZX`wad=44v--X~h#aROW$yKE=n-VWRfhI&wn|_X6(` z_WPK(bt4Q8gxJ=b%BW_nNj&h;H;2z`{vi`~)tCBk(zGYBp?f;(Ua+^@+rKm53ld9S zPP#A^Wv7>F7c36IAp7(%S716|mr9fnL?n&Q*?OcmX7>@shP*98yVXmJ{1{z!s;@_D zt0}M~j-0t@?)wY>a9PxzCVtBiTKiS1<;-&hv5CHiv=8d$IOnl?aI_>zR3eW}l*}`T zd7%jWK1w(iqAjU37u~dz-4@O^=PWhD7_yL+z1;-hnPx|je;QFR?I_x6McEg|;`Zuf z_}_7>V@hb=%%^H&>8W{N&Ud5bKD%p(B6#&l@nN^wOdQizb`@g}g1c|qGqGr^c>a1w z|5;G!BbS8(8#mlqM+re6&;L0Ba$evPxRGW!koG@-z@*c+8&^U^7Q+0jgUtgB$)Bh)OGD5oa(ju zL&w{}@q-4qVXtvRtXul%gWH0DxXe$&?MN>z2jh1!ElU%a2;fz@xaTyfs`lnr<` zLv5teGAw`KJIh))Wg8JzoRNMyP>X1rhr)=#Y8O6Nf7>}xLS8!@+&6k0h#H>Nn{`&~ z<h^0MI*wtWWT)UGMw#$-to|sCF?yXL$;_=8T>RsAI7ks*W{$R-UI&M5a3{Gda?9J z3PeWSws3vp1$(`F*+<1X7B6hG<6u)lqr|?N&1Up;Si*MeoRFeRNGZa1=`C?4ZaPvJ zuHL9EQ^d$jd1pu9n6iBgWPMtJyxmfJGQf{a*eag-%E@KZ$^*2_&F#h|LL)2_l*QS9(#5T>)&wtE8a=@FF+vG8N zk>*kU^97;}tRP6EGf5HKhlr6@^Nb7N1`_>QnnYF9-8tncspx59kcfE)TtFun#cCjn zEU2;}6Xu~xx+Bv+O;tKLcuo?~kQbcPghcWdz4-^H!wQOhQukRZRMRk>kfMa~V;A;p zSqpR3D87(4X}j4Awfr<~7h4dgK)pzpZf{bn z^yt`yH4+85n%*$3rL0fWi>l^4|J{Qess(a2+0W-O>gl%xIaVi`l9N3Nq}{$Q?o$#6 zP(6};On20~O*x}!V+=9YO)zz4yeTv@_04tEzA@Muc((5aTR+rHpa6@RymHX{a%Ss{ z+ZVey@TSCpCZq6G3WNWPfd3Z(|HlaUnQ37#)!hnd5VH}%lQbK+^qVrFox87bV{eTd zMjY@0wT+?ndYzV$vST&K{gWpow&Zbq;%=a$(B%@MLh@v!P|L4U zgM9JBN_Gb)g+}3@K$8-*b+GGuC&@6v)Fomd?4){kVQ)620*%U<8saNfLM+ndN~1z> zV$;~rU}Fc&M@|;i!@q(ZqbHdoB(EYYOs>u5jd5A-M`}}pr;g+_B5o2kj-|Pa zF8qc!e5d+kUV>;ih=57(*r24g=6@)>+c%LfGLw_-Bbm7r_`az+tag}5rqG&jrg(-W~CJFkaxZTf@_Ofx@ zzxqF#<4|HKKBpc&B9R1r8t{!k_=WNfzbR?aogs939=bT|!c4N>91ai-wsc4|JdG9y zGpB1A4i1ueuSS{R3h}0^YLpx`pB;Ok2-R5 zZzHya))4+|xc0QJ*&1>3;@0$RcgE3M_rt55cZ9<51j!pV&i`8js3v%e$CG{I{X+yj zruhC$iN%UA-Y%u_?FQq!rBg;{`8h`ZCg^bG&OC=733*%4cUW`DPGqp|OgNy?)-Lky zuY7>yw$@M~Jl&X?9MI2RqOdsWZwzFd6{P)UF5-=GVh z;$}}BvAUMs#V{T@TweGxI7dhuIzFqotm&oQreos6)^Nt1G4l8ce%&u1F<%WFM9t;W zBAEtq#1FS}e7Gq{9nzJ-0@1fhx^+w)&5)h+@I@?kv+h4xs>`xqTMB()kR)QH0W6ODL=b|ea)CmcTzPItT=KH66{L4@p}bW9=F z=+(cM#QUgiq$M^X08=_kUPU7sf!8j#4rN7NO0#TX0-;8=ySO&T7v$C}*`++cHZu0; zRv+{Je*j9;z>+TGv1i76Qc^1lu^>XXp&w}t;MzI_nTpY_m?O?J|UF!?x>j)zIZZ*}uTg|S?56^~@P4iEAwq#7&c^D#OmVAeT^&ib{UcAER@k$$X; zQdR$NNz=G^;6|aY!VuP>0e2>_I^ymyjmC*~Oj(aU>lb7XxoNc&mR~HbdffiYw#m3DLJ)nb-vczmSGI=PaP=yOJ4mrW01pSsP02=(ym z!R+#8VFsL>Puje-hBZZ0gY`?oFt44R6Z--pJ~w8q7te$W<+z`WB)mKtrOR>%f~{*2 z8>hh;3|%NPQq8-xDbWw`*n5*Ni7GB0zr7D?q`b1s^a4*X%Jk>EYA*r$va{t*S$Wk8 zL^lqaL9$a?PVadKA#e`-ocbsFKC1awpXsVmMxs^Fnz9Tb*6tD1sa`;k~@OqRo@ub(|hVwu)j^O#EQmIetE!ma(-|!O<`ZRqJb<$^dia$W5ARK;F@n)=G zXY|L|OhQ88G?ay6&;=(qqYF;O$NJ7x1?PPHYJC`UButfql;CF9^Z@N$9e`rgvKY7- zzkY{r^gSjplQ4S;+v7}YOOB)q;im)xJ8Tb}^>Fe{+E{o<&QW1zc~g`vO5=ii`UUW? zZp)~%d!YRLs1P5Gsp1zs3gc8)u&mU&?P*XcG+Tr-__K7L+$}7WQfV_Ngi(tq_9feK zK+m&sYg9Dt?NYYIX6$uOy3OW4i<~fWv+Cf(7LSO2Cy{IK;1#Y8C_5@I{l+TY*=I|v zB849$N`$Qn3)Wezrk#N{(Sj^ujO*o{#sa4oD_O8zmLim4B{5HQWLd}YpB(b z4G-q~15C`KQcuBSO|^7AHPTM2RneHT?`cv7UxhiJ{_{;Q;kGe05x5xg&K3|_>$pD_a&U>aXaI13$(JL50d8Z5nu7>Swu zA*$V;mYnn2)kI5c`a29y*`L60#8U8YzlVb^NVbZO*AIlUcC6{g-vYStoB)oYa(>HrRpU$_+Fu$?E^-+?mgq9i+l>lZ?b zT6(Rs*ytr2RlqzPAC<(}aFaO~EuqFiP9Nk%5YV?9#t-?A=4jtCuRhpfZRc5{uXo+q z=LI8vUYPpMT}NAmAiT1T|Lra-gEjft1a;1k`{Oe~KvJy%Wz~FR@vzsl)Hj`G)zsap zD0(^YuCzHguv&0Ryn%gl!eek+ywQej&`(Qef(ql7EcAYQoG}tAUY=Ns0uhUO05V)*ND z@*NLrHqhR{%JlU-nMJbBbn#Q$0gDOt;1glG|M6dhX@zoq#PRvcMk<`}n-dBYPlDbf zY2&o+<&J4^>4Q557tWSxa)1M;mS}X$!JFe6+N_0AI?erp9CdjDGuyvnelpc04y2u#n8-PU5wo6P&9?ZpnONA+t}Ucy z&nD(V>H%M8avRC7jdV$uW8n|L5W6kw7|(e8$j>_ZLqe`6y!1fWM}{tJ3t7HmzB894QuSOpNj=&WDT3e5Or0)3wFwasb4%9_M@6)K z&l3J-@<{!8U7lZ%P!XZsO|ejU04NSjBEBESP4Ff6+T}!&pxTCxBG{W z{I$5gyC-P##k--2l=5r77AsRg@o4?Q7zqe%7Y9-kbSnK|KDcKK;nZqb@o$i(QzUtW z4FlkIku@T67|OO;)}XWaHSwT$i->~}#O|Bld^q?M%%`d*s2x9BKP zZo$OD?q27J1NAg#Nd(Fn?4I|PbI>nwdR&!F6YOHC^L#n$QG{zQGnjL8QL{~TyS%sy zMT%4c%BbJPXL6?WNg|O1-c<>qUm^=RW`+5)eH2jAI{T^M6-_natW57V(D?*MKT4n;I#vjkQ1Y~X{0hj4% zF}qYRzy8zJX(%d$`X$XgPvDafqM65Qw_;|~(JO*m8-*q1ir0~W4cd`@#KX3_GEp5t z5?rPAGz%$L?%(5dRFgw~R^|tdxXDGF>^=J2drvtC0;nBNt)$2d+>6A}c}i_~ef`fu zywIKq{Tp+H@09h2i{+Dn7?p7~8D%gZ+<(bq<1f|tL;Qy~w3}O7WX))3Ej+(psj!1- zrlt&tNKU|u?sySN{!ByuYY@P5bL5@7&Uld^k~iLzJaP7WDAI|JZrsHHT>hmAC?xw& zC!c!IBNTzL7K;wAXR3vVTe1i(oYdqoy3H0Zw{@>?*4UcFaMCNHwib2efs0(Ync=2q zwM72#(Cn=nv2ablw^j({)fdng^E-(uP|5UD8@CzqpKlZ^=HH}?5{kmM7vLAoAatc; zwH5KZJkkdhh8C1p5+HZgC}LE+Xu}KIn7|*#?;j-8^-VaZ5jOW{JA#*;g5p`(xTiDd zKkPnW*IU@QEsE%-JWbaZU2+aF3<-bfklBU}TCC{E-~c1suP&!}=v`e&X_xF{wro+L zcgxt?1af+ArOGprbI<(>!E99@GkN&7?#q=uz{(bMN@|0qqxcTr07b2;i>k6W8Za(r zOGe?77{mF3SVV_<+hIDRNdbE)(lSDJU|Bf|swOh*8)pQ6AizER8M>1xnN1+Qcqhg$ z&ak{6PD5v75^-mAcvoOH6*!9Hkzpt)*#Ip_vNoGk)^|nj*9+w7+7R(=j4q>aw<4Wc z=nBx)kd4$ER29&>bnknJ`n4)pOczJMPJ! z0)p$AgO&S=`T1(PYN?P}4cSJ%&R?iNexQp^N$*`-AbTP7WfZIW#P4d}}S2|=#O7ke0mzh*aEWQE)y!|#~iGCKXe zpzrFFL$pk!^d8pUI(IfGO<%TTQHsrDXLDNnMC6*d0wT9m7x6Ft7V=_OlTqkuj{x>p z;1kpB_NxE04RdYk)Y!laqUU=rfZJ$T5)`7`QV?5(Ltg_xlECcjtEa{J!@6Brx);>b zl?P)xrifEIfWi;~!Hgrq*7bz~i3BH#^2_mOIb$vnOz3yqef|S?NrX2~aMzcrlIGhJ zJ57YYnbrjk0gMXNJsZ;3!GV3+U0eN7l{dNPN>2^D{M%{F_n#@Jh)M2G9pb6tlT&F# zzc){OFWO&LCDH1cNMGR@X9VA+vt>EiQ|#sD{Y6sIh0eE(T5g#Bhn{L{CgdEL#dtrL zC>~e(BtwcN6QdM$0h>v5cu{@BvleO1d{z*-w8N(k$wHP$AXwvfT1)EL-?E&6nLdTq zFA@*HmwLR__b301zkRRgd(MeG6hCvppG6OwFv=2NKQVx_rQX$Z3q-DFDcOMHtbuC2 zb}=nSGqv$BlXjj(ahhid7ECVPglKaK;z#;LgZZ+OisWYuKBPX7xpErFk*@EYkKqg2 ze61oYkPXBN#&}jK`c6OUoF{pGlCOmyvi0VbqIH)+GaMDJ>Eg{$20?GwP~=nbph7n3wT-iS@IWTjG!q<-}5nJdNKFs75SDJ`2N60FM#00h+c!NU0ufy*_DlHj73t z5%X`Hqe$xxtHUL9%+{FK#XTYqf1a`&Lh=``4pOX3cy239FO^N zfStakz4XYa-?AppcGY?%Pj@WYmLvxBlKhq06UyFTy`Dj|YO2D`3uG#B$$f7PEjp~U zN;XAx*Xx;j?A}%@n)?=Uw67Bf^MPlLUonDdnT0whr^OXyCbtVRp^N&tL4I{~Dg4l+ zvxK9}?_3)Y$>n?i!054VsQ<#MMZ=Q@luen-sz=N_VC}l?`zNJtA`krH?K@>?REBq0S+(}^2UlFWDqHi30Pa~uu05d$T+-JrcJV1?aXOg(}Rs zl`@li5%>|PHxJjZT#h6)u5#ukqU%dvk;$HYi|x;L7naNA&)c1zj7(iIm+BYA&tK7r zwW0zwzaX`x0|CVQVi4}J(N#ScVIBUXBSyY%CN{!aH)SJ(GEwpFU}-yF{d#w05hL=m zqA}!Sf^U&%EPmu~34)ZMEMWZ|Z{ zf+Da%zhehlo-wY?=x^Nensm)O!dR`~B96^wloNE6>dRY#u#pQB(ftm&2{0{aPw);3 zLS~XJegtuFdsZ#-4}Yw<2z1ya*ZublDU*Ut>&i)(l$<$AW-E7gWuf>Kh>nR@=~Jgg zYVeI|2kH%1E@)ScwTRMO*HTWJ!AcdT*o-xoiH_PF%JHNE29RfRx{{W~Mn)HwZeR53 z{~74suQ)4?@;WN79bIYU3yi%hNhnxTu7in4w>kOLA9 z^_cPfyxl`BO^Jaqzdl`|Ez%y3HTE#{dbqX?j$5k&zQxN?z*CZw+vAZV-WEk=-9oI^ zi>;EFv9pBIbUMsM{{@)yaWwa#nUxs`jEZa5y%dJ~ZYpxpbwF;r5KM9NBrtI6bS49Z z{7GcMaXGAxDfXDD;60Li!JF~fHPwUU&ynr@B*@3ChF52>+Zzj(2PL6C2Mor0xpcaX zJz8ihH2PY@>!))WZIW^vV%K*vW$Xw?vcF2|dP9n=qCP9;7B^IZhW=jxJ&T%Ztkc=ADNzA zsx*6uOG(O5$(&<*ti|J7dW)DtZjKZ4%;`A)POZf?A4Jh3X-N5M*8W<2T>+@m+RM zso4=f_o0cfhnM$+auk~mI=kVgHZ;l-+V`UB8DLApLi~fqxxCu82ZpTHwuvkJ zMaL0c$(fK#3^%@^>W3#TVHR`5ZG3y0Clb5K47#1K#yLmQyhW_55~ZZn&H*`)Kcz#xCRQCFdlucHx%dY1wZPf=tL$KK^-_TTkBlg%SX#-AMe8 zDRJaA`0SE_!0FPPn@x{0rimZQd9k+}88MLx`S?6fu6=l1Y@h3fs<=&*q;z=urTS=C zK%}u|(8k5e&Y-zSmoYb|zD$^cY}p6(t?!f9J6m?2>Tc-Xy34Rp*Ug6P;_=3oS~ z%u;Q7%I5MiGqZ{d!-pEl{0|+1NTm+haNN1M^6$Gh!|V@!B;}D{h3pn(C{xBk%}#IR zO1TK6*^j5|!U4^zB>Fw$Ab?>qDPT1M^Jx#~^C&2cPdIB_0;KSVNk9r$##HLTSD_Z& zz)jE%*Gj)7d9uVMl=+HdJ8%e}9%lwaY;_kEvV>UsLHx;mMC@f3lzq5Iv&y8{w)@Z#?E z$bXT?tyF)?<3bugVVY6(e@Vg`2i>|)$^m~$WioLwW}oXXZ}=w;=N0{LOx0{9*as^Bb{)>T@3m+vEip|GPIJDHTEO0j?I58}) z3~@%Q(7?0uCeHM#BsO=kytmWFVcmtD#HF#V$&{e5iF)nW6D|+WjJvd;&5ukcPLykI zL)z_SO#T-IEgtk{E$oT_$8EEJI%wS_Y2C(F)`01pzGC)%N-d}qrB@+6yelt`_?uuN zPMGYZCo678{Kdb+IPo{#IN(js1Ummj@!l19H8oPMb}r|M+d{D&z2T^r|!8rbRwlE=7j zz{QM`99y%o-F!wvWl#jR$l|ML^ohwPPlBQ~Vi{{yBOjvrhl~uf zK5Vk45;70o*YhtM&7#Sc2dfA3wZq@0ZZ6N~v6zg&MzJl<$ZNrwqf-$TiT@#W`2x6Mt;TiS4huyA5^}YIPTFF^l19VciDe9QgSuo770l zz$Fvs?0FY@_UtE2YE##{%dGmgZHHfzsU_`V*H`P4*F`ul(sYs9Jq*h6rbk1>eD34Z{2K;_cLbZ46halLc ze2%NUKU&GA!WwUqG&=coFm>87tCT*F4xGxo74O@5Y3xJVE!8F_1FP%~BdC2FS9Isf zXuW-CnGh!{^D*Drcrxc3Y`W9=5ZVYqn-rEs?8_&q}IoEx+VFS zRga(VCYV$<=Zq#wk?;b+las#o#HsNw*`FGFDeA^*xQuB(cE3~CcEUYt6MjgdL|p=P z2+pPgOZ0Zk#7FPiJV}Wb={;89-U46uTu_QI1&b)P=+se1|88_^!5Um>o)Nj!lfI}_ zA{$}3*734@W4yItj?m zLJCa$`Rn$L_lRPSglt!uro*Wg-e^WHi@NW8q5zxYdq%ULx=%RZ(Ry~zKFHmgD!x8n_+?xj`!7VyZLb@!Ht zcyvx*=Ox|L<#!iwxI;b}HqA-#(_&c7eI; zh0-~Nl>BWL;lGfbd$~ThM~0`;bnAxA&t^Bg46A9F67?ijVTmmSHXl37dKJH@X%pJ( zv;J34-$9e2BLwPjbgdS-#g6)O&a!wuZ-4?=C;(W1fb*oq3F7!&Q;TDT{dSIuAJ0r( zTYW}1z5Y^?(IYRkcvPK{&UNZ!DTD2NG^^l4v6pZ*x!@0~FW+zs*VWLZvD5?b&529v zzAIr#Blpmqud6Eze&qzM(zwET6WE`YFdmz$)SiInkY`uE9 z2W8d!Z|P-BLFnbp3rcnGlI9P_{}G(V#2CJpq^&-OF7u(-e@`ex!`4!J7AZxIWjne$ z*}p)Oo)D;<^YCfczySXZ)mxzJ%Trh$e@@Xs6YI$UjQXTpMM3=OD}yJh-k2t_G}69%^Fr!Z2HQA5*4M*x@spn| zrheG^IKj0ez3X@*QK}PLKen)$lLlOFZ8tSxuEOsfZ4ZBRv~f7a=7}eY0qYvDhVUkw zZOeCWJKZrO(yrm9v!+wYKhPp+8sVTN>nKBQt1)2z7ZTr41?oJxD3UIFa*^`;bD2FhRFQI1$)e-S7>YM&OE5M83i$Yg1gC4XbSB(3HY$XeKc0w~r|t-}85eyvq znGOcAFmP`I@uNFB6D-U3R7zi&HI?4$T$XBCYp7jyF2hIU++&75Z}~Yj0lG(o!Q{%x zle@H4z=iwQ^%fFV}$@P%l|Q*S||Fc=aU(OuYN7&dFa}V3Nc7J*3pGRNHysT zpl1qYqD}+z4udN>1yr0@uF3~3%~hGND|wBbU_IaPN$MmzOSBa(DV?!lmqJAFWhao7 z6XK-N{+v`HO%=al&V4z}>Sa|@+Qf8!nk9bZMS#vdzl+RDih{^-@~-07nqb7URdH*R+DD=7!&A9Oi{-a*?F%R^?_>z|&W zHQ+4C_b)3pp#^K(qJHO8s1UDOMw^aDYOOebgZD{HMbGVDVk$+=PF2;lVmdaX96DD( z2>^x9360&?xbJ=C?ww+GUzY7mi#yf$i@Zi^^Y}?DA8FLB1O|#d@$jX3gICv(QdzlV&8dxsHV(c+LsK>QTvzU6_ zYb0#5dCxZ%c~~}R7+|_=M1NiJ;GL(M6jlh!W$wT&BZz#^;TRxOvOoC5av{aK*jUdB zEJTT7g$OLq7j%VOxq7lBmjswrMs{Cq4i_QLuY?I-R*l_PX%)WEauEF6LE{{cM%g#Z zY=g9-pHTq4-?B_^ws)ot(CdUT(Q;?3ZgB%&0-LSJk}S~oODd0f;gmE$LNlWC)*SZw zTF2tWUDe>}3GAgFzfUW{@fr-5%+TXNF!#@u3xLK#M@{^pJ@RwHxR(mQv$rbM^u)yF zp7gc4+^-scO=w4GnLoUHm&|*G%B4)zdnT-@sLAXD{t?qVWoK?M#QmO7ZDZYumcROM zT0RXq?@|A$uOb2&0IX>Ab9ty?U)lM3)bo7LPM+d~0IDZ9U)9X4Pt|IhEccrc4$Yqg zxN&t9niz^0H@V{LX*57HW5=4LcVn`mZrtz!m-E4LWa#a&|ZE=ZeR z_be>uWC0uQotqmp(+ySAn|+s`Jh^?c#?)U-^^qVEROY9akEY4F$EfL{d=!)6%BG-- zzxb^*e?e$Rf1Wl1QT?k8F>OCoXwv?=Ung`f@oR`*z|{D)G%5h9(2EXaoVg^$f5Zm< zKZTunJXG!9$1R~Oja|ej${K1yXo$j8_FcA;rjQxV!J)?|Gj8yk6(bnRAXg-|KsQuFvOvU}1Q)$#BKFf7rFv3#c^C6nuM& zOO0Gft$Kq{^uZk+fBQMx4ywF#eZ10jN%@}^6Trc3hCtkr5v?qLPeTBZoa}i>5KfE4m^W45!H&tNIy2!R)_bi2pfs)oyorVbu+nl5 ziVqIJzcjU0;LWSXA>n4vmdvWwz`nJ(vB0=#2PO^BiHo&%ecgXrM@U_;#^7aMCflK* zu?J85J`Tl@CXG@Gz9}c1FQwCP4okOwbBpS37P8a>qfV`z9k+`X5YFPzTfu%UP!6y`Fvr_P9?4V5;X6Bf8{U9#rCkAZ zM&uVB!n66B@`9(+a&}!KKRfCf^oQNN+6$^tHoMIK!>*$7-0ZFr=x>*b-P5X-LgxBY zo2Ug*pNH%q>8qqJmtk=~7g&DYcueN3PcuE3&z~%j0gUYgSS9wn57tV0QdV~{+bxEnx{U^j4&k6Tg_t{mX$_Yq$xe=@q|jc4#`MB^ zJT!tidMB9LT+XqKk3JFN=!_dS0?dknKn##1>;EeT2o)}9LyEIBz=e4SFuw9d_vq)Y znKx|vFBXdWkaNz_)-AYMGNnQ9zLj_f%C}~7N!N>u)Lf+CfEIdIU7czh$QbcAide4T zZQJy*?<2fUv(SP%PV21I_X1kz7G8vO5oI)0xCIvcYt6{A`!}bwQlGSad^&0sE+dig ztCN-J!D2iYgG*FJ2{BPzy1^u&y=FXDd67a8y7BGP|L)Sh_Z*1ci7meUFD~utdnA|k z%FkshXa7&|yHfQ-cZaL9*88w++@nx&uAPsEVL*=wVw{~gi>(snR7!xUfN3m@nIRqe z$bxi@pG5F$L=in`nIEOo82`J5h_9j*7~_4)pr(1ea&G+SOCoJiMKDK#1^!`Tmo zu(KAj$s(@Ez}~eSFWD$y#q zslU<&-b60sArh0MhfMd8Ut(rM_CQZ8FfKQivy3;fi)0|#R9eO4o~zDAw8`&mCJBRl zL+V<9>B#dX+=Ch6E=t$PUla#aJlOiq<<`$o@7t~|m@_8YX~f5JPr8|q*x0k}KKaw) zlj4s{p!Bb0(O2I@&cJP`BT4v(=^IBCC}>G;6Pl`dvTGO(u1uHZFzBch#Oi5#?{oUA zMDhff&?FU9`${$qfOt^aXNUDLXp}!L8o++(*YdqI@rZ`e_9q$WGiZtk%BdwBGNUQLOvKhbHU?bZL0ypyF6t66gl zm;}?$LvW7=cpykxJulrHg1_Tybvk9?!FUgQFW7)ZjiG5RKh5P)A-N+a_IR~*prd%Jub(3dwV#iE zEZRnitmR!zrZDwcFZbI$fi zpQ#2NyF^|ZZxhg}_2{p|uY5RbnD8K6ZJ*(Qw2)?}wekp&yaRA|Qo#DxsS?SeI+jqSMG)is9$_pX3e;QRCk`w z6Eyf}-+>ptnm-5fB$ja02cI*FiDNlWz6!au(Hs}CGqc@Mmic~|=QFFJrG1@1hjtXy z4~e%c+1cVu*QrSvt}^-J7&3CYOFA(;0v#pDtP1!!v4p;BvW*`n{US>q(dX{NUrV`ti>sUd7L3MP0-oP`aRTgYw5brGKhov{JH8&ZnR)OJ2X6Hj z*N%E-g5%w9Tu(o3p@Ox209&F)dqM|)8ypzq@>_T7)U{4lXM#FbS?FxaC!G^bZMM9+ z4tmuQbQP|}fWbv^^L6{ks3C9Ej)`TTPs7Rx%f;*+b8A$!FHS$N0rHb7YlE-;Os=Pr zQ{twGcgc=sfxFbo@AZ<0v(i)mIIN>SayZmhz4f%!>5C|cW!)L%h17s1v)z*m@qbN( zLIG`HP@`-xc!<{bo61SZlQWVZ1OuYl!Sb-gF-ru;V-o?-65R4%f%6Z;4dlCb<*tm4 zT`7ejX`!VvI;>13$7YHQz%+8p7l(Tpo$_JB4f^W={o?Bv;zK3iLCjqj{gvE5lo;fd zHH{q|VzJ(ecLFb~dW44K((lhkhDQ$2inQ@ZcRq7Y>-^*1b>gOVEt)4}ovdHpbt^K@ z|3sf`Dm|bJwcZkK{pP34+PPS-&Y(HzYpQh%%*U0(ohJ^qYv&SPhZse79v3M#nTUb? zTTjUjU*9&)0S1{kUx6pKuPYG_c~z}evFZy5xUz{>?k8wd2OGRLnS6!W@2E;KWyJGkUt&UFTh*2NVjj=kW%jj~V001z!4 z=ACav4hf=_2vC25z)FK{a-HCIF%1b@(>NH^N7$**yWUBYO61yA32R`g-kGrQqT2&s zZ1aW~`>zx~03Uhl@0bL?Vul+mpc)cp64nzfU1rpi*eG&?8WU7Xl4Pf1!!_iKpK_${ zC;xLY0h})InNl8x8hkL6Jpz7odsa%}^mCw|17HWPhf{dC+kQ}x((i~n?<}jL=p9a@ z<9^KPtHyuVYuBL`*B7H;P2iVO8ICwx_P&$c40y;=GC7R)u@F`J-|`;#me&bZ9#xFU zJg^Th!=rFfc{Bw+ujIxWBM>U0T(6i0?6X&W^QWn?a#<*foA?<)RQJ+am_wkw5~pN- z7sfTpB>PChT4dEn1d;2VMl0o-hg^bZeAQZSZ%fT*?fK_jkzO;p1^Kn_+yjstFP#ra zNvx;BrMYSMj?`B;0sS zFuJaW4L~Ou?IWxSIxyrDP0$laaSx}5DtUOzHO?=y^m2JYfcOG)&~ws}entE=bCT7$ z=#rYt?lU1eR^i}WaqU8Z0rKPflqR^`l!q|k(Zo+khOK+ubx;hXEPh&3dhXVaKhK_5 zEWuW;iN*%L+&b5&xM}Dl-pY8w8~S%KsSYAxoEeE0RatjS6)vupzw^Mi4zR4J9^a9vEO zGsL1|=&T;B!-Hc|XANCOT4+&_Am}oQeN;)!5I#Ng%dGfD89Z`xzBJfQ5Uq?0g3AeUS9@IhE|>w~}OV)8>HvkoV#COPN{LT#vk8 zt2Z)j@{a(~lW*kv*4-rOL6sffa^(OAYdJ-0AsgF9gwSQe2wH&X@4yh*TSHt#%TNt1(?*1p$1*$&WoXj%(3D- zcQ5QJ#PkYUg9UjMs?vZCI$TX&{X=JmqECeM2>uCx|CpLx$`!gYuDe(vVX}YRkFG^k zURe>tw{_d=^mg9nvS?KtpkI=2?(iG$tPXR5QosdvzxGoCt z$$I=Gfzpq+2F3?10L^~%hk|tHo!byiu28i+0-PzrVDKCekd-_eW}(>Fp}Ancc191J z%LV{ozGVXd7!U|yD)X?cRj`u12B#u~Q22#>5x;tCwV54R+A8Kzk+(poe&f<5a*v*K zT2oU&Cy_LPGej(sedjw!v3{YylrY}sxYF)>cfp<-T!xEu)CFu&YJe?D)I%N!%*L!8 zEi#ZVi4r-oMksMF`zOoUUiq(+KVL}Vgk4zs|M2{i%LBzJSShuf5=6EJK+gfbJ})q= zG0GhyJ>s|)s`}>jgj5{06DiB8;CT5#UeEFuCDRNU65yFEh+SOUYPR?{idoz^hcctc z&442k_wYk5d(L7ZTKmy)4^n0o##7c6!_jl_B86&KbNSP0;&tq_AS1DeI66n%PR*pX zi2%0k-ZNP@3`AaRb)vJ?W}XEv*Z1a+PPd6tY;c0IY-s0=Iw-*C*soU) zC=bBofdMQRHt;f`m;%bDO+Q@6&hS8dvdDDe(V_H-k2t&!J`FL&9w2#0bHLqd5+>n8)4e;ua%TPUO&4#d!TjvD`IHe+m+wqABkj zoNs5r+GI!s>cQZx77EF%7%V;lk~d43R$%h9**@|sc6SSR>J07Anld(@sT0nyR>Qu_ zPhkc@Fj;M*AKsf3%f|p*H1HyY%3g7T%cCKt?y8k0=-`j0laL`{!mVH11jZ{=3)Zbo z21^05#asw*jiv?Hew&@KV*;teNz-jz?UZ2y0k!l8DBW^9Rj~0!uD>Ft|27Lg;_|N} z*?vvL_xnuig>$EG@^@kLoJ?zdbt0stXU1YVLJO_W zCv!h-*}a>}{Q3SZv`DX6-2%p&B;T>R%A72KsxXP5VK54m2trhI`mBmx(#zV{ zInu6zS{==2l?XBO^i7UsOK?Fk{?ekyEXECjxn| ze`kRpJim|8Q}?3d(XG1>vcoX%zs<(_g-QWYTElLe@&5AL%%^F!{2#PFiop zRz~d(ix56>b@e=g)qGNk>2`{de6Q_WxRCIF*6yQFR#bxy#Qy{EQ~~2n-V>tkL{`UY z&0Rmmuj2DpeT)jObl<7A@des_b`d1V25nwoq~e9M<^f>hHSU>co8g(*{m}-YwofiI z-mkS=3Wl~O+8MFVW{YqX8E6K**_pPc`QNK@m~X8Hg&Kle5qX4L!dd6!IWdLU*Nlkc zGiH(n$H6or(h^BfuCPB&?kP`30z;2(u1 zR+FQfD9dIbldYlRvSLo87bRrF5U656yei7F$Z+uFv&!-!9(3wD{QY)By0oUJmuQ{- zU}FV=;Y7LSZ1uxnRdzVY10dxWlIkcKoJet_HxrwC@n~W6^hFyQekJ5|pV<4XQj zka1?kZLfD%g`ld(`_Jln6>AAWt9jnwML-$NI@O($<9KJ{W`C%l?Zl4-L0J7Mr!-?21u}Dy5k;D zu}!eeZ*3?R;L}9xDghYu?{zNJxF-U5o>7it>+~T~$v2ua{;7P)^J*yJ6~TT02(a@l_L<@JIZo3wOYJ9t9BNNUnvpIZ184_1fah;Vh@r1saB z^4y@`7jq3dxmVlsiow+%)C~5)FovY6v>3pvw$J%t@r@7cp&Ec@j$@T1u-i81-!`X5 z*u0~!^hDZq+7k7};*;b~0?h1x(q(|(>8OIVD1hr(THoGWk=iwDyIPzQf69sA=(J+o zn#EcLV}QPlry2xM(Oe*&QuTxz|DO({_ui&T9ig&XSsUK?V&dy)5>MGnr6uw&*J)SR z4O5d0C2t!+(VG{Y3fFU3G4!F~;z`0^Zy$VT zlJGjGSF&$3BUtfc03n5Fp1KQfb~InA&8`q*1q&GG=||Hzpy6L2H1f*;LpyQht{w?} zDZ2kUk>FaSr)>&iD|Z|7sH6U!z%}z@JhB~OedrN<`}Lfq^UV}Y43>cn?*zZ0AOM2< zpX5w(`QSQaEYTvqHz~=NXHUjQf0o%dBkQfeAN31lR&xxOEgYHTdZp%bVXN280=Ana z^M=FH$n=5rl?&BI)^08Qe_`>YwGkkoEIR+Kv^%~Pb0k^b?3|sA#qp8cs#eTueeM2Q zRw=0&M&6mX$~YF!Y0ZBc@63#c7`f!9BKSXd@Voc{RoLU+XN*d^;RK${8T?=LBS%Bk z&gk ( - -); - -export const TypeDoc: React.FC = ({ - BackLinkProps, - SidebarProps, - FooterProps, - meta, - children -}) => { - const Sidebar = ( - <> - {BackLinkProps && ( -
    - -
    - )} - - {SidebarProps?.helpLinks && } - - ); - const showHero = meta?.data?.pageType === 'root' || meta?.data?.pageType === 'index'; - const SecondarySidebar = meta?.data?.sidebarNavOptions ? ( - - ) : null; - return ( - }> - } - > -
    - - {showHero && meta?.data ? ( - - ) : null} - {children} -
    -
    -
    - ); -}; diff --git a/packages/layouts/src/layouts/TypeDoc/style.css b/packages/layouts/src/layouts/TypeDoc/style.css deleted file mode 100644 index 2199bf03..00000000 --- a/packages/layouts/src/layouts/TypeDoc/style.css +++ /dev/null @@ -1,689 +0,0 @@ -@import url('./icons.css'); -:root { - --color-ts: #9600ff; - --color-ts-interface: #647f1b; - --color-ts-enum: #937210; - --color-ts-class: #0672de; - --color-ts-private: #707070; - --color-link: var(--color-light-navigable-link-regular); - --color-panel-divider: var(--color-light-neutral-foreground-low); -} -.dark { - --color-ts: #9600ff; - --color-ts-interface: #647f1b; - --color-ts-enum: #937210; - --color-ts-class: #0672de; - --color-ts-private: #707070; - --color-link: var(--color-dark-navigable-link-regular); - --color-panel-divider: var(--color-dark-neutral-foreground-low); -} - -.typedoc body { - margin: 0; -} - -.typedoc h2 { - font-size: var(--fontSize-s140) !important; -} - -.typedoc h3 { - font-size: var(--fontSize-s110) !important; -} - -.typedoc h4 { - font-size: var(--fontSize-s80) !important; -} - -.typedoc-api-page .tsd-typography div:first-of-type h2 { - margin: 0; -} -.typedoc-api-page h4, -h5, -h6 { - margin: 0; -} -.typedoc.typedoc-modules-page a > h4, -.typedoc.typedoc-modules-page a > h5, -.typedoc.typedoc-modules-page a > h6 { - display: inline; - margin: 0; -} - -.typedoc .container { - margin: 0 auto; - margin-top: var(--space-vertical-x6); -} - -.typedoc .row { - display: flex; -} -.typedoc .row:after { - visibility: hidden; - display: block; - content: ''; - clear: both; - height: 0; -} - -.col-4, -.typedoc .col-8 { - width: 100%; - box-sizing: border-box; -} - -@media (min-width: 901px) and (max-width: 1024px) { - .typedoc html .col-content { - width: 72%; - } - .typedoc html .col-menu { - width: 28%; - } - .typedoc html .tsd-navigation { - padding-left: 10px; - } -} -@media (max-width: 900px) { - .typedoc html .col-content { - float: none; - width: 100%; - } - .typedoc html .col-menu { - position: fixed !important; - overflow: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - width: 100%; - padding: 20px 20px 0 0; - max-width: 450px; - visibility: hidden; - transform: translate(100%, 0); - } - .typedoc html .col-menu > *:last-child { - padding-bottom: 20px; - } -} - -.tsd-page-title { - padding: 0; -} -.tsd-page-title h2 { - margin: 0; -} - -#tsd-filter { - position: relative; - display: inline-block; - height: 40px; - vertical-align: bottom; -} -.no-filter #tsd-filter { - display: none; -} -#tsd-filter .tsd-filter-group { - display: inline-block; - height: 40px; - vertical-align: bottom; - white-space: nowrap; -} -#tsd-filter input { - display: none; -} -@media (max-width: 900px) { - #tsd-filter .tsd-filter-group { - display: block; - position: absolute; - top: 40px; - right: 20px; - height: auto; - visibility: hidden; - transform: translate(50%, 0); - } - .has-options #tsd-filter .tsd-filter-group { - visibility: visible; - } - .to-has-options #tsd-filter .tsd-filter-group { - animation: fade-in 0.2s; - } - .from-has-options #tsd-filter .tsd-filter-group { - animation: fade-out 0.2s; - } - #tsd-filter label, - #tsd-filter .tsd-select { - display: block; - padding-right: 20px; - } -} - -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel.tsd-index-panel { - margin-top: var(--space-vertical-x6); - border: 1px solid var(--color-panel-divider); -} - -.tsd-index-panel h3 { -} -.tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; - -webkit-column-gap: 20px; - -moz-column-gap: 20px; - -ms-column-gap: 20px; - -o-column-gap: 20px; - column-gap: 20px; - padding: 0; - list-style: none; -} - -@media (min-width: 961px) and (max-width: 1280px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; - } -} - -@media (min-width: 601px) and (max-width: 960px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; - } -} - -@media (max-width: 600px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 1; - -moz-column-count: 1; - -ms-column-count: 1; - -o-column-count: 1; - column-count: 1; - } -} -.tsd-index-panel ul.tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; - padding: 8px; -} - -.tsd-index-panel a[class^='tsd-kind'] { - color: var(--color-ts); -} -.tsd-index-panel .tsd-parent-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-parent-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-parent-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-kind-module a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-is-private a { - color: var(--color-ts-private); -} - -.tsd-index-panel .tsd-parent-kind-interfaces a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-parent-kind-enums a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-parent-kind-classes a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-kind-modules a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-kind-interfaces a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-kind-enums a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-kind-classes a { - color: var(--color-ts-class); -} - -.tsd-flag { - display: inline-block; - padding: 1px 5px; - border-radius: 4px; - color: var(--color-dark-neutral-foreground-high); - background-color: var(--color-light-navigable-link-disabled); - text-indent: 0; - font-size: 14px; - font-weight: normal; - vertical-align: middle; -} - -.tsd-member .tsd-anchor + h3 { - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind='Interface'] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind='Enum'] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind='Class'] { - color: var(--color-ts-class); -} -.tsd-member [data-tsd-kind='Private'] { - color: var(--color-ts-private); -} - -.tsd-panel { - padding-left: var(--space-horizontal-x4); - padding-right: var(--space-horizontal-x4); - border: 1px solid var(--color-panel-divider); - box-shadow: var(--shadow-light-elevation2); -} -.tsd-panel.tsd-member { - margin-top: var(--space-vertical-x4); - padding: var(--space-vertical-x4); -} -.tsd-panel.tsd-typography, -.tsd-panel.tsd-comment { - border: none; - box-shadow: none; -} -.tsd-panel.tsd-comment { - padding-left: 0; -} - -.tsd-panel:empty { - display: none; -} - -.tsd-panel > h2, -.tsd-panel > h3 { -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; -} -.tsd-panel table { - display: block; - width: 100%; - overflow: auto; - margin-top: 10px; - word-break: normal; - word-break: keep-all; - border-collapse: collapse; -} -.tsd-panel table th { - font-weight: bold; -} -.tsd-panel table th, -.tsd-panel table td { - padding: 6px 13px; - border: 1px solid var(--color-panel-divider); -} -.tsd-panel table tr, -.tsd-panel table tr:nth-child(even), -.tsd-panel-group { -} - -.tsd-panel-group > h3 { - padding-right: 20px; -} - -.tsd-signature { - padding-left: var(--space-horizontal-x4); - padding-right: var(--space-horizontal-x4); - padding-top: var(--space-vertical-x4); - padding-bottom: var(--space-vertical-x4); - margin-top: var(--space-vertical-x4); - margin-bottom: var(--space-vertical-x4); - font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; - font-size: 14px; - overflow-x: auto; - border: 1px solid var(--color-panel-divider); -} - -.tsd-signature.tsd-kind-icon { - padding-left: 30px; -} -.tsd-signature.tsd-kind-icon:before { - top: 10px; - left: 10px; -} - -.tsd-panel > .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signature.tsd-kind-icon:before { - left: 20px; -} - -.tsd-signature-symbol { - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; -} - -.tsd-signatures .tsd-signature { - margin: 0; - transition: background-color 0.1s; -} - -.tsd-signatures .tsd-signature.current, -.tsd-signatures.active > .tsd-signature { - cursor: pointer; -} -.tsd-panel > .tsd-signatures { - border-width: 1px 0; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { - left: 20px; -} - -.tsd-kind-icon { - overflow-wrap: normal; -} -.tsd-signature.tsd-kind-icon:before { - mask: unset; - -webkit-mask: none; - background-color: unset; -} - -ul.tsd-descriptions { - position: relative; - overflow: hidden; - padding: 0; - list-style: none; -} -ul.tsd-descriptions.active > .tsd-description { - display: none; -} -ul.tsd-descriptions.active > .tsd-description.current { - display: block; -} -ul.tsd-descriptions.active > .tsd-description.fade-in { - animation: fade-in-delayed 0.3s; -} -ul.tsd-descriptions.active > .tsd-description.fade-out { - animation: fade-out-delayed 0.3s; - position: absolute; - display: block; - top: 0; - left: 0; - right: 0; - opacity: 0; - visibility: hidden; -} -ul.tsd-descriptions h4, -ul.tsd-descriptions .tsd-index-panel h3, -.tsd-index-panel ul.tsd-descriptions h3 { - font-size: 16px; -} - -ul.tsd-parameters, -ul.tsd-type-parameters { -} -ul.tsd-parameters > li.tsd-parameter-signature, -ul.tsd-type-parameters > li.tsd-parameter-signature { - list-style: none; -} -ul.tsd-parameters h5, -ul.tsd-type-parameters h5 { - font-size: 16px; -} -ul.tsd-parameters .tsd-comment, -ul.tsd-type-parameters .tsd-comment { -} - -.tsd-comment-tags dt { - float: left; - padding: 1px 5px; - border-radius: 4px; - color: var(--color-light-neutral-foreground-high); - text-indent: 0; - font-size: 0.8em; - font-weight: normal; - border: 1px solid var(--color-light-neutral-foreground-mid); - margin-right: var(--space-horizontal-x2); -} - -.tsd-comment-tags dd { - display: block; -} - -.tsd-comment-tags li { - margin-left: var(--space-horizontal-x13); -} -.tsd-sources { - font-size: 14px; - margin: 0; -} -.tsd-sources a { - text-decoration: underline; - display: inline-block; -} -.tsd-sources ul, -.tsd-sources p { - margin: 0 !important; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -/** Latest */ - -.typedoc dd { - margin: 0; -} - -.typedoc a { - display: inline; -} -.typedoc p a { - display: inline; -} - -.typedoc a.tsd-signature-type { - display: inline; -} - -.typedoc .lead > p { - margin-top: var(--space-vertical-x2); -} - -.typedoc .tsd-type-declaration { - margin-top: var(--space-vertical-x4); -} -.typedoc .tsd-type-declaration > ul { - margin-left: 0; - padding: 0; -} -.typedoc .tsd-parameters { - margin-top: 0; -} -.typedoc .tsd-parameters .tsd-parameter > div { - display: inline; -} -.typedoc .tsd-parameters .tsd-parameter > div a { - display: inline-block; -} -.typedoc .tsd-parameter, -.tsd-declaration { - padding: 0 var(--space-horizontal-x4); -} -.typedoc .tsd-type-declaration a { - font-style: italic; - text-decoration: none; -} - -.typedoc .tsd-type-parameters-title, -.tsd-parameters-title { - font-style: italic; - text-decoration: none; - margin-top: var(--space-vertical-x4); -} -.typedoc .tsd-type-returns-title, -.tsd-returns-title { - font-style: italic; - text-decoration: none; - margin-top: var(--space-vertical-x4); -} - -.typedoc .target { - display: inline-block; - margin-top: var(--space-vertical-x4); -} - -.typedoc footer { - padding-top: var(--space-vertical-x1); -} - -.typedoc footer:after { - content: ''; - display: table; -} -.typedoc footer .tsd-legend-group { - font-size: 0; -} -.typedoc footer .tsd-legend-group li { - padding: var(--space-vertical-x1); -} -.typedoc footer .tsd-legend { - display: inline-block; - width: 25%; - padding: var(--space-vertical-x2) 0 0 0; - font-size: 16px; - list-style: none; - vertical-align: top; -} - -.typedoc .tsd-parameters > .tsd-parameter { - margin-left: var(--space-vertical-x4); -} -.typedoc .tsd-parameter-signature > ul { - margin-left: 0; -} -.typedoc .tsd-index-section { - padding: 0; -} -.typedoc .tsd-index-section:first-of-type { - padding-top: var(--space-vertical-x6); -} - -.typedoc .tsd-index-section .tsd-index-list { - padding: 0; - margin: 0; -} -.typedoc .tsd-index-section ul:first-of-type { - margin-top: var(--space-vertical-x6); -} - -.typedoc .tsd-index-section .tsd-index-list a { - padding: 0; - margin: 0; -} -.typedoc .tsd-index-section h3 { - margin-top: var(--space-vertical-x6); -} -.typedoc .tsd-index-section:first-of-type h3 { - margin-top: 0; -} -.typedoc .tsd-panel.tsd-member h3 { - margin-top: 0; -} -.typedoc div.tsd-typography { - display: inline; -} -.typedoc :not(.tsd-member).tsd-panel:first-of-type { - margin-top: 0; -} - -.typedoc .tsd-index-group .tsd-panel.tsd-panel { - padding: 0 var(--space-horizontal-x4) var(--space-vertical-x4) var(--space-horizontal-x4); - margin-top: var(--space-vertical-x4); -} - -.typedoc .tsd-panel.tsd-type-parameters { - padding: 0 var(--space-horizontal-x4) var(--space-vertical-x4) var(--space-horizontal-x4); - margin-top: var(--space-vertical-x10); -} -.typedoc .tsd-panel.tsd-hierarchy { - padding: 0 var(--space-horizontal-x4) var(--space-vertical-x4) var(--space-horizontal-x4); - margin-top: var(--space-vertical-x10); - border: 1px solid var(--color-panel-divider); -} - -.typedoc.typedoc-index .tsd-page-title { - display: none; -} - -.typedoc .tsd-member a[data-tsd-kind] { - color: var(--color-ts); -} -.typedoc .tsd-member a[data-tsd-kind='Interface'] { - color: var(--color-ts-interface); -} - -.typedoc .tsd-index-panel .tsd-parent-kind-module a { - color: var(--color-ts); -} - -.typedoc a { - color: var(--color-link); - text-decoration: none; - display: inline; -} - -.typedoc a:hover { - text-decoration: none; -} -.typedoc li > div { - display: inline-block; -} - -.typedoc.typedoc-root-page .tsd-panel { - padding: 0; -} diff --git a/packages/layouts/src/layouts/TypeDoc/styles.css.ts b/packages/layouts/src/layouts/TypeDoc/styles.css.ts deleted file mode 100644 index c1f975c1..00000000 --- a/packages/layouts/src/layouts/TypeDoc/styles.css.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { style } from '@vanilla-extract/css'; -import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -export default { - columnWrapper: style([ - style({ - display: 'flex', - justifyContent: 'stretch', - width: '100%', - maxWidth: '1440px', - marginLeft: 'auto', - marginRight: 'auto' - }), - responsiveSprinkles({ - paddingLeft: ['x4', 'x6', 'x6', 'x6'], - paddingRight: ['x4', 'x6', 'x6', 'x6'] - }) - ]), - - contentBody: style([ - style({ - zIndex: 2, - flexGrow: 1, - flexShrink: 1, - // We're letting flexGrow do the width calc here, so as long as - // the width is smaller than the space the layout will be correct. - width: '1px' - }), - responsiveSprinkles({ - paddingTop: ['x10', 'x10', 'x20', 'x20'] - }) - ]), - - sidebarHeader: style({ flexShrink: 0 }), - - wrapper: style({ - width: '100%', - overflow: 'hidden', - position: 'relative' - }) -}; diff --git a/packages/layouts/src/layouts/TypeDoc/widgets.png b/packages/layouts/src/layouts/TypeDoc/widgets.png deleted file mode 100644 index c7380532ac1b45400620011c37c4dcb7aec27a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoH8@y+q^jrZML>b&o-U3d6^w6h1+IPUz|;DW zIZ;96kdsD>Qv^q=09&hp0GpEni<1IR%gvP3v%OR9*{MuRTKWHZyIbuBt)Ci`cU_&% z1T+i^Y)o{%281-<3TpPAUTzw5v;RY=>1rvxmPl96#kYc9hX!6V^nB|ad#(S+)}?8C zr_H+lT3B#So$T=?$(w3-{rbQ4R<@nsf$}$hwSO)A$8&`(j+wQf=Jwhb0`CvhR5DCf z^OgI)KQemrUFPH+UynC$Y~QHG%DbTVh-Skz{enNU)cV_hPu~{TD7TPZl>0&K>iuE| z7AYn$7)Jrb9GE&SfQW4q&G*@N|4cHI`VakFa5-C!ov&XD)J(qp$rJJ*9e z-sHv}#g*T7Cv048d1v~BEAzM5FztAse#q78WWC^BUCzQ U&wLp6h6BX&boFyt=akR{0G%$)mH+?% diff --git a/packages/layouts/src/layouts/TypeDoc/widgets@2x.png b/packages/layouts/src/layouts/TypeDoc/widgets@2x.png deleted file mode 100644 index 4bbbd57272f3b28f47527d4951ad10f950b8ad43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xe12~w0Jcmn z@(X6T|9^jgLcx21{)7exgY)a>N6m2F0<`Rqr;B4q1>>88jUdw-7W`c)zLE*mq8W2H z-<&Jl_Hco5BuC5n@AbF5GD82~-e8-v=#zCyUX0F-o}8pPfAv`!GN$ff+TL<~@kgt} z62eO?_|&+>xBmM$@p|z`tIKEdpPf8%qI>4r7@jn<=eta*{3~?g(zz{Ke9zc-G^gr? z-7foa?LcS!hmbwzru}ICvbWLlW8;+l-}!^=c32!^nV`+`C*;0-*Y%l94pC;Cb3GXz zzSf%a!{gVr{Y_lVuUj+a)*Ca+!-Hu%xmP&&X-2CuANY8^i{D7Kg6qzP zXz_ps9+lN8ESH{K4`yu&b~I>N9xGlE&;2u*b?+Go!AhN?m-bxlLvtC#MzDF2kFzfHJ1W7ybqdefSqVhbOykd*Yi%EDuhs z4wF{ft^bv2+DDnKb8gj1FuvcV`M}luS>lO<^)8x>y1#R;a=-ZKwWTQQb)ioBbi;zh zD!f5V)8581to1LL7c9!l^PSC$NBPYif!_vAZhmL4)v4U)4UsrLYiH_9rmQDd?)(e5 z^pcH>qvBg*i0dus2r*mp4;zKvu=P#s-ti;2obl`NjjwoYd>e(oo#j_uyRb<7Pv^If zzZ|mGHmV)8^tbO%^>eqMw(@7(&3g{jEp-Najo7V75xI_ZHK*FA`elF{r5}E*d7+j_R diff --git a/packages/layouts/src/layouts/index.ts b/packages/layouts/src/layouts/index.ts index 9017d167..2d935fbf 100644 --- a/packages/layouts/src/layouts/index.ts +++ b/packages/layouts/src/layouts/index.ts @@ -4,5 +4,3 @@ export * from './FullWidth'; export * from './Landing'; export * from './Newsletter'; export * from './Product'; -export * from './PythonDoc'; -export * from './TypeDoc'; diff --git a/packages/layouts/src/types/index.tsx b/packages/layouts/src/types/index.tsx index d9f3b45f..67d6e132 100644 --- a/packages/layouts/src/types/index.tsx +++ b/packages/layouts/src/types/index.tsx @@ -1,20 +1,24 @@ import type { ReactNode } from 'react'; -import type { Breadcrumb, LinkType } from '@jpmorganchase/mosaic-site-components'; +import type { LinkType } from '@jpmorganchase/mosaic-site-components'; import { FooterProps } from '@jpmorganchase/mosaic-site-components'; export type LayoutProps = { + AppHeaderComponent: ReactNode; + BreadcrumbsComponent: ReactNode; + FooterComponent: ReactNode; + DocPaginatorComponent: ReactNode; + SecondarySidebarComponent: ReactNode; + PrimarySidebarComponent: ReactNode; children?: ReactNode; className?: string; ToCProps?: { items: any; }; SidebarProps?: Pick; - NextPrevLinksProps?: { next?: LinkType; prev?: LinkType; }; - BreadcrumbsProps?: { breadcrumbs: typeof Breadcrumb[] }; BackLinkProps?: { label?: string; link: string }; FooterProps?: any; layout?: string; diff --git a/packages/loaders/README.md b/packages/loaders/README.md new file mode 100644 index 00000000..68657d24 --- /dev/null +++ b/packages/loaders/README.md @@ -0,0 +1,13 @@ +# Mosaic Loaders (Server) + +`@jpmorganchase/mosaic-loaders` contains Mosaic loaders for content served by Mosaic Core. + +## Installation + +`yarn add @jpmorganchase/mosaic-loaders` + +## Criteria + +The criteria for code within `@jpmorganchase/mosaic-loaders` is + +- Should only export server side code diff --git a/packages/loaders/package.json b/packages/loaders/package.json new file mode 100644 index 00000000..fc1ea562 --- /dev/null +++ b/packages/loaders/package.json @@ -0,0 +1,48 @@ +{ + "name": "@jpmorganchase/mosaic-loaders", + "description": "Mosaic - Loaders", + "version": "0.1.0-beta.89", + "author": "", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git@github.com:jpmorganchase/mosaic.git", + "directory": "packages/loaders" + }, + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "./index.css": "./dist/index.css", + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "node": "./dist/index.js" + } + }, + "scripts": { + "build": "npm-run-all --parallel build:*", + "build:types": "tsc", + "build:components": "node ./scripts/bundle.mjs", + "clean": "npx del-cli 'dist/**' && find . -type d -empty -delete", + "lint": "eslint --ignore-pattern \"**/__tests__/**\"", + "dev": "node ./scripts/bundle.mjs watch" + }, + "devDependencies": { + "@jpmorganchase/mosaic-types": "^0.1.0-beta.89", + "del-cli": "^4.0.1", + "esbuild": "0.19.11", + "esbuild-node-externals": "^1.12.0", + "fast-glob": "^3.2.7", + "typescript": "^5.2.2" + }, + "dependencies": { + "@jpmorganchase/mosaic-mdx-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-store": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.89", + "@types/node": "^18.15.3", + "deepmerge": "^4.2.2", + "gray-matter": "^4.0.3", + "zod": "^3.19.1" + } +} diff --git a/packages/loaders/scripts/bundle.mjs b/packages/loaders/scripts/bundle.mjs new file mode 100644 index 00000000..006ae7ea --- /dev/null +++ b/packages/loaders/scripts/bundle.mjs @@ -0,0 +1,45 @@ +import fs from 'fs-extra'; +import glob from 'fast-glob'; +import esbuild from 'esbuild'; +import { nodeExternalsPlugin } from 'esbuild-node-externals'; + +const args = process.argv.slice(2); +const watchEnabled = args[0] === 'watch'; +const packageName = process.env.npm_package_name; + +try { + const context = await esbuild.context({ + entryPoints: glob.sync(['src/**/*.ts?(x)', 'src/*.ts?(x)'], { + ignore: ['**/__tests__', 'src/labs'] + }), + outdir: './dist', + outExtension: { '.js': '.mjs' }, + bundle: true, + sourcemap: false, + splitting: true, + minify: true, + format: 'esm', + target: ['es2022', 'node18'], + platform: 'node', + plugins: [nodeExternalsPlugin()] + }); + await context.rebuild(); + if (watchEnabled) { + await context.watch(); + } + await context.serve(); + context.dispose(); +} catch (e) { + if (e.errors && e.errors.length > 0) { + console.group(`!!!!!!! ${packageName} build errors !!!!!!!`); + console.error(e.errors); + console.groupEnd(); + } + + if (e.warnings && e.warnings.length > 0) { + console.group(`!!!!!!! ${packageName} build warnings !!!!!!!`); + console.error(e.warnings); + console.groupEnd(); + } + process.exit(1); +} diff --git a/packages/loaders/src/index.ts b/packages/loaders/src/index.ts new file mode 100644 index 00000000..0cc5939d --- /dev/null +++ b/packages/loaders/src/index.ts @@ -0,0 +1,77 @@ +import path from 'path'; +import matter from 'gray-matter'; +import type { SafeParseError } from 'zod'; +import { activeEnvSchema } from '@jpmorganchase/mosaic-schemas'; +import type { SharedConfig } from '@jpmorganchase/mosaic-types'; + +import type { LoaderPage } from './types/index.js'; + +export * from './types/index.js'; + +const normalizePageUrl = (url: string): string => (/\/index$/.test(url) ? `${url}.mdx` : url); + +type ActiveModeUrlEnv = { + MOSAIC_ACTIVE_MODE_URL: string; +}; + +export class LoadPageError extends Error { + statusCode: number; + constructor({ message, statusCode }: { message: string; statusCode: number }) { + super(message); + this.statusCode = statusCode; + } +} + +const getFSRootUrl = (): string => { + const env = activeEnvSchema.safeParse(process.env); + if (!env.success) { + const { error } = env as SafeParseError; + error.issues.forEach(issue => { + console.error( + `Missing process.env.${issue.path.join()} environment variable required to load pages` + ); + }); + throw new LoadPageError({ + message: `Environment variables missing to load pages`, + statusCode: 500 + }); + } + return env.data.MOSAIC_ACTIVE_MODE_URL; +}; + +export const loadMosaicData = async (url: string): Promise => { + const fsRootUrl = getFSRootUrl(); + const dataUrl = new URL(url, fsRootUrl); + const response = await fetch(dataUrl); + + if (!response.ok) { + // This will activate the closest `error.js` Error Boundary + throw new Error(`Failed to fetch mosaic data @ ${dataUrl}`); + } + return response.json(); +}; + +export const loadSharedConfig = async (route: string): Promise => { + const sharedConfigUrl = path.posix.join(path.posix.dirname(route), 'shared-config.json'); + const { config } = await loadMosaicData<{ config: SharedConfig }>(sharedConfigUrl); + return config; +}; + +export const loadPage = async (route: string): Promise => { + const fsRootUrl = getFSRootUrl(); + const pageUrl = normalizePageUrl(`${fsRootUrl}${route}`); + const response = await fetch(pageUrl); + if (response.status === 302) { + const { redirect } = await response.json(); + return loadPage(redirect); + } + if (response.ok) { + const source = await response.text(); + const { content, data } = matter(source); + return { source: content, data }; + } + throw new LoadPageError({ + message: `Could not load page : ${pageUrl} ${response.status}/${response.statusText}`, + statusCode: 404 + }); +}; diff --git a/packages/loaders/src/types/index.ts b/packages/loaders/src/types/index.ts new file mode 100644 index 00000000..620ae9be --- /dev/null +++ b/packages/loaders/src/types/index.ts @@ -0,0 +1,37 @@ +import type { + Breadcrumb, + Navigation, + SearchConfig, + SearchIndex, + SharedConfig, + SidebarItem, + TableOfContentsItem +} from '@jpmorganchase/mosaic-types'; + +export type SiteState = { + /** Path described in breadcrumbs */ + breadcrumbs: Breadcrumb[]; + /** Page metadata description, used by search */ + description?: string; + /** Page route */ + route?: string; + /** Layout name that will define the page's anatomy */ + layout?: string; + navigation?: Navigation; + sharedConfig?: SharedConfig; + /** Page title */ + title?: string; + searchIndex?: SearchIndex; + searchConfig?: SearchConfig; + sidebarData: SidebarItem[]; + tableOfContents: TableOfContentsItem[]; +}; + +export type LoaderSource = string; +export type LoaderData = Partial; +export type LoaderPage = { + /** content source */ + source?: LoaderSource; + /** meta for content */ + data?: LoaderData; +}; diff --git a/packages/site-middleware/tsconfig.json b/packages/loaders/tsconfig.json similarity index 100% rename from packages/site-middleware/tsconfig.json rename to packages/loaders/tsconfig.json diff --git a/packages/mdx-components/README.md b/packages/mdx-components/README.md new file mode 100644 index 00000000..e377830f --- /dev/null +++ b/packages/mdx-components/README.md @@ -0,0 +1,18 @@ +# Mosaic MDX Component Library + +`@jpmorganchase/mosaic-components` contains re-usable MDX components that conform to the Mosaic Design language. + +All the Mosaic MDX components are wrapped with default spacing so they can be composed within a MDX page + +This package is intended to be used with a Mosaic site and should export "client side" components + +## Installation + +`yarn add @jpmorganchase/mosaic-components` + +## Criteria + +The criteria for a component within `@jpmorganchase/mosaic-components-client` is + +- Should only export React client-side components +- It can contain any Mosaic Store, NextJS or other site specific dependencies. diff --git a/packages/mdx-components/package.json b/packages/mdx-components/package.json new file mode 100644 index 00000000..c1417e3d --- /dev/null +++ b/packages/mdx-components/package.json @@ -0,0 +1,55 @@ +{ + "name": "@jpmorganchase/mosaic-mdx-components", + "description": "Mosaic - Markdown Components", + "version": "0.1.0-beta.89", + "author": "", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git@github.com:jpmorganchase/mosaic.git", + "directory": "packages/mdx-components" + }, + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "style": "./dist/index.css", + "exports": { + "./index.css": "./dist/index.css", + ".": { + "style": "./dist/index.css", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "node": "./dist/index.js" + } + }, + "scripts": { + "build": "npm-run-all --parallel build:*", + "build:types": "tsc", + "build:components": "node ../../scripts/bundle.mjs", + "clean": "npx del-cli 'dist/**' && find . -type d -empty -delete", + "lint": "eslint --ignore-pattern \"**/__tests__/**\"", + "doc": "node ../../scripts/updateDocs.js", + "dev": "node ../../scripts/bundle.mjs watch" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.0.0", + "react": "^18.2.0", + "del-cli": "^4.0.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-open-api-component": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-site-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", + "clsx": "^2.0.0", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/react": "^18.2.46", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} diff --git a/packages/components/src/Markdown/BlockQuote/index.css.ts b/packages/mdx-components/src/BlockQuote/index.css.ts similarity index 100% rename from packages/components/src/Markdown/BlockQuote/index.css.ts rename to packages/mdx-components/src/BlockQuote/index.css.ts diff --git a/packages/components/src/Markdown/BlockQuote/index.tsx b/packages/mdx-components/src/BlockQuote/index.tsx similarity index 100% rename from packages/components/src/Markdown/BlockQuote/index.tsx rename to packages/mdx-components/src/BlockQuote/index.tsx diff --git a/packages/components/src/Markdown/AnchorHeading/index.css.ts b/packages/mdx-components/src/Heading/AnchorHeading.css.ts similarity index 100% rename from packages/components/src/Markdown/AnchorHeading/index.css.ts rename to packages/mdx-components/src/Heading/AnchorHeading.css.ts diff --git a/packages/components/src/Markdown/AnchorHeading/index.tsx b/packages/mdx-components/src/Heading/AnchorHeading.tsx similarity index 86% rename from packages/components/src/Markdown/AnchorHeading/index.tsx rename to packages/mdx-components/src/Heading/AnchorHeading.tsx index a2364129..e1dacee8 100644 --- a/packages/components/src/Markdown/AnchorHeading/index.tsx +++ b/packages/mdx-components/src/Heading/AnchorHeading.tsx @@ -1,13 +1,12 @@ import React, { useEffect, useRef, useState } from 'react'; +import { usePathname } from 'next/navigation'; import classnames from 'clsx'; -import { Icon } from '../../Icon'; +import { Caption6, Icon, Link, LinkProps, TypographyProps } from '@jpmorganchase/mosaic-components'; -import { Link, LinkProps } from '../../Link'; -import { Caption6, TypographyProps } from '../../Typography'; -import styles from './index.css'; +import styles from './AnchorHeading.css'; export interface AnchorHeadingProps extends React.HTMLProps { - children: React.ReactNode[]; + children: React.ReactNode; Component: React.FC>; LinkProps?: LinkProps; } @@ -20,6 +19,7 @@ export const AnchorHeading: React.FC LinkProps: LinkPropsProp = {}, ...rest }) => { + const route = usePathname(); const timerRef = useRef(null); useEffect( () => () => { @@ -41,7 +41,7 @@ export const AnchorHeading: React.FC }; const handleMouseClick = event => { const anchor = event.currentTarget.getAttribute('href'); - navigator.clipboard.writeText(`${window.location.origin}${anchor}`); + navigator.clipboard.writeText(`${window.location.origin}${route}/${anchor}`); setCopied(true); timerRef.current = setTimeout(() => setCopied(false), 1000); event.preventDefault(); @@ -92,6 +92,3 @@ export const AnchorHeading: React.FC
    ); }; - -export const withAnchorHeading = Component => props => - ; diff --git a/packages/components/src/Markdown/__tests__/Heading.test.tsx b/packages/mdx-components/src/Heading/__tests__/Heading.test.tsx similarity index 83% rename from packages/components/src/Markdown/__tests__/Heading.test.tsx rename to packages/mdx-components/src/Heading/__tests__/Heading.test.tsx index bc9e8797..1ecab15b 100644 --- a/packages/components/src/Markdown/__tests__/Heading.test.tsx +++ b/packages/mdx-components/src/Heading/__tests__/Heading.test.tsx @@ -2,54 +2,54 @@ import { describe, expect, test } from 'vitest'; import React from 'react'; import { render, screen } from '@testing-library/react'; -import * as Heading from '../Heading'; +import { H0, H1, H2, H3, H4, H5, H6 } from '../index'; describe('GIVEN a Heading', () => { test('THEN a H0 can be rendered', () => { // arrange - render(H0); + render(H0); // assert expect(screen.getByText('H0')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 1 })).toBeInTheDocument(); }); test('THEN a H1 can be rendered', () => { // arrange - render(H1); + render(

    H1

    ); // assert expect(screen.getByText('H1')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 1 })).toBeInTheDocument(); }); test('THEN a H1 can be rendered', () => { // arrange - render(H2); + render(

    H2

    ); // assert expect(screen.getByText('H2')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 2 })).toBeInTheDocument(); }); test('THEN a H3 can be rendered', () => { // arrange - render(H3); + render(

    H3

    ); // assert expect(screen.getByText('H3')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 3 })).toBeInTheDocument(); }); test('THEN a H4 can be rendered', () => { // arrange - render(H4); + render(

    H4

    ); // assert expect(screen.getByText('H4')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 4 })).toBeInTheDocument(); }); test('THEN a H5 can be rendered', () => { // arrange - render(H5); + render(
    H5
    ); // assert expect(screen.getByText('H5')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 5 })).toBeInTheDocument(); }); test('THEN a H6 can be rendered', () => { // arrange - render(H6); + render(
    H6
    ); // assert expect(screen.getByText('H6')).toBeInTheDocument(); expect(screen.getByRole('heading', { level: 6 })).toBeInTheDocument(); diff --git a/packages/components/src/Markdown/AnchorHeading/__tests__/index.test.tsx b/packages/mdx-components/src/Heading/__tests__/index.test.tsx similarity index 80% rename from packages/components/src/Markdown/AnchorHeading/__tests__/index.test.tsx rename to packages/mdx-components/src/Heading/__tests__/index.test.tsx index 603ac0dc..f99a9299 100644 --- a/packages/components/src/Markdown/AnchorHeading/__tests__/index.test.tsx +++ b/packages/mdx-components/src/Heading/__tests__/index.test.tsx @@ -3,15 +3,13 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import userEvents from '@testing-library/user-event'; -import { withAnchorHeading } from '../index'; -import * as Heading from '../../Heading'; +import { H1 } from '../index'; describe('GIVEN an AnchoredHeading', () => { describe('WHEN rendered', () => { test('THEN the Heading is rendered', () => { // arrange - const TestHeading = withAnchorHeading(Heading.H1); - render(Mosaic Heading); + render(

    Mosaic Heading

    ); // assert expect(screen.getByText('Mosaic Heading')).toBeInTheDocument(); }); @@ -28,11 +26,8 @@ describe('GIVEN an AnchoredHeading', () => { }; vi.stubGlobal('navigator', { clipboard: mockClipboard }); - const TestHeading = withAnchorHeading(Heading.H1); render( - - Mosaic Heading - +

    Mosaic Heading

    ); // assert expect(screen.queryByLabelText('copied anchor link to clipboard')).not.toBeInTheDocument(); diff --git a/packages/mdx-components/src/Heading/index.tsx b/packages/mdx-components/src/Heading/index.tsx new file mode 100644 index 00000000..2e58366c --- /dev/null +++ b/packages/mdx-components/src/Heading/index.tsx @@ -0,0 +1,34 @@ +import classnames from 'clsx'; +import { Typography } from '@jpmorganchase/mosaic-components'; +import { heading } from '@jpmorganchase/mosaic-theme'; +import { AnchorHeading } from './AnchorHeading'; + +const createHeading = + (variant, component) => + ({ children, className, ...props }) => + ( + + {children} + + ); + +const Heading0 = createHeading('heading0', 'h1'); +const Heading1 = createHeading('heading1', 'h1'); +const Heading2 = createHeading('heading2', 'h2'); +const Heading3 = createHeading('heading3', 'h3'); +const Heading4 = createHeading('heading4', 'h4'); +const Heading5 = createHeading('heading5', 'h5'); +const Heading6 = createHeading('heading6', 'h6'); + +export const H0 = props => ; +export const H1 = props => ; +export const H2 = props => ; +export const H3 = props => ; +export const H4 = props => ; +export const H5 = props => ; +export const H6 = props => ; diff --git a/packages/components/src/Markdown/InlineCode.tsx b/packages/mdx-components/src/InlineCode.tsx similarity index 100% rename from packages/components/src/Markdown/InlineCode.tsx rename to packages/mdx-components/src/InlineCode.tsx diff --git a/packages/components/src/Markdown/Link.tsx b/packages/mdx-components/src/Link.tsx similarity index 75% rename from packages/components/src/Markdown/Link.tsx rename to packages/mdx-components/src/Link.tsx index f10d1de2..1b2ad296 100644 --- a/packages/components/src/Markdown/Link.tsx +++ b/packages/mdx-components/src/Link.tsx @@ -1,6 +1,5 @@ import React from 'react'; - -import { Link as LinkComponent, LinkProps } from '../Link'; +import { Link as LinkComponent, LinkProps } from '@jpmorganchase/mosaic-components'; export interface MarkdownLinkProps extends LinkProps { href?: string; diff --git a/packages/components/src/Markdown/Table.tsx b/packages/mdx-components/src/Table.tsx similarity index 100% rename from packages/components/src/Markdown/Table.tsx rename to packages/mdx-components/src/Table.tsx diff --git a/packages/components/src/Markdown/Tbody.tsx b/packages/mdx-components/src/Tbody.tsx similarity index 100% rename from packages/components/src/Markdown/Tbody.tsx rename to packages/mdx-components/src/Tbody.tsx diff --git a/packages/components/src/Markdown/Td.tsx b/packages/mdx-components/src/Td.tsx similarity index 100% rename from packages/components/src/Markdown/Td.tsx rename to packages/mdx-components/src/Td.tsx diff --git a/packages/components/src/Markdown/Th.tsx b/packages/mdx-components/src/Th.tsx similarity index 100% rename from packages/components/src/Markdown/Th.tsx rename to packages/mdx-components/src/Th.tsx diff --git a/packages/components/src/Markdown/Thead.tsx b/packages/mdx-components/src/Thead.tsx similarity index 100% rename from packages/components/src/Markdown/Thead.tsx rename to packages/mdx-components/src/Thead.tsx diff --git a/packages/components/src/Markdown/ThematicBreak/index.css.ts b/packages/mdx-components/src/ThematicBreak/index.css.ts similarity index 100% rename from packages/components/src/Markdown/ThematicBreak/index.css.ts rename to packages/mdx-components/src/ThematicBreak/index.css.ts diff --git a/packages/components/src/Markdown/ThematicBreak/index.tsx b/packages/mdx-components/src/ThematicBreak/index.tsx similarity index 100% rename from packages/components/src/Markdown/ThematicBreak/index.tsx rename to packages/mdx-components/src/ThematicBreak/index.tsx diff --git a/packages/components/src/Markdown/Tr.tsx b/packages/mdx-components/src/Tr.tsx similarity index 100% rename from packages/components/src/Markdown/Tr.tsx rename to packages/mdx-components/src/Tr.tsx diff --git a/packages/mdx-components/src/components.ts b/packages/mdx-components/src/components.ts new file mode 100644 index 00000000..f7343d03 --- /dev/null +++ b/packages/mdx-components/src/components.ts @@ -0,0 +1,166 @@ +import { Ref } from 'react'; +import { + Accordion as MosaicAccordion, + AccordionProps, + Callout as MosaicCallout, + CalloutProps, + Card as MosaicCard, + CardProps, + Cards as MosaicCards, + CardsProps, + ComponentExample as MosaicComponentExample, + ComponentExampleProps, + DataTable as MosaicDataTable, + DataTableProps, + EditionTileLink as MosaicEditionTileLink, + EditionTileLinkProps, + Feature as MosaicFeature, + FeatureProps, + Features as MosaicFeatures, + FeaturesProps, + FilterDropdown as MosaicFilterDropdown, + FilterDropdownProps, + FilterNoResults as MosaicFilterNoResults, + FilterNoResultsProps, + FilterPillGroup as MosaicFilterPillGroup, + FilterPillGroupProps, + FilterResultCount as MosaicFilterResultCount, + FilterResultCountProps, + FilterSearch as MosaicFilterSearch, + FilterSearchProps, + FilterSortDropdown as MosaicFilterSortDropdown, + FilterSortDropdownProps, + FilterToolbar as MosaicFilterToolbar, + FilterToolbarProps, + FilterView as MosaicFilterView, + FilterViewProps, + Grid as MosaicGrid, + GridBase as MosaicGridBase, + GridBaseProps, + GridProps, + HelpLinks as MosaicHelpLinks, + HelpLinksProps, + Icon as MosaicIcon, + IconProps, + Impact as MosaicImpact, + ImpactProps, + Impacts as MosaicImpacts, + ImpactsProps, + Label as MosaicLabel, + LabelProps, + LinkBase as MosaicLinkBase, + LinkBaseProps, + LinkButton as MosaicLinkButton, + LinkButtonProps, + Links as MosaicLinks, + LinksProps, + LinkText as MosaicLinkText, + LinkTextProps, + ListItem as MosaicListItem, + ListItemProps, + OrderedList as MosaicOrderedList, + OrderedListProps, + SecondaryNavbar as MosaicSecondaryNavbar, + SecondaryNavbarProps, + Story as MosaicStory, + StoryProps, + Tabs as MosaicTabs, + TabsProps, + Tag as MosaicTag, + TagProps, + TileBase as MosaicTileBase, + TileBaseProps, + TileButton as MosaicTileButton, + TileButtonProps, + TileContent as MosaicTileContent, + TileContentLabel as MosaicTileContentLabel, + TileContentLabelProps, + TileContentProps, + TileLink as MosaicTileLink, + TileLinkProps, + Tiles as MosaicTiles, + TilesProps, + UnorderedList as MosaicUnorderedList, + UnOrderedListProps, + ViewStack as MosaicViewStack, + ViewStackProps +} from '@jpmorganchase/mosaic-components'; + +import { + OpenAPI as MosaicOpenAPI, + type OpenAPIProps +} from '@jpmorganchase/mosaic-open-api-component'; + +import { withMarkdownSpacing } from './withMarkdownSpacing'; + +export { + AudioPlayer, + AccordionDetails, + AccordionSection, + AccordionSummary, + Button, + EditionFilterView, + FeatureActions, + FeatureContent, + FeatureEyebrow, + FeatureTitle, + Hero, + Link, + SectionHeading, + StickyHeader, + Tab, + TabsBase, + PageFilterView, + VideoPlayer, + View +} from '@jpmorganchase/mosaic-components'; +export * from './markdownElements'; +export * from './typography'; + +export const Accordion = withMarkdownSpacing(MosaicAccordion); +export const Callout = withMarkdownSpacing(MosaicCallout); +export const Card = withMarkdownSpacing(MosaicCard); +export const Cards = withMarkdownSpacing(MosaicCards); +export const ComponentExample = withMarkdownSpacing(MosaicComponentExample); +export const DataTable = withMarkdownSpacing & { ref?: Ref }>( + MosaicDataTable +); +export const EditionTileLink = withMarkdownSpacing(MosaicEditionTileLink); +export const Feature = withMarkdownSpacing(MosaicFeature); +export const Features = withMarkdownSpacing(MosaicFeatures); +export const FilterView = withMarkdownSpacing>(MosaicFilterView); +export const FilterDropdown = withMarkdownSpacing(MosaicFilterDropdown); +export const FilterToolbar = withMarkdownSpacing(MosaicFilterToolbar); +export const FilterNoResults = withMarkdownSpacing(MosaicFilterNoResults); +export const FilterPillGroup = withMarkdownSpacing(MosaicFilterPillGroup); +export const FilterSortDropdown = + withMarkdownSpacing(MosaicFilterSortDropdown); +export const FilterSearch = withMarkdownSpacing(MosaicFilterSearch); +export const FilterResultCount = + withMarkdownSpacing(MosaicFilterResultCount); +export const Grid = withMarkdownSpacing(MosaicGrid); +export const GridBase = withMarkdownSpacing(MosaicGridBase); +export const HelpLinks = withMarkdownSpacing(MosaicHelpLinks); +export const Icon = withMarkdownSpacing(MosaicIcon, 'regular', true); +export const Impact = withMarkdownSpacing(MosaicImpact); +export const Impacts = withMarkdownSpacing(MosaicImpacts); +export const Label = withMarkdownSpacing(MosaicLabel); +export const LinkBase = withMarkdownSpacing(MosaicLinkBase); +export const LinkButton = withMarkdownSpacing(MosaicLinkButton); +export const LinkText = withMarkdownSpacing(MosaicLinkText); +export const Links = withMarkdownSpacing(MosaicLinks); +export const ListItem = withMarkdownSpacing(MosaicListItem); +export const OpenAPI = withMarkdownSpacing(MosaicOpenAPI); +export const OrderedList = withMarkdownSpacing(MosaicOrderedList); +export const Tag = withMarkdownSpacing(MosaicTag); +export const SecondaryNavbar = withMarkdownSpacing(MosaicSecondaryNavbar); +export const Story = withMarkdownSpacing(MosaicStory); +export const Tabs = withMarkdownSpacing(MosaicTabs); +export const Tiles = withMarkdownSpacing(MosaicTiles); +export const TileBase = withMarkdownSpacing(MosaicTileBase); +export const TileButton = withMarkdownSpacing(MosaicTileButton); +export const TileContent = withMarkdownSpacing(MosaicTileContent); +export const TileContentLabel = withMarkdownSpacing(MosaicTileContentLabel); +export const TileLink = withMarkdownSpacing(MosaicTileLink); +export const UnorderedList = withMarkdownSpacing(MosaicUnorderedList); +export const ViewStack = withMarkdownSpacing>(MosaicViewStack); diff --git a/packages/mdx-components/src/index.tsx b/packages/mdx-components/src/index.tsx new file mode 100644 index 00000000..021480a9 --- /dev/null +++ b/packages/mdx-components/src/index.tsx @@ -0,0 +1,3 @@ +'use client'; + +export * from './components'; diff --git a/packages/mdx-components/src/markdownElements.tsx b/packages/mdx-components/src/markdownElements.tsx new file mode 100644 index 00000000..c2c71371 --- /dev/null +++ b/packages/mdx-components/src/markdownElements.tsx @@ -0,0 +1,58 @@ +import { emphasis, link, paragraph } from '@jpmorganchase/mosaic-theme'; +import { + ListItem, + OrderedList, + UnorderedList, + withStyledTypography +} from '@jpmorganchase/mosaic-components'; +import { Image as MosaicImage, ImageProps } from '@jpmorganchase/mosaic-site-components'; + +import { BlockQuote } from './BlockQuote'; +import { InlineCode } from './InlineCode'; +import * as Heading from './Heading'; +import { Link } from './Link'; +import { Table as MosaicTable } from './Table'; +import { Tbody as MosaicTbody } from './Tbody'; +import { Thead as MosaicThead } from './Thead'; +import { Th as MosaicTh } from './Th'; +import { Td as MosaicTd } from './Td'; +import { Tr as MosaicTr } from './Tr'; +import { ThematicBreak } from './ThematicBreak'; +import { withMarkdownSpacing } from './withMarkdownSpacing'; + +export const a = withMarkdownSpacing(Link, link({ context: 'markdown', variant: 'document' })); +export const blockquote = withMarkdownSpacing(BlockQuote); +export const ol = withMarkdownSpacing(OrderedList); +export const ul = withMarkdownSpacing(UnorderedList); +export const li = withMarkdownSpacing(ListItem, 'none'); +export const hr = ThematicBreak; +export const h1 = Heading.H1; +export const h2 = Heading.H2; +export const h3 = Heading.H3; +export const h4 = Heading.H4; +export const h5 = Heading.H5; +export const h6 = Heading.H6; +export const img = withMarkdownSpacing(MosaicImage); +export const Image = img; +export const p = withStyledTypography(paragraph({ variant: 'paragraph2', context: 'markdown' })); +export const inlineCode = withMarkdownSpacing(InlineCode, 'none'); +export const table = withMarkdownSpacing(MosaicTable); +export const Table = table; +export const tbody = withMarkdownSpacing(MosaicTbody, 'none'); +export const Tbody = tbody; +export const thead = withMarkdownSpacing(MosaicThead, 'none'); +export const Thead = thead; +export const th = withMarkdownSpacing(MosaicTh, 'none'); +export const Th = th; +export const td = withMarkdownSpacing(MosaicTd, 'none'); +export const Td = MosaicTd; +export const tr = withMarkdownSpacing(MosaicTr, 'none'); +export const Tr = tr; +export const em = withStyledTypography( + emphasis({ variant: 'regular', context: 'markdown' }), + 'span' +); +export const strong = withStyledTypography( + emphasis({ variant: 'strong', context: 'markdown' }), + 'span' +); diff --git a/packages/mdx-components/src/typography.tsx b/packages/mdx-components/src/typography.tsx new file mode 100644 index 00000000..ca0ec054 --- /dev/null +++ b/packages/mdx-components/src/typography.tsx @@ -0,0 +1,55 @@ +import { + action, + amount, + caption, + eyebrow, + paragraph, + subtitle, + watermark +} from '@jpmorganchase/mosaic-theme'; +import { withStyledTypography } from '@jpmorganchase/mosaic-components'; +import * as markdownElements from './markdownElements'; + +export const Action1 = withStyledTypography(action({ variant: 'action1', context: 'markdown' })); +export const Action2 = withStyledTypography(action({ variant: 'action2', context: 'markdown' })); +export const Action3 = withStyledTypography(action({ variant: 'action3', context: 'markdown' })); +export const Action4 = withStyledTypography(action({ variant: 'action4', context: 'markdown' })); +export const Action5 = withStyledTypography(action({ variant: 'action5', context: 'markdown' })); +export const Action6 = withStyledTypography(action({ variant: 'action6', context: 'markdown' })); +export const Action7 = withStyledTypography(action({ variant: 'action7', context: 'markdown' })); +export const Action8 = withStyledTypography(action({ variant: 'action8', context: 'markdown' })); +export const Caption1 = withStyledTypography(caption({ variant: 'caption1', context: 'markdown' })); +export const Caption2 = withStyledTypography(caption({ variant: 'caption2', context: 'markdown' })); +export const Caption3 = withStyledTypography(caption({ variant: 'caption3', context: 'markdown' })); +export const Caption4 = withStyledTypography(caption({ variant: 'caption4', context: 'markdown' })); +export const Caption5 = withStyledTypography(caption({ variant: 'caption5', context: 'markdown' })); +export const Caption6 = withStyledTypography(caption({ variant: 'caption6', context: 'markdown' })); +export const Hr = markdownElements.hr; +export * from './Heading'; +export const P1 = markdownElements.p; +export const P2 = withStyledTypography(paragraph({ variant: 'paragraph2', context: 'markdown' })); +export const P3 = withStyledTypography(paragraph({ variant: 'paragraph3', context: 'markdown' })); +export const P4 = withStyledTypography(paragraph({ variant: 'paragraph4', context: 'markdown' })); +export const P5 = withStyledTypography(paragraph({ variant: 'paragraph5', context: 'markdown' })); +export const P6 = withStyledTypography(paragraph({ variant: 'paragraph6', context: 'markdown' })); +export const Subtitle1 = withStyledTypography( + subtitle({ variant: 'subtitle1', context: 'markdown' }) +); +export const Subtitle2 = withStyledTypography( + subtitle({ variant: 'subtitle2', context: 'markdown' }) +); +export const Subtitle3 = withStyledTypography( + subtitle({ variant: 'subtitle3', context: 'markdown' }) +); +export const Subtitle4 = withStyledTypography( + subtitle({ variant: 'subtitle4', context: 'markdown' }) +); +export const Subtitle5 = withStyledTypography( + subtitle({ variant: 'subtitle5', context: 'markdown' }) +); +export const Subtitle6 = withStyledTypography( + subtitle({ variant: 'subtitle6', context: 'markdown' }) +); +export const Amount = withStyledTypography(amount({ context: 'markdown' })); +export const Eyebrow = withStyledTypography(eyebrow({ context: 'markdown' })); +export const Watermark = withStyledTypography(watermark({ context: 'markdown' })); diff --git a/packages/components/src/Markdown/withMarkdownSpacing/index.tsx b/packages/mdx-components/src/withMarkdownSpacing/index.tsx similarity index 100% rename from packages/components/src/Markdown/withMarkdownSpacing/index.tsx rename to packages/mdx-components/src/withMarkdownSpacing/index.tsx diff --git a/packages/mdx-components/src/withMarkdownSpacing/styles.css.ts b/packages/mdx-components/src/withMarkdownSpacing/styles.css.ts new file mode 100644 index 00000000..8164ffc5 --- /dev/null +++ b/packages/mdx-components/src/withMarkdownSpacing/styles.css.ts @@ -0,0 +1,7 @@ +import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; + +export default { + none: responsiveSprinkles({ marginTop: 'x6' }), + regular: responsiveSprinkles({ marginTop: 'x6' }), + inline: responsiveSprinkles({ paddingLeft: 'x1' }) +}; diff --git a/packages/mdx-components/tsconfig.json b/packages/mdx-components/tsconfig.json new file mode 100644 index 00000000..a179de40 --- /dev/null +++ b/packages/mdx-components/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.bundle.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src"] +} diff --git a/packages/open-api-component/package.json b/packages/open-api-component/package.json index 47862bfe..d449fc5e 100644 --- a/packages/open-api-component/package.json +++ b/packages/open-api-component/package.json @@ -36,25 +36,20 @@ }, "devDependencies": { "del-cli": "^4.0.1", - "typescript": "^4.8.3" + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/sprinkles": "^1.3.0", - "@vanilla-extract/recipes": "^0.2.1", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/sprinkles": "^1.6.1", + "@vanilla-extract/recipes": "^0.5.1", "@types/swagger-ui-react": "^4.18.0", - "swagger-ui-react": "^5.0.0", - "clsx": "^2.0.0", - "deepmerge": "^2.0.1", - "lodash-es": "^4.17.21", - "react-markdown": "^9.0.0", - "use-memo-one": "^1.1.1", - "warning": "^3.0.0" + "swagger-ui-react": "^5.11.0", + "clsx": "^2.0.0" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/open-api-component/src/IsomorphicSuspense.tsx b/packages/open-api-component/src/IsomorphicSuspense.tsx deleted file mode 100644 index b58927ea..00000000 --- a/packages/open-api-component/src/IsomorphicSuspense.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; - -export interface IsomorphicSuspenseProps { - fallback: JSX.Element; -} - -export const IsomorphicSuspense: React.FC> = ({ - children, - fallback -}) => { - if (typeof window === 'undefined') { - return fallback; - } - return {children}; -}; - -export default IsomorphicSuspense; diff --git a/packages/open-api-component/src/OpenAPI/SwaggerUi.tsx b/packages/open-api-component/src/OpenAPI/SwaggerUi.tsx index d222c90f..920a7e5d 100644 --- a/packages/open-api-component/src/OpenAPI/SwaggerUi.tsx +++ b/packages/open-api-component/src/OpenAPI/SwaggerUi.tsx @@ -1,7 +1,13 @@ +'use client'; + /** * Keep this separate. * We want this to be loaded on the client and not the server to prevent * issues with swagger-ui-react dependencies. + * + * Also, swagger-ui-react needs node 20 to work + * See --> https://github.com/swagger-api/swagger-ui/issues/8245#issuecomment-1707703135 + * */ import SwaggerUI from 'swagger-ui-react'; diff --git a/packages/open-api-component/src/OpenAPI/index.tsx b/packages/open-api-component/src/OpenAPI/index.tsx index 26e1f3e3..87d83792 100644 --- a/packages/open-api-component/src/OpenAPI/index.tsx +++ b/packages/open-api-component/src/OpenAPI/index.tsx @@ -1,6 +1,4 @@ -import React, { lazy } from 'react'; - -import { IsomorphicSuspense } from '../IsomorphicSuspense'; +import React, { lazy, Suspense } from 'react'; export interface OpenAPIProps { /** Additional class name for root class override */ @@ -12,7 +10,7 @@ export interface OpenAPIProps { const LazySwagger = lazy(() => import('./SwaggerUi')); export const OpenAPI: React.FC> = ({ url }) => ( - Loading Swagger component...}> + Loading Swagger component...}> - + ); diff --git a/packages/open-api-component/src/index.ts b/packages/open-api-component/src/index.ts new file mode 100644 index 00000000..5574526f --- /dev/null +++ b/packages/open-api-component/src/index.ts @@ -0,0 +1,4 @@ +import './styles.css'; +import 'swagger-ui-react/swagger-ui.css'; + +export * from './OpenAPI/index'; diff --git a/packages/open-api-component/src/index.tsx b/packages/open-api-component/src/index.tsx deleted file mode 100644 index c00bc249..00000000 --- a/packages/open-api-component/src/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './OpenAPI'; diff --git a/packages/open-api-component/src/OpenAPI/styles.css.ts b/packages/open-api-component/src/styles.css.ts similarity index 100% rename from packages/open-api-component/src/OpenAPI/styles.css.ts rename to packages/open-api-component/src/styles.css.ts diff --git a/packages/open-api-component/src/styles.ts b/packages/open-api-component/src/styles.ts deleted file mode 100644 index 3604c112..00000000 --- a/packages/open-api-component/src/styles.ts +++ /dev/null @@ -1,3 +0,0 @@ -import 'swagger-ui-react/swagger-ui.css'; - -import './OpenAPI/styles.css'; diff --git a/packages/plugins/package.json b/packages/plugins/package.json index b976e39a..ae8e3fd3 100644 --- a/packages/plugins/package.json +++ b/packages/plugins/package.json @@ -67,6 +67,6 @@ "mdast-util-directive": "^3.0.0", "mdast-util-to-string": "^4.0.0", "uuid": "^7.0.3", - "vfile-reporter": "^7.0.5" + "vfile-reporter": "^8.1.0" } } diff --git a/packages/schemas/src/ActiveEnvSchema.ts b/packages/schemas/src/ActiveEnvSchema.ts new file mode 100644 index 00000000..dd8e99cf --- /dev/null +++ b/packages/schemas/src/ActiveEnvSchema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +export const activeEnvSchema = z.object({ + MOSAIC_ACTIVE_MODE_URL: z.string() +}); + +export type ActiveEnvSchema = z.infer; diff --git a/packages/schemas/src/index.ts b/packages/schemas/src/index.ts index 9c8991a1..7c45ffa4 100644 --- a/packages/schemas/src/index.ts +++ b/packages/schemas/src/index.ts @@ -4,6 +4,7 @@ export * from './fileExtensionSchema.js'; export * from './sidebarSortConfigSchema.js'; export * from './validate.js'; +export * from './ActiveEnvSchema.js'; export * from './SnapshotFileEnvSchema.js'; export * from './MosaicConfigSchema.js'; export * from './PluginModuleSchema.js'; diff --git a/packages/site-components-next/package.json b/packages/site-components-next/package.json new file mode 100644 index 00000000..72efd370 --- /dev/null +++ b/packages/site-components-next/package.json @@ -0,0 +1,55 @@ +{ + "name": "@jpmorganchase/mosaic-site-components-next", + "version": "0.1.0-beta.89", + "license": "Apache-2.0", + "description": "Mosaic - Site components NEXT", + "repository": { + "type": "git", + "url": "git@github.com:jpmorganchase/mosaic.git", + "directory": "packages/site-components" + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "node": "./dist/index.js" + } + }, + "scripts": { + "build": "npm-run-all --parallel build:*", + "build:bundle": "node ../../scripts/bundle.mjs", + "build:types": "tsc", + "clean": "npx del-cli 'dist/**' && find . -type d -empty -delete", + "lint": "eslint --ignore-pattern \"**/__tests__/**\"", + "dev": "node ../../scripts/bundle.mjs watch" + }, + "devDependencies": { + "del-cli": "^4.0.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@jpmorganchase/mosaic-mdx-components": "0.1.0-beta.89", + "@jpmorganchase/mosaic-site-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-loaders": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-types": "^0.1.0-beta.89", + "clsx": "^2.0.0", + "deepmerge": "^4.2.2", + "rehype-pretty-code": "0.13.0", + "remark-rehype": "11.1.0", + "rehype-slug": "^6.0.0", + "rehype-stringify": "10.0.0", + "remark-gfm": "^4.0.0", + "server-only": "^0.0.1", + "shiki": "^1.1.1", + "@daviereid/next-mdx-remote": "^4.4.2", + "unified": "11.0.4" + }, + "peerDependencies": { + "@types/react": "^18.2.46", + "next-auth": "^4.22.1", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} diff --git a/packages/site-components-next/src/AppHeader/index.tsx b/packages/site-components-next/src/AppHeader/index.tsx new file mode 100644 index 00000000..09767619 --- /dev/null +++ b/packages/site-components-next/src/AppHeader/index.tsx @@ -0,0 +1,138 @@ +import { Suspense } from 'react'; +import { loadSharedConfig } from '@jpmorganchase/mosaic-loaders'; +import { AppHeader as UI } from '@jpmorganchase/mosaic-site-components'; +import type { TabsLinkItem, TabsMenu, TabsMenuButtonItem } from '@jpmorganchase/mosaic-components'; +import { SearchInput } from '../SearchInput'; + +/** + * [[`MenuItemType`]] defines the type of App header Menu items + */ +export type MenuItemType = 'menu' | 'link'; + +function isMenu(menu: MenuLinkItem | MenuLinksItem): menu is MenuLinksItem { + return (menu as MenuLinksItem).links !== undefined; +} +function isMenuLink(menu: MenuLinkItem | MenuLinksItem): menu is MenuLinkItem { + return (menu as MenuLinkItem).link !== undefined; +} + +/** + * [[`Menu`]] defines App Header menus + */ +export type Menu = MenuLinksItem | MenuLinkItem; + +/** + * [[`MenuLinksItem`]] defines a menu of links + */ +export interface MenuLinksItem { + /** Collection of link options */ + links: MenuLinkItem[]; + /** Title of MenuLinksItem */ + title: string; + /** Type of MenuLinksItem */ + type: 'menu'; +} + +/** + * [[`MenuLinksItem`]] defines a menu of links and includes a type + */ +export interface AppHeaderMenuLinksItem { + /** Collection of link options */ + links: MenuLinkItem[]; + /** Title of Tab */ + title: string; + /** Type of Tab */ + type: 'menu'; +} + +/** + * [[`MenuLinkItem`]] define a menu link + */ +export interface MenuLinkItem { + /** URL linked by Tab */ + link: string; + /** Title of Tab */ + title?: string; + /** Type of MenuLinkItem */ + type: 'link'; +} + +/** + * [[`MenuLinkItem`]] define a menu link and include a type + */ +export interface AppHeaderMenuLinkItem { + /** URL linked by Tab */ + link: string; + /** Title of Tab */ + title?: string; + /** Type of Tab */ + type: 'link'; +} + +/** + * [[`AppHeaderSlice`]] specifies the contents of the AppHeader + */ +export type AppHeaderSlice = { + /** App logo/title */ + title: string; + /** Link to the home page */ + homeLink: string; + /** Logo URL */ + logo?: string; + /** App Header menu */ + menu: Menu[]; + /** Search namespace, suffix used on env variable `process.env.SEARCH_ENDPOINT` to filter search results to a specific namespace. */ + searchNamespace?: string; + /** Search index, created by SearchIndexPlugin */ + searchIndex?: any; +}; + +export type AppHeaderMenu = Array; + +function createTabsMenu(appHeaderMenu: AppHeaderMenu): TabsMenu { + const tabsMenu = appHeaderMenu.reduce<(TabsMenuButtonItem | TabsLinkItem)[]>( + (result, menuItem) => { + if (menuItem && isMenu(menuItem)) { + const tabsLinksItem: TabsMenuButtonItem = { + title: menuItem.title, + type: 'menu', + links: menuItem.links.map(({ title, link }: MenuLinkItem) => ({ + type: 'link', + title, + link + })) + }; + return [...result, tabsLinksItem]; + } + if (menuItem && isMenuLink(menuItem)) { + const tabsLinkItem: TabsLinkItem = { + title: menuItem.title, + type: 'link', + link: menuItem.link + }; + return [...result, tabsLinkItem]; + } + console.error('Unknown Menu item passed to createTabsMenu, ignoring', menuItem); + return result; + }, + [] + ); + return tabsMenu; +} + +export async function AppHeader({ path }: { path: string }) { + const sharedConfig = await loadSharedConfig(path); + const headerConfig = sharedConfig?.header; + const { homeLink, logo, menu: menuItems = [], title } = headerConfig || {}; + + const tabsMenu = createTabsMenu(menuItems); + + return ( + + Loading Search
    }> + {/* @ts-expect-error Server Component */} + + + + ); +} diff --git a/packages/site-components-next/src/Breadcrumbs/index.tsx b/packages/site-components-next/src/Breadcrumbs/index.tsx new file mode 100644 index 00000000..40078e71 --- /dev/null +++ b/packages/site-components-next/src/Breadcrumbs/index.tsx @@ -0,0 +1,8 @@ +import { loadPage } from '@jpmorganchase/mosaic-loaders'; +import { Breadcrumbs as UI } from '@jpmorganchase/mosaic-site-components'; + +export async function Breadcrumbs({ path, loader }: { path: string; loader: typeof loadPage }) { + const { data } = await loader(path); + const breadcrumbs = data?.breadcrumbs || []; + return 2} />; +} diff --git a/packages/site-components-next/src/DocPaginator/index.tsx b/packages/site-components-next/src/DocPaginator/index.tsx new file mode 100644 index 00000000..ca29c333 --- /dev/null +++ b/packages/site-components-next/src/DocPaginator/index.tsx @@ -0,0 +1,16 @@ +import { loadPage } from '@jpmorganchase/mosaic-loaders'; +import { DocPaginator as UI } from '@jpmorganchase/mosaic-site-components'; + +export async function DocPaginator({ + path, + loader, + linkSuffix = 'Page' +}: { + path: string; + loader: typeof loadPage; + linkSuffix: string; +}) { + const { data } = await loader(path); + const { next, prev } = data?.navigation || {}; + return ; +} diff --git a/packages/site-components-next/src/EditionFilterView/index.tsx b/packages/site-components-next/src/EditionFilterView/index.tsx new file mode 100644 index 00000000..14df8fff --- /dev/null +++ b/packages/site-components-next/src/EditionFilterView/index.tsx @@ -0,0 +1,17 @@ +import type { EditionFilterViewProps } from '@jpmorganchase/mosaic-components'; +import { EditionFilterView as UI } from '@jpmorganchase/mosaic-mdx-components'; +import { MDXContent } from '../MDXContent'; +import { mdxElements } from '../mdx/elements'; + +export async function EditionFilterView({ view, ...restProps }: EditionFilterViewProps) { + const formattedView = view.map(item => { + const formattedDescription = ( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /** @ts-ignore Server Component */ + + ); + + return item.formattedDescription ? { ...item, formattedDescription } : item; + }); + return ; +} diff --git a/packages/site-components-next/src/Footer/index.tsx b/packages/site-components-next/src/Footer/index.tsx new file mode 100644 index 00000000..e501fa7a --- /dev/null +++ b/packages/site-components-next/src/Footer/index.tsx @@ -0,0 +1,8 @@ +import { loadSharedConfig } from '@jpmorganchase/mosaic-loaders'; +import { Footer as UI } from '@jpmorganchase/mosaic-site-components'; + +export async function Footer({ path }: { path: string }) { + const sharedConfig = await loadSharedConfig(path); + const footerProps = sharedConfig?.footer; + return ; +} diff --git a/packages/site-components-next/src/MDXContent/index.tsx b/packages/site-components-next/src/MDXContent/index.tsx new file mode 100644 index 00000000..43eb2fd1 --- /dev/null +++ b/packages/site-components-next/src/MDXContent/index.tsx @@ -0,0 +1,12 @@ +import { CompileOptions, compile } from '../actions/compile'; + +export type MDXContentProps = CompileOptions; + +export async function MDXContent(props: MDXContentProps) { + if (props.source === undefined) { + return null; + } + + const content = await compile(props); + return content; +} diff --git a/packages/site-components-next/src/SearchInput/index.tsx b/packages/site-components-next/src/SearchInput/index.tsx new file mode 100644 index 00000000..7d2cf719 --- /dev/null +++ b/packages/site-components-next/src/SearchInput/index.tsx @@ -0,0 +1,12 @@ +import { SearchInput as UI } from '@jpmorganchase/mosaic-site-components'; +import { loadMosaicData } from '@jpmorganchase/mosaic-loaders'; +import { SearchConfig, SearchIndex } from '@jpmorganchase/mosaic-types'; + +export async function SearchInput() { + const [searchConfig, searchIndex] = await Promise.all([ + loadMosaicData('search-config.json'), + loadMosaicData('search-data.json') + ]); + + return ; +} diff --git a/packages/site-components-next/src/Sidebar/index.tsx b/packages/site-components-next/src/Sidebar/index.tsx new file mode 100644 index 00000000..4d5339c1 --- /dev/null +++ b/packages/site-components-next/src/Sidebar/index.tsx @@ -0,0 +1,18 @@ +import type { loadPage } from '@jpmorganchase/mosaic-loaders'; +import { PageNavigation as UI } from '@jpmorganchase/mosaic-site-components'; +import type { Breadcrumb } from '@jpmorganchase/mosaic-types'; + +function getIds(breadcrumbs: Breadcrumb[]) { + return new Set(breadcrumbs.map(({ id }) => id.substr(0, id.lastIndexOf('.')))); +} + +export async function Sidebar({ path, loader }: { path: string; loader: typeof loadPage }) { + const { data } = await loader(path); + const props = { + menu: data?.sidebarData || [], + selectedNodeId: data?.route, + selectedGroupIds: getIds(data?.breadcrumbs || []) + }; + + return ; +} diff --git a/packages/site-components-next/src/TOC/index.tsx b/packages/site-components-next/src/TOC/index.tsx new file mode 100644 index 00000000..8765aa57 --- /dev/null +++ b/packages/site-components-next/src/TOC/index.tsx @@ -0,0 +1,16 @@ +import { loadPage } from '@jpmorganchase/mosaic-loaders'; +import { TableOfContents as UI, type TOCItem } from '@jpmorganchase/mosaic-site-components'; + +export async function TableOfContents({ + path, + loader, + items +}: { + path: string; + loader: typeof loadPage; + items?: TOCItem[]; +}) { + const { data } = await loader(path); + const tableOfContents = data?.tableOfContents || []; + return ; +} diff --git a/packages/site-components-next/src/actions/compile.ts b/packages/site-components-next/src/actions/compile.ts new file mode 100644 index 00000000..10cd7aaf --- /dev/null +++ b/packages/site-components-next/src/actions/compile.ts @@ -0,0 +1,49 @@ +import { compileMDX } from '@daviereid/next-mdx-remote/rsc'; +import remarkGfm from 'remark-gfm'; +import rehypeSlug from 'rehype-slug'; +import rehypePrettyCode, { type Options } from 'rehype-pretty-code'; +import type { MDXComponents } from 'mdx/types'; +import type { SiteState } from '@jpmorganchase/mosaic-loaders'; + +const defaultLangPrettyCodeOptions: Partial = { + theme: { dark: 'night-owl', light: 'light-plus' }, + defaultLang: 'js', + keepBackground: false +}; + +export type CompileOptions = { + source: string; + components: MDXComponents; + data?: Partial; + rehypePlugins?: any[]; + remarkPlugins?: any[]; + parseFrontmatter?: boolean; + prettyCodeOptions?: Options; +}; + +export async function compile({ + source, + data = {}, + components, + rehypePlugins = [], + remarkPlugins = [], + parseFrontmatter = false, + prettyCodeOptions = defaultLangPrettyCodeOptions +}: CompileOptions) { + const { content } = await compileMDX({ + source, + components, + options: { + scope: { meta: data }, + mdxOptions: { + rehypePlugins: [rehypeSlug, [rehypePrettyCode, prettyCodeOptions], ...rehypePlugins], + remarkPlugins: [remarkGfm, ...remarkPlugins] + }, + parseFrontmatter + } + }); + + return content; +} + +export type CompileAction = typeof compile; diff --git a/packages/site-components-next/src/actions/preview.ts b/packages/site-components-next/src/actions/preview.ts new file mode 100644 index 00000000..2aabb44d --- /dev/null +++ b/packages/site-components-next/src/actions/preview.ts @@ -0,0 +1,37 @@ +import { SiteState } from '@jpmorganchase/mosaic-loaders'; +import { compile, type CompileOptions } from './compile'; +import { mdxComponents } from '../mdx'; + +export type PreviewActionOptions = { + source: string; + data?: Partial; + components?: CompileOptions['components']; +}; + +/** + * + * This is a wrapper around the compile function that handles errors. + * + * When previewing content in the editor we expect errors + * so want to show them in toasts and not redirect to the main error page + */ +export async function preview({ + components = mdxComponents, + ...restOptions +}: PreviewActionOptions) { + try { + const result = await compile({ ...restOptions, components }); + return { result }; + } catch (e) { + if (e instanceof Error) { + return { + result: undefined, + error: e.message + }; + } + + throw e; + } +} + +export type PreviewAction = typeof preview; diff --git a/packages/site-components-next/src/index.ts b/packages/site-components-next/src/index.ts new file mode 100644 index 00000000..d4ef8940 --- /dev/null +++ b/packages/site-components-next/src/index.ts @@ -0,0 +1,14 @@ +import 'server-only'; +import { compile, CompileAction } from './actions/compile'; +import { preview, PreviewAction } from './actions/preview'; + +export * from './AppHeader'; +export * from './Breadcrumbs'; +export * from './DocPaginator'; +export * from './Footer'; +export * from './Sidebar'; +export * from './TOC'; +export * from './mdx'; +export * from './MDXContent'; + +export { compile, type CompileAction, preview, type PreviewAction }; diff --git a/packages/site-components-next/src/mdx/elements.ts b/packages/site-components-next/src/mdx/elements.ts new file mode 100644 index 00000000..bc6f8573 --- /dev/null +++ b/packages/site-components-next/src/mdx/elements.ts @@ -0,0 +1,34 @@ +import { + a, + em, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + li, + ol, + p, + ul, + inlineCode +} from '@jpmorganchase/mosaic-mdx-components'; +import type { MDXComponents } from 'mdx/types'; + +export const mdxElements = { + a, + em, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + li, + ol, + p, + ul, + code: inlineCode +} as unknown as MDXComponents; diff --git a/packages/site-components-next/src/mdx/index.tsx b/packages/site-components-next/src/mdx/index.tsx new file mode 100644 index 00000000..940ea448 --- /dev/null +++ b/packages/site-components-next/src/mdx/index.tsx @@ -0,0 +1,239 @@ +import type { MDXComponents } from 'mdx/types'; + +import { + Accordion, + AccordionDetails, + AccordionSection, + AccordionSummary, + Action1, + Action2, + Action3, + Action4, + Action5, + Action6, + Action7, + Action8, + Amount, + AudioPlayer, + Button, + blockquote, + Callout, + Caption1, + Caption2, + Caption3, + Caption4, + Caption5, + Caption6, + Card, + Cards, + ComponentExample, + DataTable, + EditionTileLink, + Eyebrow, + Feature, + FeatureActions, + FeatureContent, + FeatureEyebrow, + FeatureTitle, + Features, + FilterView, + FilterDropdown, + FilterToolbar, + FilterNoResults, + FilterPillGroup, + FilterSortDropdown, + FilterSearch, + FilterResultCount, + Grid, + GridBase, + H0, + H1, + H2, + H3, + H4, + H5, + H6, + HelpLinks, + Hero, + inlineCode, + Icon, + Impact, + Impacts, + Label, + Link, + LinkBase, + LinkButton, + LinkText, + Links, + ListItem, + OpenAPI, + OrderedList, + P1, + P2, + P3, + P4, + P5, + P6, + PageFilterView, + SecondaryNavbar, + SectionHeading, + strong, + StickyHeader, + Story, + Subtitle1, + Subtitle2, + Subtitle3, + Subtitle4, + Subtitle5, + Subtitle6, + table, + Table, + Tag, + Tabs, + Tab, + TabsBase, + tbody, + Tbody, + td, + Td, + thead, + Thead, + th, + Th, + Tiles, + TileBase, + TileButton, + TileContent, + TileContentLabel, + TileLink, + tr, + Tr, + UnorderedList, + View, + ViewStack, + VideoPlayer, + Watermark +} from '@jpmorganchase/mosaic-mdx-components'; + +import { EditionFilterView } from '../EditionFilterView'; + +import { mdxElements } from './elements'; + +export const mdxComponents = { + ...mdxElements, + Accordion, + AccordionDetails, + AccordionSection, + AccordionSummary, + Action1, + Action2, + Action3, + Action4, + Action5, + Action6, + Action7, + Action8, + Amount, + AudioPlayer, + Button, + blockquote, + Callout, + Caption1, + Caption2, + Caption3, + Caption4, + Caption5, + Caption6, + Card, + Cards, + ComponentExample, + DataTable, + Emphasis: mdxElements.em, + EditionFilterView, + EditionTileLink, + Eyebrow, + Feature, + FeatureActions, + FeatureContent, + FeatureEyebrow, + FeatureTitle, + Features, + FilterView, + FilterDropdown, + FilterToolbar, + FilterNoResults, + FilterPillGroup, + FilterSortDropdown, + FilterSearch, + FilterResultCount, + Grid, + GridBase, + H0, + H1, + H2, + H3, + H4, + H5, + H6, + HelpLinks, + Hero, + inlineCode, + Icon, + Impact, + Impacts, + Label, + Link, + LinkBase, + LinkButton, + LinkText, + Links, + ListItem, + OpenAPI, + OrderedList, + P1, + P2, + P3, + P4, + P5, + P6, + PageFilterView, + SecondaryNavbar, + SectionHeading, + strong, + Strong: strong, + StickyHeader, + Story, + Subtitle1, + Subtitle2, + Subtitle3, + Subtitle4, + Subtitle5, + Subtitle6, + table, + Table, + Tag, + Tabs, + Tab, + TabsBase, + tbody, + Tbody, + td, + Td, + thead, + Thead, + th, + Th, + Tiles, + TileBase, + TileButton, + TileContent, + TileContentLabel, + TileLink, + tr, + Tr, + UnorderedList, + View, + VideoPlayer, + ViewStack, + Watermark +} as unknown as MDXComponents; diff --git a/packages/site-components-next/tsconfig.json b/packages/site-components-next/tsconfig.json new file mode 100644 index 00000000..a179de40 --- /dev/null +++ b/packages/site-components-next/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.bundle.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src"] +} diff --git a/packages/site-components/package.json b/packages/site-components/package.json index 282be0e3..ad3acfea 100644 --- a/packages/site-components/package.json +++ b/packages/site-components/package.json @@ -37,22 +37,21 @@ "@vanilla-extract/esbuild-plugin": "^2.3.11", "del-cli": "^4.0.1", "next-router-mock": "^0.9.13", - "typescript": "^4.8.3" + "typescript": "^5.2.2" }, "dependencies": { "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", "@jpmorganchase/mosaic-content-editor-plugin": "^0.1.0-beta.89", "@jpmorganchase/mosaic-labs-components": "^0.1.0-beta.89", "@jpmorganchase/mosaic-open-api-component": "^0.1.0-beta.89", - "@jpmorganchase/mosaic-site-middleware": "^0.1.0-beta.89", "@jpmorganchase/mosaic-store": "^0.1.0-beta.89", "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", "@salt-ds/core": "^1.33.0", "@salt-ds/lab": "1.0.0-alpha.50", "@types/mdast": "^3.0.0", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/recipes": "^0.2.1", - "@vanilla-extract/sprinkles": "^1.3.0", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/recipes": "^0.5.1", + "@vanilla-extract/sprinkles": "^1.6.1", "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "clsx": "^2.0.0", @@ -62,17 +61,12 @@ "jwt-decode": "^3.1.2", "lodash-es": "^4.17.21", "next": "^14.0.0", - "next-mdx-remote": "^5.0.0", "node-cookie": "^2.1.2", "react-error-boundary": "^4.0.11", - "rehype-slug": "^6.0.0", - "swr": "^2.1.2", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", "warning": "^3.0.0" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "next-auth": "^4.22.1", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/packages/site-components/src/404.tsx b/packages/site-components/src/404.tsx index 2c07c6d3..8f6cd3cf 100644 --- a/packages/site-components/src/404.tsx +++ b/packages/site-components/src/404.tsx @@ -1,13 +1,9 @@ import React from 'react'; -import { Hero } from '@jpmorganchase/mosaic-components'; +import { Hero, HeroProps } from '@jpmorganchase/mosaic-components'; -export function Page404() { - return ( - - ); -} +export const Page404: React.FC = ({ + children, + description = "Sorry, looks like something's wrong here.", + title = 'Page Not Found', + ...rest +}) => ; diff --git a/packages/site-components/src/500.tsx b/packages/site-components/src/500.tsx index 2755351f..88c1aa63 100644 --- a/packages/site-components/src/500.tsx +++ b/packages/site-components/src/500.tsx @@ -1,13 +1,13 @@ import React from 'react'; -import { Hero } from '@jpmorganchase/mosaic-components'; +import { Hero, HeroProps } from '@jpmorganchase/mosaic-components'; -export function Page500() { - return ( - - ); -} +export const Page500: React.FC = ({ + children, + description = 'A 500 error occurred.', + title = 'Whoops! something went wrong', + ...rest +}) => ( + + {children} + +); diff --git a/packages/site-components/src/AppHeader/AppHeader.tsx b/packages/site-components/src/AppHeader/AppHeader.tsx index eadd3969..31d6fe32 100644 --- a/packages/site-components/src/AppHeader/AppHeader.tsx +++ b/packages/site-components/src/AppHeader/AppHeader.tsx @@ -3,7 +3,6 @@ import { Text } from '@salt-ds/core'; import { Logo, LogoImage } from '@salt-ds/lab'; import { useBreakpoint, Link } from '@jpmorganchase/mosaic-components'; import type { TabsMenu } from '@jpmorganchase/mosaic-components'; -import { useRoute } from '@jpmorganchase/mosaic-store'; import { AppHeaderControls } from '../AppHeaderControls'; import { AppHeaderDrawer } from '../AppHeaderDrawer'; @@ -15,6 +14,7 @@ export type AppHeaderProps = { logo?: string; menu?: TabsMenu; title?: string; + children: React.ReactNode; }; const createDrawerMenu = menu => @@ -31,9 +31,8 @@ const createDrawerMenu = menu => return [...result, parsedItem]; }, []); -export const AppHeader: React.FC = ({ homeLink, logo, menu = [], title }) => { +export const AppHeader: React.FC = ({ children, homeLink, logo, menu = [], title }) => { const breakpoint = useBreakpoint(); - const { route } = useRoute(); const showDrawer = breakpoint === 'mobile' || breakpoint === 'tablet'; return ( @@ -50,8 +49,8 @@ export const AppHeader: React.FC = ({ homeLink, logo, menu = [], )} )} - {!showDrawer && } - + {!showDrawer && } + {children} ); diff --git a/packages/site-components/src/AppHeader/index.ts b/packages/site-components/src/AppHeader/index.ts index dc1ce3b8..ffd39ab6 100644 --- a/packages/site-components/src/AppHeader/index.ts +++ b/packages/site-components/src/AppHeader/index.ts @@ -1,5 +1 @@ -import { withAppHeaderAdapter } from './withAppHeaderAdapter'; -import { AppHeader as OriginalAppHeader } from './AppHeader'; - -export { withAppHeaderAdapter } from './withAppHeaderAdapter'; -export const AppHeader = withAppHeaderAdapter(OriginalAppHeader); +export { AppHeader } from './AppHeader'; diff --git a/packages/site-components/src/AppHeader/withAppHeaderAdapter.tsx b/packages/site-components/src/AppHeader/withAppHeaderAdapter.tsx deleted file mode 100644 index 5a85bdaf..00000000 --- a/packages/site-components/src/AppHeader/withAppHeaderAdapter.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import type { TabsLinkItem, TabsMenu, TabsMenuButtonItem } from '@jpmorganchase/mosaic-components'; -import { TabMenuItemType } from '@jpmorganchase/mosaic-components'; -import type { - MenuLinkItem, - AppHeaderMenuLinksItem, - AppHeaderMenuLinkItem -} from '@jpmorganchase/mosaic-store'; -import { useAppHeader, AppHeaderMenu, MenuItemType } from '@jpmorganchase/mosaic-store'; - -function createTabsMenu(menu: AppHeaderMenu): TabsMenu { - const tabsMenu = menu.reduce<(TabsMenuButtonItem | TabsLinkItem)[]>((result, menuItem) => { - const menu = menuItem as AppHeaderMenuLinksItem; - const link = menuItem as AppHeaderMenuLinkItem; - if (menu && menu.type === MenuItemType.MENU) { - const tabsLinksItem: TabsMenuButtonItem = { - title: menu.title, - type: TabMenuItemType.MENU, - links: menu.links.map(({ title, link }: MenuLinkItem) => ({ - type: TabMenuItemType.LINK, - title, - link - })), - onSelect: () => undefined - }; - return [...result, tabsLinksItem]; - } else if (link && link.type === MenuItemType.LINK) { - const tabsLinkItem: TabsLinkItem = { - title: link.title, - type: TabMenuItemType.LINK, - link: link.link - }; - return [...result, tabsLinkItem]; - } - console.error('Unknown Menu item passed to createTabsMenu, ignoring', menu); - return result; - }, []); - return tabsMenu; -} - -export const withAppHeaderAdapter = Component => () => { - const headerConfig = useAppHeader(); - const { homeLink, logo, menu: menuItems = [], title } = headerConfig || {}; - const tabsMenu = createTabsMenu(menuItems); - return ; -}; diff --git a/packages/site-components/src/AppHeaderControls/index.tsx b/packages/site-components/src/AppHeaderControls/index.tsx index 17844f04..3d51ef74 100644 --- a/packages/site-components/src/AppHeaderControls/index.tsx +++ b/packages/site-components/src/AppHeaderControls/index.tsx @@ -1,12 +1,11 @@ -import React from 'react'; +import { ReactNode } from 'react'; import { Icon, Link, Button } from '@jpmorganchase/mosaic-components'; import { Menu, MenuTrigger, MenuPanel, MenuItem } from '@salt-ds/core'; import { useContentEditor, EditorControls } from '@jpmorganchase/mosaic-content-editor-plugin'; -import { useColorMode, useSearchIndex, useStoreActions } from '@jpmorganchase/mosaic-store'; +import { useColorMode } from '@jpmorganchase/mosaic-store'; import { useSession } from 'next-auth/react'; import { UserProfile } from '../UserProfile'; -import { SearchInput } from '../SearchInput'; import styles from './styles.css'; type ActionMenuItem = { @@ -19,15 +18,13 @@ function toUpperFirst(str) { return `${str.charAt(0).toUpperCase()}${str.slice(1)}`; } -export const AppHeaderControls: React.FC = () => { - const colorMode = useColorMode(); - const { setColorMode } = useStoreActions(); +export const AppHeaderControls = ({ children }: { children?: ReactNode }) => { + const { colorMode, setColorMode } = useColorMode(); const { data: session } = useSession(); const isLoginEnabled = process.env.NEXT_PUBLIC_ENABLE_LOGIN === 'true' || false; const isLoggedIn = session != null; const { pageState, startEditing, stopEditing } = useContentEditor(); - const { searchEnabled } = useSearchIndex(); const inverseColorMode = colorMode === 'dark' ? 'light' : 'dark'; let actionMenuOptions: ActionMenuItem[] = [ @@ -63,7 +60,7 @@ export const AppHeaderControls: React.FC = () => { return (
    {isLoginEnabled && } - {searchEnabled && } + {children} {isLoginEnabled && (
    {isLoggedIn ? ( diff --git a/packages/site-components/src/AppHeaderTabs/index.tsx b/packages/site-components/src/AppHeaderTabs/index.tsx index 4e007b43..225a1ec2 100644 --- a/packages/site-components/src/AppHeaderTabs/index.tsx +++ b/packages/site-components/src/AppHeaderTabs/index.tsx @@ -1,18 +1,19 @@ import React, { useEffect, useState } from 'react'; -import { useRouter } from 'next/router'; -import { hasProtocol, TabsBase, TabMenuItemType } from '@jpmorganchase/mosaic-components'; +import { useRouter, usePathname } from 'next/navigation'; +import { hasProtocol, TabsBase } from '@jpmorganchase/mosaic-components'; import type { TabsMenu, TabsMenuButtonItem, TabsLinkItem } from '@jpmorganchase/mosaic-components'; import { useWindowResize, Size } from './useWindowResize'; export type { TabsMenu } from '@jpmorganchase/mosaic-components'; -function resolveSelectedIndex(menu, itemPath) { +function resolveSelectedIndex(menu, itemPath: string) { let selectedIndex = -1; let longestMatch = 0; for (let i = 0; i < menu.length; i++) { const item: TabsMenuButtonItem | TabsLinkItem = menu[i]; - if (item.type === TabMenuItemType.MENU) { + + if (item.type === 'menu') { // eslint-disable-next-line no-restricted-syntax for (const { link: subLink } of item.links) { // If menu link matches the current route - we can return this index @@ -31,11 +32,14 @@ function resolveSelectedIndex(menu, itemPath) { if (item.link === itemPath) { return i; } + + // remove "/index" from the end of the item link + const indexTrimmedLinkPath = item.link.slice(0, -'/index'.length); // If current item is contained within part of route (e.g. /case-studies when route is /case-studies/item) // and the link will be the longest matching one we've seen so far (longest means closest match) - if (itemPath.startsWith(item.link) && item.link.length > longestMatch) { + if (itemPath.startsWith(indexTrimmedLinkPath) && indexTrimmedLinkPath.length > longestMatch) { selectedIndex = i; - longestMatch = item.link.length; + longestMatch = indexTrimmedLinkPath.length; } } } @@ -49,6 +53,7 @@ export function AppHeaderTabs({ menu = [] }: { menu: TabsMenu }) { itemPath => resolveSelectedIndex(menu, itemPath), [menu] ); + const pathname = usePathname(); const [selectionIndex, setSelectionIndex] = useState(() => -1); @@ -57,23 +62,12 @@ export function AppHeaderTabs({ menu = [] }: { menu: TabsMenu }) { setSelectionIndex(currentSelection); }; - const handleRouteChangeComplete = (newRoute: string) => updateSelection(newRoute); - - useEffect(() => { - router.events.on('routeChangeComplete', handleRouteChangeComplete); - - return () => { - router.events.off('routeChangeComplete', handleRouteChangeComplete); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - useEffect(() => { - if (router.asPath && size?.width) { - updateSelection(router.asPath); + if (pathname && size?.width) { + updateSelection(pathname); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router, size]); + }, [pathname, size]); const handleMenuSelect = (_event, sourceItem) => { const { link } = sourceItem as TabsLinkItem; @@ -84,7 +78,7 @@ export function AppHeaderTabs({ menu = [] }: { menu: TabsMenu }) { } }; const linkedMenu = menu.map(menuItem => { - if (menuItem.type === TabMenuItemType.MENU) { + if (menuItem.type === 'menu') { return { ...menuItem, onSelect: handleMenuSelect }; } return menuItem; diff --git a/packages/site-components/src/BaseUrlProvider.tsx b/packages/site-components/src/BaseUrlProvider.tsx deleted file mode 100644 index 79a895fb..00000000 --- a/packages/site-components/src/BaseUrlProvider.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React, { createContext, Context, useContext } from 'react'; -import { hasProtocol } from '@jpmorganchase/mosaic-components'; -import { useRoute } from '@jpmorganchase/mosaic-store'; - -// The pathname of the current route. We don't get this from router, as we want the full -// path including the /index on index pages. -export type BaseUrlValue = string; - -export const BaseUrlContext: Context = createContext('/'); -export const BaseUrlProvider = ({ children }) => { - const { route = '/' } = useRoute(); - return {children}; -}; - -function resolveRelativeUrl(href: string, baseRoute: string) { - if (hasProtocol(href) || href.startsWith('#') || !href.startsWith('.')) { - return href; - } - if (!baseRoute) { - throw new Error('Cannot resolve relative url as base route is undefined'); - } - const url = new URL('http://jpmorgan.com'); - const anchorMatches = href.match(/(.*)#(.*)/); - if (anchorMatches && anchorMatches[2]) { - // Anchors will get encoded to %23 if set on URL - url.pathname = `${baseRoute}/../${anchorMatches[1]}`; - return `${url.pathname}#${anchorMatches[2]}`; - } - url.pathname = `${baseRoute}/../${href}`; - return url.pathname; -} - -export const useBaseRoute = () => useContext(BaseUrlContext); - -export const useResolveRelativeUrl = href => { - const baseRoute = useContext(BaseUrlContext); - - return resolveRelativeUrl(href, baseRoute); -}; diff --git a/packages/site-components/src/Body.tsx b/packages/site-components/src/Body.tsx deleted file mode 100644 index 25322d35..00000000 --- a/packages/site-components/src/Body.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React, { useEffect } from 'react'; -import { MDXRemote } from 'next-mdx-remote'; -import { ErrorBoundary, useErrorBoundary } from 'react-error-boundary'; -import { useContentEditor, Editor } from '@jpmorganchase/mosaic-content-editor-plugin'; -import { useSession } from 'next-auth/react'; -import { useRouter } from 'next/router'; - -import { createMDXScope } from './utils/createMDXScope'; -import { Page500 } from './500'; -import { Page404 } from './404'; - -const DefaultFallBackComponent = ({ error: { message: errorMessage = 'unknown' } }) => { - const router = useRouter(); - const { resetBoundary } = useErrorBoundary(); - - useEffect(() => { - const handleRouteChange = () => { - resetBoundary(); - }; - - router.events.on('routeChangeComplete', handleRouteChange); - - return () => { - router.events.off('routeChangeComplete', handleRouteChange); - }; - }, [router, resetBoundary]); - console.error('An un-handled error created a 500 message'); - console.error(errorMessage); - return ; -}; - -function MDXRemoteWithErrorBoundary({ components, source, meta = {} }) { - return ( - - - - ); -} - -export function Body({ components = {}, type, ...props }) { - const { pageState } = useContentEditor(); - const { data: session } = useSession(); - - if (props.show404) { - return ; - } - if (props.show500) { - return ; - } - - if (pageState !== 'VIEW' && session !== null && type === 'mdx') { - return ( - - ); - } - - if (type === 'mdx') { - return ( -
    - -
    - ); - } - // If file is JSON, we expect it to have a `content` attr - if (type === 'json') { - return
    {props.content}
    ; - } - return
    Unsupported file type
    ; -} diff --git a/packages/site-components/src/Breadcrumbs/Breadcrumb.tsx b/packages/site-components/src/Breadcrumbs/Breadcrumb.tsx index a1aa18a1..c5b68b6f 100644 --- a/packages/site-components/src/Breadcrumbs/Breadcrumb.tsx +++ b/packages/site-components/src/Breadcrumbs/Breadcrumb.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, ReactNode } from 'react'; +import { forwardRef, ReactNode } from 'react'; import { Icon, Link } from '@jpmorganchase/mosaic-components'; import styles from './styles.css'; diff --git a/packages/site-components/src/Breadcrumbs/Breadcrumbs.tsx b/packages/site-components/src/Breadcrumbs/Breadcrumbs.tsx index f3dcfbeb..63c39f21 100644 --- a/packages/site-components/src/Breadcrumbs/Breadcrumbs.tsx +++ b/packages/site-components/src/Breadcrumbs/Breadcrumbs.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { useRouter } from 'next/router'; +import { useRouter } from 'next/navigation'; import { Menu, MenuItem, MenuPanel, MenuTrigger } from '@salt-ds/core'; import { Button, Icon } from '@jpmorganchase/mosaic-components'; +import { Breadcrumb } from './Breadcrumb'; import styles from './styles.css'; -import { Breadcrumb } from './Breadcrumb'; export type BreadcrumbProps = { id: string; diff --git a/packages/site-components/src/Breadcrumbs/index.ts b/packages/site-components/src/Breadcrumbs/index.ts index f9c87f55..2ec57c85 100644 --- a/packages/site-components/src/Breadcrumbs/index.ts +++ b/packages/site-components/src/Breadcrumbs/index.ts @@ -1,7 +1,2 @@ -import { withBreadcrumbsAdapter } from './withBreadcrumbsAdapter'; -import { Breadcrumbs as OriginalBreadcrumbs } from './Breadcrumbs'; - -export type { Breadcrumb } from './Breadcrumb'; - -export { withBreadcrumbsAdapter } from './withBreadcrumbsAdapter'; -export const Breadcrumbs = withBreadcrumbsAdapter(OriginalBreadcrumbs); +export { type Breadcrumb } from './Breadcrumb'; +export { Breadcrumbs } from './Breadcrumbs'; diff --git a/packages/site-components/src/Breadcrumbs/withBreadcrumbsAdapter.tsx b/packages/site-components/src/Breadcrumbs/withBreadcrumbsAdapter.tsx deleted file mode 100644 index c6b17ab5..00000000 --- a/packages/site-components/src/Breadcrumbs/withBreadcrumbsAdapter.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import { useBreadcrumbs } from '@jpmorganchase/mosaic-store'; - -export const withBreadcrumbsAdapter = Component => () => { - const { breadcrumbs, enabled } = useBreadcrumbs(); - return ; -}; diff --git a/packages/site-components/src/DocPaginator/DocPaginator.tsx b/packages/site-components/src/DocPaginator/DocPaginator.tsx index 2c03a513..2ca29dcf 100644 --- a/packages/site-components/src/DocPaginator/DocPaginator.tsx +++ b/packages/site-components/src/DocPaginator/DocPaginator.tsx @@ -1,12 +1,9 @@ -import React, { useEffect } from 'react'; -import { Link, P6, P3, TileBase, Icon } from '@jpmorganchase/mosaic-components'; import classnames from 'clsx'; -import { useRouter } from 'next/router'; +import { Link, P6, P3, TileBase, Icon } from '@jpmorganchase/mosaic-components'; +import { NavigationLink } from '@jpmorganchase/mosaic-types'; import styles from './styles.css'; -import { NavigationLink } from '@jpmorganchase/mosaic-store'; - export interface DocPaginatorProps { /** Link label suffix */ linkSuffix: string; @@ -16,62 +13,37 @@ export interface DocPaginatorProps { prev?: NavigationLink; } -export const DocPaginator: React.FC = ({ linkSuffix, next, prev }) => { - const router = useRouter(); - - const handleRouteChangeComplete = () => { - setTimeout(() => { - if (window.pageYOffset > 0) { - window.scroll({ - top: 0, - left: 0, - behavior: 'smooth' - }); - } - }, 300); - }; - - useEffect(() => { - router.events.on('routeChangeComplete', handleRouteChangeComplete); - - return () => { - router.events.off('routeChangeComplete', handleRouteChangeComplete); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( -
    -
    - {prev && ( - - - - Previous {linkSuffix} - - - {prev.group ? `${prev.group} / ${prev.title}` : prev.title} - - - - - )} -
    -
    - {next && ( - - - - Next {linkSuffix} - - - {next.group ? `${next.group} / ${next.title}` : next.title} - - - - - )} -
    +export const DocPaginator = ({ linkSuffix, next, prev }: DocPaginatorProps) => ( +
    +
    + {prev && ( + + + + Previous {linkSuffix} + + + {prev.group ? `${prev.group} / ${prev.title}` : prev.title} + + + + + )} +
    +
    + {next && ( + + + + Next {linkSuffix} + + + {next.group ? `${next.group} / ${next.title}` : next.title} + + + + + )}
    - ); -}; +
    +); diff --git a/packages/site-components/src/DocPaginator/index.ts b/packages/site-components/src/DocPaginator/index.ts index 78fe6cd0..6c790afa 100644 --- a/packages/site-components/src/DocPaginator/index.ts +++ b/packages/site-components/src/DocPaginator/index.ts @@ -1,5 +1 @@ -import { withNavigationAdapter } from './withNavigationAdapter'; -import { DocPaginator as OriginalDocPaginator } from './DocPaginator'; - -export { withNavigationAdapter } from './withNavigationAdapter'; -export const DocPaginator = withNavigationAdapter(OriginalDocPaginator); +export * from './DocPaginator'; diff --git a/packages/site-components/src/DocPaginator/withNavigationAdapter.tsx b/packages/site-components/src/DocPaginator/withNavigationAdapter.tsx deleted file mode 100644 index f3601063..00000000 --- a/packages/site-components/src/DocPaginator/withNavigationAdapter.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { useNavigation } from '@jpmorganchase/mosaic-store'; - -export const withNavigationAdapter = - Component => - ({ linkSuffix = 'Page' }) => { - const { next, prev } = useNavigation(); - return ; - }; diff --git a/packages/site-components/src/Document.tsx b/packages/site-components/src/Document.tsx deleted file mode 100644 index 26152f16..00000000 --- a/packages/site-components/src/Document.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import React from 'react'; -import NextDocument, { Html, Head, NextScript, Main } from 'next/document'; - -export type { DocumentProps } from 'next/document'; - -export class Document extends NextDocument { - render() { - return ( - - - -
    - - - - ); - } -} diff --git a/packages/site-components/src/Drawer/index.tsx b/packages/site-components/src/Drawer/index.tsx index 56874ffd..b5d2d7b2 100644 --- a/packages/site-components/src/Drawer/index.tsx +++ b/packages/site-components/src/Drawer/index.tsx @@ -1,11 +1,11 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, { useRef, useState } from 'react'; import { createPortal } from 'react-dom'; import classNames from 'clsx'; -import { useRoute } from '@jpmorganchase/mosaic-store'; import { LayerLayout } from '@salt-ds/lab'; -import styles from './styles.css'; import { Button, Icon, useOutsideClick } from '@jpmorganchase/mosaic-components'; +import styles from './styles.css'; + export type TriggerElementProps = { /** open state of drawer */ open: boolean; @@ -25,21 +25,11 @@ export function Drawer({ children, TriggerElement, side }: DrawerProps) { const triggerRef = useRef(null); const rootRef = useOutsideClick(triggerRef, () => setOpen(false)); - const { route } = useRoute(); - const handleNavigationToggle = () => { setOpen(!open); }; - const [isClient, setIsClient] = useState(false); - - useEffect(() => { - // Close drawer whenever a page loads - setOpen(false); - setIsClient(true); - }, [route]); - - const portalRoot = isClient ? document.querySelector('[data-mosaic-id="portal-root"]') : null; + const portalRoot = document.querySelector('[data-mosaic-id="portal-root"]'); return ( <>
    diff --git a/packages/site-components/src/Drawer/styles.css.ts b/packages/site-components/src/Drawer/styles.css.ts index 3ea7364b..6586185b 100644 --- a/packages/site-components/src/Drawer/styles.css.ts +++ b/packages/site-components/src/Drawer/styles.css.ts @@ -11,7 +11,6 @@ export default { paragraph({ variant: 'paragraph2' }) ]), layerLayout: style({ - background: 'inherit !important', padding: '0px', margin: '0px' }), @@ -27,17 +26,18 @@ export default { { selectors: { ['.saltButton.&']: { - position: 'absolute' + position: 'absolute', + top: '10px' } } }, button({ variant: 'square' }) ]), leftCloseButton: style({ - right: '0px' + right: '10px' }), rightCloseButton: style({ - left: '0px' + left: '10px' }), openLeft: animation({ variant: 'leftSlideIn' }), closeLeft: animation({ variant: 'leftSlideOut' }), diff --git a/packages/site-components/src/Footer/index.ts b/packages/site-components/src/Footer/index.ts index f6a7f6cd..ddcc5a9c 100644 --- a/packages/site-components/src/Footer/index.ts +++ b/packages/site-components/src/Footer/index.ts @@ -1,6 +1 @@ -import { withFooterAdapter } from './withFooterAdapter'; -import { Footer as OriginalFooter } from './Footer'; - -export type { FooterProps } from './Footer'; - -export const Footer = withFooterAdapter(OriginalFooter); +export * from './Footer'; diff --git a/packages/site-components/src/Footer/withFooterAdapter.tsx b/packages/site-components/src/Footer/withFooterAdapter.tsx deleted file mode 100644 index de317161..00000000 --- a/packages/site-components/src/Footer/withFooterAdapter.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import { useFooter } from '@jpmorganchase/mosaic-store'; - -export const withFooterAdapter = Component => () => { - const props = useFooter(); - return ; -}; diff --git a/packages/site-components/src/HTMLView.tsx b/packages/site-components/src/HTMLView.tsx deleted file mode 100644 index 681eff61..00000000 --- a/packages/site-components/src/HTMLView.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React, { useEffect } from 'react'; - -const embeddedWebViewInitialized = false; - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - 'embedded-webview': { html: string } & Partial; - } - } -} - -function initEmbeddedWebView() { - if (typeof window === 'undefined') { - return; - } - - if (embeddedWebViewInitialized) { - return; - } - - class EmbeddedWebview extends HTMLElement { - connectedCallback() { - if (typeof window !== 'undefined') { - const shadow = this.attachShadow({ mode: 'closed' }); - shadow.innerHTML = this.getAttribute('html') || ''; - } - } - } - - if (typeof window !== 'undefined' && !window.customElements.get('embedded-webview')) { - window.customElements.define('embedded-webview', EmbeddedWebview); - } -} - -export function HTMLView({ children }) { - useEffect(() => { - initEmbeddedWebView(); - }, []); - - if (typeof window === 'undefined') { - // eslint-disable-next-line react/no-danger - return
    ; - } - - return ; -} diff --git a/packages/site-components/src/Home/__tests__/index.test.tsx b/packages/site-components/src/Home/__tests__/index.test.tsx deleted file mode 100644 index eac0c541..00000000 --- a/packages/site-components/src/Home/__tests__/index.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import React from 'react'; -import { render } from '@testing-library/react'; - -import { Home } from '../index'; - -describe('GIVEN a Home component', () => { - test('THEN it renders children', () => { - const { getByText } = render( - - TEST - - ); - expect(getByText('TEST')).toBeDefined(); - }); -}); diff --git a/packages/site-components/src/Home/index.tsx b/packages/site-components/src/Home/index.tsx deleted file mode 100644 index 3075ada1..00000000 --- a/packages/site-components/src/Home/index.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react'; -import classnames from 'clsx'; -import { useImageComponent } from '@jpmorganchase/mosaic-components'; - -import styles from './styles.css'; - -export type HomeHeroProps = { - /** The child components representing Home's Hero content */ - children?: React.ReactNode; - /** Additional class name for root class override */ - className?: string; -}; -export const HomeHero: React.FC = ({ children, className, ...rest }) => ( -
    - {children} -
    -); - -export type HomeSectionProps = { - /** The child components representing a section within the Home component */ - children?: React.ReactNode; - /** Additional class name for root class override */ - className?: string; -}; -export const HomeSection: React.FC = ({ children, className, ...rest }) => ( -
    - {children} -
    -); - -function BackgroundImages() { - const ImageComponent = useImageComponent(); - - return ( - <> -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - ); -} - -export type HomeProps = { - /** The children components of the Section component */ - children?: React.ReactNode; - /** Additional class name for root class override */ - className?: string; -}; - -export interface HomeComposition { - /** The initial hero section of the Home component */ - Hero?: typeof HomeHero; - /** A content section for the Home component */ - Section?: typeof HomeSection; -} - -export const Home: React.FC & HomeComposition = ({ children, className, ...rest }) => ( -
    - - {children} -
    -); - -Home.Hero = HomeHero; -Home.Section = HomeSection; diff --git a/packages/site-components/src/Home/styles.css.ts b/packages/site-components/src/Home/styles.css.ts deleted file mode 100644 index d7be48d7..00000000 --- a/packages/site-components/src/Home/styles.css.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { style } from '@vanilla-extract/css'; -import { responsiveSprinkles } from '@jpmorganchase/mosaic-theme'; - -export default { - section: responsiveSprinkles({ - marginTop: ['x30', 'x30', 'x30', 'x30'] - }), - main: responsiveSprinkles({ - marginBottom: ['x30', 'x30', 'x30', 'x30'] - }), - backgroundImage: style([ - responsiveSprinkles({ - display: ['none', 'none', 'inherit', 'inherit'] - }), - { - zIndex: -1, - pointerEvents: 'none', - userSelect: 'none', - position: 'absolute' - } - ]), - backgroundImage1: style({ - opacity: '0.25', - top: '702px', - left: '1251px', - width: '254px', - height: '193px' - }), - backgroundImage2: style({ - opacity: '0.5', - top: '772px', - left: '1121px', - width: '385px', - height: '214px' - }), - backgroundImage3: style({ - opacity: '0.15', - top: '1259px', - left: '1153px', - width: '629px', - height: '1024px' - }), - backgroundImage4: style({ - opacity: '0.15', - top: '2367px', - left: '1041px', - width: '750px', - height: '813px' - }), - backgroundImage5: style({ - opacity: '0.5', - top: '5100px', - left: '-51px', - width: '385px', - height: '214px' - }) -}; diff --git a/packages/site-components/src/Image/index.tsx b/packages/site-components/src/Image/index.tsx index b1772c16..56128f46 100644 --- a/packages/site-components/src/Image/index.tsx +++ b/packages/site-components/src/Image/index.tsx @@ -1,8 +1,7 @@ -import React, { FC, forwardRef, Ref } from 'react'; +import { FC, forwardRef, Ref } from 'react'; import NextImage, { type ImageProps as NextImageProps } from 'next/image'; import classnames from 'clsx'; -import { useResolveRelativeUrl } from '../BaseUrlProvider'; import styles from './styles.css'; export type ImageProps = Omit & { @@ -31,7 +30,6 @@ export const Image: FC = forwardRef( }, ref: Ref ) => { - const resolvedSrc = useResolveRelativeUrl(src); return (
    {fill || (width && height) ? ( @@ -41,16 +39,12 @@ export const Image: FC = forwardRef( {...rest} height={height} fill={fill} - src={src.match(/^(http[s]?:)?\/{1,2}/) === null ? resolvedSrc : src} + src={src} width={width} unoptimized={unoptimized} /> ) : ( - {alt} + {alt} )}
    ); diff --git a/packages/site-components/src/Link.tsx b/packages/site-components/src/Link.tsx index 008b3fe1..41bd3e49 100644 --- a/packages/site-components/src/Link.tsx +++ b/packages/site-components/src/Link.tsx @@ -1,7 +1,24 @@ import NextLink from 'next/link'; import React, { Ref } from 'react'; +import { hasProtocol } from '@jpmorganchase/mosaic-components'; -import { useResolveRelativeUrl } from './BaseUrlProvider'; +function resolveRelativeUrl(href: string, baseRoute: string) { + if (hasProtocol(href) || href.startsWith('#') || !href.startsWith('.')) { + return href; + } + if (!baseRoute) { + throw new Error('Cannot resolve relative url as base route is undefined'); + } + const url = new URL('http://jpmorgan.com'); + const anchorMatches = href.match(/(.*)#(.*)/); + if (anchorMatches && anchorMatches[2]) { + // Anchors will get encoded to %23 if set on URL + url.pathname = `${baseRoute}/../${anchorMatches[1]}`; + return `${url.pathname}#${anchorMatches[2]}`; + } + url.pathname = `${baseRoute}/../${href}`; + return url.pathname; +} interface LinkProps extends React.AnchorHTMLAttributes { href: string; @@ -11,7 +28,7 @@ export type LinkType = { link: string; text: string }; export const Link = React.forwardRef( ({ href = '', ...props }: LinkProps, ref: Ref) => { - const url = useResolveRelativeUrl(href); + const url = resolveRelativeUrl(href, '/'); return ; } diff --git a/packages/site-components/src/Metadata.tsx b/packages/site-components/src/Metadata.tsx deleted file mode 100644 index bb4b2548..00000000 --- a/packages/site-components/src/Metadata.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React, { ElementType } from 'react'; -import { useMeta } from '@jpmorganchase/mosaic-store'; -import type { MetaSlice } from '@jpmorganchase/mosaic-store'; -import { useSession } from 'next-auth/react'; - -export interface HTMLMeta extends MetaSlice {} - -export type MetadataProps = { - Component: ElementType; -}; - -export const Metadata: React.FC = ({ Component = 'head' }) => { - const { meta } = useMeta(); - const { data: session } = useSession(); - return ( - - {meta.title && {meta.title}} - {meta.description && } - {session?.user?.image && } - {Array.isArray(meta.breadcrumbs) && meta.breadcrumbs.length > 0 && ( - - )} - - ); -}; diff --git a/packages/site-components/src/PageNavigation.tsx b/packages/site-components/src/PageNavigation.tsx index 90473268..9d3728ef 100644 --- a/packages/site-components/src/PageNavigation.tsx +++ b/packages/site-components/src/PageNavigation.tsx @@ -1,14 +1,17 @@ -import React from 'react'; -import { useSidebar } from '@jpmorganchase/mosaic-store'; import { VerticalNavigation } from './VerticalNavigation'; +import { SidebarItem } from "@jpmorganchase/mosaic-types"; -export const PageNavigation = () => { - const { menu, selectedNodeId, selectedGroupIds } = useSidebar(); - return ( - - ); + +export type PageNavigationProps = { + menu: SidebarItem[]; + selectedNodeId?: string; + selectedGroupIds?: Set; }; + +export const PageNavigation = ({ menu, selectedNodeId, selectedGroupIds }: PageNavigationProps) => ( + +); diff --git a/packages/site-components/src/SearchInput/Results.tsx b/packages/site-components/src/SearchInput/Results.tsx index 039f971f..4b6cba9d 100644 --- a/packages/site-components/src/SearchInput/Results.tsx +++ b/packages/site-components/src/SearchInput/Results.tsx @@ -1,5 +1,5 @@ -import React, { useState } from 'react'; -import { useRouter } from 'next/router'; +import { useState } from 'react'; +import { useRouter } from 'next/navigation'; import classnames from 'clsx'; import { Caption6, P4, P6 } from '@jpmorganchase/mosaic-components'; import { Highlighter } from '@salt-ds/lab'; diff --git a/packages/site-components/src/SearchInput/index.tsx b/packages/site-components/src/SearchInput/index.tsx index 0379edd0..047eada6 100644 --- a/packages/site-components/src/SearchInput/index.tsx +++ b/packages/site-components/src/SearchInput/index.tsx @@ -1,14 +1,13 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { Input, Button } from '@salt-ds/core'; import { Icon } from '@jpmorganchase/mosaic-components'; -import { useSearchData } from './useSearchData'; + import { performSearch } from './searchUtils'; import { ResultsList } from './Results'; import type { SearchResults } from './Results'; import styles from './styles.css'; -export function SearchInput() { - const { searchIndex, searchConfig } = useSearchData(); +export function SearchInput({ searchIndex, searchConfig }) { const [searchTerm, setSearchTerm] = useState(''); const [searchResults, setSearchResults] = useState([]); const [listVisibility, setListVisibility] = useState(false); @@ -55,6 +54,9 @@ export function SearchInput() { }; }, []); + if (!searchIndex || !searchConfig) { + return null; + } return (
    fetch(url).then(res => res.json()); - - const { searchIndex: fallbackIndex, searchConfig } = useSearchIndex(); - - const { data, error, isLoading: searchIsLoading } = useSWR('/search-data.json', fetcher); - - const searchIndex = searchIsLoading || error ? fallbackIndex : data; - - return { searchIndex, searchConfig }; -} diff --git a/packages/site-components/src/SessionProvider.tsx b/packages/site-components/src/SessionProvider.tsx new file mode 100644 index 00000000..d0ed7ae6 --- /dev/null +++ b/packages/site-components/src/SessionProvider.tsx @@ -0,0 +1,5 @@ +import { SessionProvider as NextSessionProvider } from 'next-auth/react'; + +export function SessionProvider({ children }) { + return {children}; +} diff --git a/packages/site-components/src/Sidebar/index.tsx b/packages/site-components/src/Sidebar/index.tsx index 0c06f6d7..513eef42 100644 --- a/packages/site-components/src/Sidebar/index.tsx +++ b/packages/site-components/src/Sidebar/index.tsx @@ -1,4 +1,4 @@ -import React, { FC, ReactNode } from 'react'; +import { FC, ReactNode } from 'react'; import classnames from 'clsx'; import styles from './styles.css'; diff --git a/packages/site-components/src/TableOfContents/TableOfContents.tsx b/packages/site-components/src/TableOfContents/TableOfContents.tsx index 6f62e2fe..91409be8 100644 --- a/packages/site-components/src/TableOfContents/TableOfContents.tsx +++ b/packages/site-components/src/TableOfContents/TableOfContents.tsx @@ -6,14 +6,14 @@ import { TableOfContentsItem } from './TableOfContentsItem'; import { mostRecentScrollPoint, setupHeadingState, setupSelectedHeadingState } from './utils'; import styles from './styles.css'; -export type Item = { level: number; id: string; text: string }; -export interface CurrentItem extends Item { +export type TOCItem = { level: number; id: string; text: string }; +export interface CurrentItem extends TOCItem { current: boolean; } const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect; export type TableOfContentsProps = { - items?: Item[]; + items?: TOCItem[]; }; export const TableOfContents: React.FC = ({ items }) => { diff --git a/packages/site-components/src/TableOfContents/TableOfContentsItem.tsx b/packages/site-components/src/TableOfContents/TableOfContentsItem.tsx index 2549de5c..33ecc337 100644 --- a/packages/site-components/src/TableOfContents/TableOfContentsItem.tsx +++ b/packages/site-components/src/TableOfContents/TableOfContentsItem.tsx @@ -1,10 +1,9 @@ -import React from 'react'; import { NavigationItem } from '@salt-ds/core'; import { stripMarkdownLinks } from './utils'; -import type { Item } from './TableOfContents'; +import type { TOCItem } from './TableOfContents'; -export function TableOfContentsItem({ item, current }: { item: Item; current?: string }) { +export function TableOfContentsItem({ item, current }: { item: TOCItem; current?: string }) { const selected = item.id === current; const handleItemClick = e => { diff --git a/packages/site-components/src/TableOfContents/index.ts b/packages/site-components/src/TableOfContents/index.ts index a56b90de..715a3a23 100644 --- a/packages/site-components/src/TableOfContents/index.ts +++ b/packages/site-components/src/TableOfContents/index.ts @@ -1,8 +1 @@ -import React from 'react'; -import { withTableOfContentsAdapter } from './withTableOfContentsAdapter'; -import { TableOfContents as OriginalTableOfContents } from './TableOfContents'; -import type { TableOfContentsProps } from './TableOfContents'; - -export { withTableOfContentsAdapter } from './withTableOfContentsAdapter'; -export const TableOfContents: React.FC = - withTableOfContentsAdapter(OriginalTableOfContents); +export * from './TableOfContents'; diff --git a/packages/site-components/src/TableOfContents/withTableOfContentsAdapter.tsx b/packages/site-components/src/TableOfContents/withTableOfContentsAdapter.tsx deleted file mode 100644 index 217b8c63..00000000 --- a/packages/site-components/src/TableOfContents/withTableOfContentsAdapter.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import { useTableOfContents } from '@jpmorganchase/mosaic-store'; -import { TableOfContentsProps } from './TableOfContents'; - -export const withTableOfContentsAdapter = - (Component): React.FC => - ({ items }) => { - const { tableOfContents } = useTableOfContents(); - return ; - }; diff --git a/packages/site-components/src/ThemeProvider.tsx b/packages/site-components/src/ThemeProvider.tsx new file mode 100644 index 00000000..7cba6787 --- /dev/null +++ b/packages/site-components/src/ThemeProvider.tsx @@ -0,0 +1,23 @@ +import { ReactNode } from 'react'; +import { SaltProvider } from '@salt-ds/core'; +import { useColorMode } from '@jpmorganchase/mosaic-store'; + +import classnames from 'clsx'; + +interface ThemeProviderProps { + className?: string; + children?: ReactNode; +} + +export function ThemeProvider({ className, children }: ThemeProviderProps) { + const { colorMode } = useColorMode(); + + return ( + +
    + {children} +
    +
    + + ); +} diff --git a/packages/site-components/src/UserProfile/index.tsx b/packages/site-components/src/UserProfile/index.tsx index 502ae8d1..38573c93 100644 --- a/packages/site-components/src/UserProfile/index.tsx +++ b/packages/site-components/src/UserProfile/index.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement } from 'react'; +import { ReactElement } from 'react'; import classnames from 'clsx'; import { Avatar } from '@salt-ds/core'; diff --git a/packages/site-components/src/VerticalNavigation.tsx b/packages/site-components/src/VerticalNavigation.tsx index d8c09495..300805fc 100644 --- a/packages/site-components/src/VerticalNavigation.tsx +++ b/packages/site-components/src/VerticalNavigation.tsx @@ -1,7 +1,7 @@ -import React, { MouseEventHandler, useState } from 'react'; +import { MouseEventHandler, useState } from 'react'; import { StackLayout, NavigationItem, NavigationItemProps } from '@salt-ds/core'; import { Link } from '@jpmorganchase/mosaic-components'; -import { SidebarItem, SidebarNode } from '@jpmorganchase/mosaic-store'; +import { SidebarItem, SidebarNode } from '@jpmorganchase/mosaic-types'; export type VerticalNavigationProps = { /** Selected item groups ids to expand */ @@ -77,7 +77,7 @@ const renderNavigationItem = ( as="ul" gap="var(--salt-size-border)" style={{ - width: 250, + minWidth: 250, listStyle: 'none', paddingLeft: 0 }} diff --git a/packages/site-components/src/index.tsx b/packages/site-components/src/index.tsx index 349069b3..6fa24e9c 100644 --- a/packages/site-components/src/index.tsx +++ b/packages/site-components/src/index.tsx @@ -1,25 +1,23 @@ +'use client'; + export * from './AppHeader'; export * from './AppHeaderControls'; export * from './AppHeaderDrawer'; export * from './AppHeaderTabs'; export * from './BackLink'; export * from './Breadcrumbs'; -export * from './BaseUrlProvider'; -export * from './Body'; -export * from './Document'; export * from './DocPaginator'; export * from './Drawer'; export * from './Footer'; -export * from './HTMLView'; export * from './Link'; export * from './Image'; -export * from './Metadata'; export * from './PageNavigation'; +export * from './SearchInput'; +export * from './SessionProvider'; export * from './Sidebar'; export * from './TableOfContents'; +export * from './ThemeProvider'; export * from './UserProfile'; export * from './VerticalNavigation'; export * from './404'; export * from './500'; - -export { default as components } from './mdx'; diff --git a/packages/site-components/src/mdx.tsx b/packages/site-components/src/mdx.tsx deleted file mode 100644 index 7d2aac74..00000000 --- a/packages/site-components/src/mdx.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { Pre, getMarkdownComponents, withMarkdownSpacing } from '@jpmorganchase/mosaic-components'; -import type { PreProps } from '@jpmorganchase/mosaic-components'; -import { getLabMarkdownComponents } from '@jpmorganchase/mosaic-labs-components'; -import { OpenAPI } from '@jpmorganchase/mosaic-open-api-component'; -import type { OpenAPIProps } from '@jpmorganchase/mosaic-open-api-component'; - -import { Home } from './Home'; -import { Image } from './Image'; -import type { ImageProps } from './Image'; - -const components = { - ...getMarkdownComponents(), - Labs: getLabMarkdownComponents(), - Home, - img: withMarkdownSpacing(Image), - pre: withMarkdownSpacing(props =>
    ),
    -  OpenAPI: withMarkdownSpacing(OpenAPI)
    -};
    -
    -export default components;
    diff --git a/packages/site-components/src/package.json b/packages/site-components/src/package.json
    new file mode 100644
    index 00000000..35d3a0c7
    --- /dev/null
    +++ b/packages/site-components/src/package.json
    @@ -0,0 +1,14 @@
    +{
    +  "name": "src",
    +  "version": "1.0.0",
    +  "description": "",
    +  "main": "index.js",
    +  "scripts": {
    +    "test": "echo \"Error: no test specified\" && exit 1"
    +  },
    +  "repository": {
    +    "type": "git",
    +    "url": "https://github.com/jpmorganchase/mosaic.git"
    +  },
    +  "private": true
    +}
    diff --git a/packages/site-middleware/CHANGELOG.md b/packages/site-middleware/CHANGELOG.md
    deleted file mode 100644
    index c801b7e9..00000000
    --- a/packages/site-middleware/CHANGELOG.md
    +++ /dev/null
    @@ -1,858 +0,0 @@
    -# @jpmorganchase/mosaic-site-middleware
    -
    -## 0.1.0-beta.89
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.89
    -- @jpmorganchase/mosaic-store@0.1.0-beta.89
    -- @jpmorganchase/mosaic-types@0.1.0-beta.89
    -
    -## 0.1.0-beta.88
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.88
    -- @jpmorganchase/mosaic-store@0.1.0-beta.88
    -- @jpmorganchase/mosaic-types@0.1.0-beta.88
    -
    -## 0.1.0-beta.87
    -
    -### Patch Changes
    -
    -- Updated dependencies [14942195]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.87
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.87
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.87
    -
    -## 0.1.0-beta.86
    -
    -### Patch Changes
    -
    -- Updated dependencies [9124a6c0]
    -- Updated dependencies [b8361977]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.86
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.86
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.86
    -
    -## 0.1.0-beta.85
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.85
    -- @jpmorganchase/mosaic-store@0.1.0-beta.85
    -- @jpmorganchase/mosaic-types@0.1.0-beta.85
    -
    -## 0.1.0-beta.84
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.84
    -- @jpmorganchase/mosaic-store@0.1.0-beta.84
    -- @jpmorganchase/mosaic-types@0.1.0-beta.84
    -
    -## 0.1.0-beta.83
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.83
    -- @jpmorganchase/mosaic-store@0.1.0-beta.83
    -- @jpmorganchase/mosaic-types@0.1.0-beta.83
    -
    -## 0.1.0-beta.82
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.82
    -- @jpmorganchase/mosaic-store@0.1.0-beta.82
    -- @jpmorganchase/mosaic-types@0.1.0-beta.82
    -
    -## 0.1.0-beta.81
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.81
    -- @jpmorganchase/mosaic-store@0.1.0-beta.81
    -- @jpmorganchase/mosaic-types@0.1.0-beta.81
    -
    -## 0.1.0-beta.80
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.80
    -- @jpmorganchase/mosaic-store@0.1.0-beta.80
    -- @jpmorganchase/mosaic-types@0.1.0-beta.80
    -
    -## 0.1.0-beta.79
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.79
    -- @jpmorganchase/mosaic-store@0.1.0-beta.79
    -- @jpmorganchase/mosaic-types@0.1.0-beta.79
    -
    -## 0.1.0-beta.78
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.78
    -- @jpmorganchase/mosaic-store@0.1.0-beta.78
    -- @jpmorganchase/mosaic-types@0.1.0-beta.78
    -
    -## 0.1.0-beta.77
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.77
    -- @jpmorganchase/mosaic-store@0.1.0-beta.77
    -- @jpmorganchase/mosaic-types@0.1.0-beta.77
    -
    -## 0.1.0-beta.76
    -
    -### Patch Changes
    -
    -- Updated dependencies [727fcd54]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.76
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.76
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.76
    -
    -## 0.1.0-beta.75
    -
    -### Patch Changes
    -
    -- fd6d715d: - Tactical fix to remove `react-pro-sidebar` and replace with Salt's `NavigationItem`. We will remove this local `NavigationItem` once Salt merges it's own PR.
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.75
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.75
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.75
    -
    -## 0.1.0-beta.74
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.74
    -- @jpmorganchase/mosaic-store@0.1.0-beta.74
    -- @jpmorganchase/mosaic-types@0.1.0-beta.74
    -
    -## 0.1.0-beta.73
    -
    -### Patch Changes
    -
    -- de00c017: Added the files package.json field to all of the packages to prevent unnecessary files being published.
    -- Updated dependencies [de00c017]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.73
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.73
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.73
    -
    -## 0.1.0-beta.72
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.72
    -- @jpmorganchase/mosaic-store@0.1.0-beta.72
    -- @jpmorganchase/mosaic-types@0.1.0-beta.72
    -
    -## 0.1.0-beta.71
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.71
    -- @jpmorganchase/mosaic-store@0.1.0-beta.71
    -- @jpmorganchase/mosaic-types@0.1.0-beta.71
    -
    -## 0.1.0-beta.70
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.70
    -- @jpmorganchase/mosaic-store@0.1.0-beta.70
    -- @jpmorganchase/mosaic-types@0.1.0-beta.70
    -
    -## 0.1.0-beta.69
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.69
    -- @jpmorganchase/mosaic-store@0.1.0-beta.69
    -- @jpmorganchase/mosaic-types@0.1.0-beta.69
    -
    -## 0.1.0-beta.68
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.68
    -- @jpmorganchase/mosaic-store@0.1.0-beta.68
    -- @jpmorganchase/mosaic-types@0.1.0-beta.68
    -
    -## 0.1.0-beta.67
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.67
    -- @jpmorganchase/mosaic-store@0.1.0-beta.67
    -- @jpmorganchase/mosaic-types@0.1.0-beta.67
    -
    -## 0.1.0-beta.66
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.66
    -- @jpmorganchase/mosaic-store@0.1.0-beta.66
    -- @jpmorganchase/mosaic-types@0.1.0-beta.66
    -
    -## 0.1.0-beta.65
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.65
    -- @jpmorganchase/mosaic-store@0.1.0-beta.65
    -- @jpmorganchase/mosaic-types@0.1.0-beta.65
    -
    -## 0.1.0-beta.64
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.64
    -- @jpmorganchase/mosaic-store@0.1.0-beta.64
    -- @jpmorganchase/mosaic-types@0.1.0-beta.64
    -
    -## 0.1.0-beta.63
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.63
    -- @jpmorganchase/mosaic-store@0.1.0-beta.63
    -- @jpmorganchase/mosaic-types@0.1.0-beta.63
    -
    -## 0.1.0-beta.62
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.62
    -- @jpmorganchase/mosaic-store@0.1.0-beta.62
    -- @jpmorganchase/mosaic-types@0.1.0-beta.62
    -
    -## 0.1.0-beta.61
    -
    -### Patch Changes
    -
    -- cec89401: add `pluginTimeout` (20 secs) to fastify to prevent loading timeout
    -- Updated dependencies [cec89401]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.61
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.61
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.61
    -
    -## 0.1.0-beta.60
    -
    -### Patch Changes
    -
    -- a3da0830: New Readme Source
    -
    -  This source pulls a single Readme.md from a remote Source repo.
    -  Typically used for third-party repos which exist already or don't want to
    -  create a full document hierachy and use `@jpmorganchase/mosaic-source-git-repo`.
    -  By pulling a single page, we can add metadata to that page via the source's config.
    -  It's also more performant as we do not need to pull a whole source repo.
    -
    -- Updated dependencies [a3da0830]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.60
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.60
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.60
    -
    -## 0.1.0-beta.59
    -
    -### Patch Changes
    -
    -- e3f4b7c3: Fixed routing breaking when URL parameters are present.
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.59
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.59
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.59
    -
    -## 0.1.0-beta.58
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.58
    -- @jpmorganchase/mosaic-store@0.1.0-beta.58
    -- @jpmorganchase/mosaic-types@0.1.0-beta.58
    -
    -## 0.1.0-beta.57
    -
    -### Patch Changes
    -
    -- d214d112: Add catch-all default exports for
    -
    -  - `@jpmorganchase/mosaic-store`
    -  - `@jpmorganchase/mosaic-theme`
    -  - `@jpmorganchase/mosaic-workflows`
    -
    -  This resolves an issue when running tests from an external repo which depends on these packages
    -
    -- Updated dependencies [d214d112]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.57
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.57
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.57
    -
    -## 0.1.0-beta.56
    -
    -### Patch Changes
    -
    -- 6d30e29f: Add new Storybook source
    -
    -  Storybook stories can be extracted from Storybook and embedded into Mosaic pages.
    -
    -  The stories are extracted based on a configured filter or matching tags.
    -
    -  With a page created for each Story, the author can create a dynamic index of matching stories.
    -
    -  eg. An index of patterns which match a specific tag
    -
    -- Updated dependencies [6d30e29f]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.56
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.56
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.56
    -
    -## 0.1.0-beta.55
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.55
    -- @jpmorganchase/mosaic-store@0.1.0-beta.55
    -- @jpmorganchase/mosaic-types@0.1.0-beta.55
    -
    -## 0.1.0-beta.54
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.54
    -- @jpmorganchase/mosaic-store@0.1.0-beta.54
    -- @jpmorganchase/mosaic-types@0.1.0-beta.54
    -
    -## 0.1.0-beta.53
    -
    -### Patch Changes
    -
    -- Updated dependencies [d7098baa]
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.53
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.53
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.53
    -
    -## 0.1.0-beta.52
    -
    -### Patch Changes
    -
    -- Updated dependencies [9ad7418c]
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.52
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.52
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.52
    -
    -## 0.1.0-beta.51
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.51
    -- @jpmorganchase/mosaic-store@0.1.0-beta.51
    -- @jpmorganchase/mosaic-types@0.1.0-beta.51
    -
    -## 0.1.0-beta.50
    -
    -### Patch Changes
    -
    -- Updated dependencies [2f015976]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.50
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.50
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.50
    -
    -## 0.1.0-beta.49
    -
    -### Patch Changes
    -
    -- Updated dependencies [425b5a00]
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.49
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.49
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.49
    -
    -## 0.1.0-beta.48
    -
    -### Patch Changes
    -
    -- Updated dependencies [0eca1d6e]
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.48
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.48
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.48
    -
    -## 0.1.0-beta.47
    -
    -### Patch Changes
    -
    -- Updated dependencies [19b4e49a]
    -- Updated dependencies [6caa661a]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.47
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.47
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.47
    -
    -## 0.1.0-beta.46
    -
    -### Patch Changes
    -
    -- Updated dependencies [32e86cfd]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.46
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.46
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.46
    -
    -## 0.1.0-beta.45
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.45
    -- @jpmorganchase/mosaic-store@0.1.0-beta.45
    -- @jpmorganchase/mosaic-types@0.1.0-beta.45
    -
    -## 0.1.0-beta.44
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.44
    -- @jpmorganchase/mosaic-store@0.1.0-beta.44
    -- @jpmorganchase/mosaic-types@0.1.0-beta.44
    -
    -## 0.1.0-beta.43
    -
    -### Patch Changes
    -
    -- Updated dependencies [d3b8b3a]
    -- Updated dependencies [0ced179]
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.43
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.43
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.43
    -
    -## 0.1.0-beta.42
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.42
    -- @jpmorganchase/mosaic-store@0.1.0-beta.42
    -- @jpmorganchase/mosaic-types@0.1.0-beta.42
    -
    -## 0.1.0-beta.41
    -
    -### Patch Changes
    -
    -- Updated dependencies [898c9ad]
    -- Updated dependencies [5cd5a87]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.41
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.41
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.41
    -
    -## 0.1.0-beta.40
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.40
    -- @jpmorganchase/mosaic-store@0.1.0-beta.40
    -- @jpmorganchase/mosaic-types@0.1.0-beta.40
    -
    -## 0.1.0-beta.39
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.39
    -- @jpmorganchase/mosaic-store@0.1.0-beta.39
    -- @jpmorganchase/mosaic-types@0.1.0-beta.39
    -
    -## 0.1.0-beta.38
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.38
    -- @jpmorganchase/mosaic-store@0.1.0-beta.38
    -- @jpmorganchase/mosaic-types@0.1.0-beta.38
    -
    -## 0.1.0-beta.37
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.37
    -- @jpmorganchase/mosaic-store@0.1.0-beta.37
    -- @jpmorganchase/mosaic-types@0.1.0-beta.37
    -
    -## 0.1.0-beta.36
    -
    -### Patch Changes
    -
    -- 03464ad: fix: remove env variable check in `withSession` middleware
    -
    -  The `NEXTAUTH_SECRET` env variable is not always required. It is possible to pass the secret as an option to `next-auth`
    -
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.36
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.36
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.36
    -
    -## 0.1.0-beta.35
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.35
    -- @jpmorganchase/mosaic-store@0.1.0-beta.35
    -- @jpmorganchase/mosaic-types@0.1.0-beta.35
    -
    -## 0.1.0-beta.34
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.34
    -- @jpmorganchase/mosaic-store@0.1.0-beta.34
    -- @jpmorganchase/mosaic-types@0.1.0-beta.34
    -
    -## 0.1.0-beta.33
    -
    -### Patch Changes
    -
    -- @jpmorganchase/mosaic-schemas@0.1.0-beta.33
    -- @jpmorganchase/mosaic-store@0.1.0-beta.33
    -- @jpmorganchase/mosaic-types@0.1.0-beta.33
    -
    -## 0.1.0-beta.32
    -
    -### Patch Changes
    -
    -- 7ed1ee7: Upgrade to latest version of NextJs (v13.4.1)
    -- 8c854fd: - Upgrade `next-auth` version
    -  - Update `withSession` mosaic middleware to use `next-auth`
    -- Updated dependencies [a56eadb]
    -- Updated dependencies [8c854fd]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.32
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.32
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.32
    -
    -## 0.1.0-beta.31
    -
    -### Patch Changes
    -
    -- b609fd0: Added support for containerization of the site and cli as well as providing config for kubernetes development (skaffold)
    -
    -  ## @jpmorganchase/mosaic-cli
    -
    -  The cli package has been updated to support containerization.
    -
    -- Updated dependencies [b609fd0]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.31
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.31
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.31
    -
    -## 0.1.0-beta.30
    -
    -### Patch Changes
    -
    -- 18ef436: The git repo source no longer generates a double slash between the repo host and repo path.
    -- Updated dependencies [18ef436]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.30
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.30
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.30
    -
    -## 0.1.0-beta.29
    -
    -### Minor Changes
    -
    -- c78deb4: Flatten Sidebar
    -  Search Optimisation
    -  Public Assets Plugin
    -  TOC Indentation
    -
    -### Patch Changes
    -
    -- Updated dependencies [c78deb4]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.29
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.29
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.29
    -
    -## 0.1.0-beta.28
    -
    -### Patch Changes
    -
    -- 27ac914: 1. Layout improvements. 2. Fix: if a user hits a url that lands on a directory, the index file within that directory is resolved as the content. 3. Fix: improve Table of Contents component highlighting.
    -- Updated dependencies [27ac914]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.28
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.28
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.28
    -
    -## 0.1.0-beta.27
    -
    -### Patch Changes
    -
    -- b465413: Improvements to vercel deployments
    -- Updated dependencies [b465413]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.27
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.27
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.27
    -
    -## 0.1.0-beta.26
    -
    -### Minor Changes
    -
    -- 531c87a: ## Mosaic Theme
    -
    -  The theme variables are now globally scoped and prefixed with `mosaic`.
    -
    -  ## BrokenLinksPlugin
    -
    -  The `BrokenLinksPlugin` uses a running instance of mosaic to verify that all links in the source pages are alive.
    -
    -  If mosaic is running behind a corporate proxy, the `proxyEndpoint` option is required to fetch external URLs.
    -
    -  Configuration:
    -
    -  ```json
    -   {
    -        modulePath: '@jpmorganchase/mosaic-plugins/BrokenLinksPlugin',
    -        priority: -1,
    -        // Exclude this plugin in builds
    -        runTimeOnly: true,
    -        options: {
    -          baseUrl: process.env.MOSAIC_ACTIVE_MODE_URL || 'http://localhost:8080',
    -          proxyEndpoint: 'http://some-proxy-url'
    -        }
    -      }
    -  ```
    -
    -  ## Next/Prev button
    -
    -  The next and prev buttons are visible again on pages that have a layout that uses these buttons.
    -
    -### Patch Changes
    -
    -- Updated dependencies [531c87a]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.26
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.26
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.26
    -
    -## 0.1.0-beta.25
    -
    -### Minor Changes
    -
    -- 93e9b07: The theme contract provided by the `@jpmorganchase/mosaic-theme` package now uses locally scoped variable names via a Vanilla Extract [Theme Contract](https://vanilla-extract.style/documentation/api/create-theme-contract/). Previously the theme variables were globally scoped resulting in conflicts with other design systems.
    -
    -### Patch Changes
    -
    -- a36219c: - Next/Prev page buttons were not appearing at the bottom of a page sequence
    -  - Removed redundant snapshot page api
    -- Updated dependencies [a36219c]
    -- Updated dependencies [93e9b07]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.25
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.25
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.25
    -
    -## 0.1.0-beta.24
    -
    -### Patch Changes
    -
    -- 049d9af: 1. Pip Salt version 2. Issues 155, make 500 error more specific 3. button and sidebar styles 4. search opt-out
    -- Updated dependencies [049d9af]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.24
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.24
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.24
    -
    -## 0.1.0-beta.23
    -
    -### Patch Changes
    -
    -- 513d45f: Sidebar behavior and styling changes.
    -  Add Client-side search feature.
    -  Relax node engine requirements.
    -  Removal of patches from the site package.
    -  Update site generator templates.
    -- Updated dependencies [513d45f]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.23
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.23
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.23
    -
    -## 0.1.0-beta.22
    -
    -### Patch Changes
    -
    -- be89e4f: fix markdown tables and update generator's Salt patches
    -
    -  - Salt patches in generator were out of sync with Mosaic repo
    -  - Markdown now support github flavoured markdown, such as Tables
    -
    -- Updated dependencies [be89e4f]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.22
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.22
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.22
    -
    -## 0.1.0-beta.21
    -
    -### Patch Changes
    -
    -- f75fd5e: fix sidebar which was generated after `beforeSend` had completed
    -- Updated dependencies [f75fd5e]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.21
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.21
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.21
    -
    -## 0.1.0-beta.20
    -
    -### Patch Changes
    -
    -- 9c7b8ff: pip to beta.20
    -- Updated dependencies [9c7b8ff]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.20
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.20
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.20
    -
    -## 0.1.0-beta.19
    -
    -### Patch Changes
    -
    -- ad06d4c: ensure spinner is removed after page has loaded
    -- Updated dependencies [ad06d4c]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.19
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.19
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.19
    -
    -## 0.1.0-beta.18
    -
    -### Patch Changes
    -
    -- 066efed: Update docs with quick-start guide
    -
    -  Sample docs now include a 'quick-start' guide to onboarding to AWS.
    -
    -  Also
    -
    -  - generator default directory is the current directory
    -  - after generating a site, it will run `yarn` in the created directory. This simplifies the generator call to just `yarn mosaic-create-site`
    -
    -- Updated dependencies [066efed]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.18
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.18
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.18
    -
    -## 0.1.0-beta.17
    -
    -### Patch Changes
    -
    -- b2f6d52: Fix `pre` block code block rendering
    -- Updated dependencies [b2f6d52]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.17
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.17
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.17
    -
    -## 0.1.0-beta.16
    -
    -### Patch Changes
    -
    -- 3a5c88a: add missing `@types/node` dependency for generator
    -- Updated dependencies [3a5c88a]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.16
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.16
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.16
    -
    -## 0.1.0-beta.15
    -
    -### Patch Changes
    -
    -- aaaf255: initial release of HTTP Source package.
    -
    -  An HTTP source accepts a collection of endpoints and a path to a transformer module.
    -  The response from fetching is transformed and merged together into 1 single collection of pages.
    -  Should 1 of the endpoints request fail then it will have no impact on the other requests.
    -
    -- Updated dependencies [aaaf255]
    -  - @jpmorganchase/mosaic-schemas@0.1.0-beta.15
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.15
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.15
    -
    -## 0.1.0-beta.14
    -
    -### Patch Changes
    -
    -- dde3b5a: Feature release
    -
    -  - Enhanced generators now have defaults.
    -    With one command (`yarn mosaic-create-site create`) it will generate a fully working site with both local and remote sources
    -  - Fix an issue where we could not clone from the master branch of git repos
    -  - Migrate to Next 13 image
    -
    -- Updated dependencies [dde3b5a]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.14
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.14
    -
    -## 0.1.0-beta.13
    -
    -### Patch Changes
    -
    -- d4da1df: incremental improvements
    -
    -  - move colormode into store
    -  - ensure breadcrumbs and sidebar data is only added to frontmatter for pages which use a layout that has breadcrumbs or a sidebar
    -  - improve changeset so it can work standalone without a monorepo
    -  - resolev json5 vulnerability
    -
    -- Updated dependencies [d4da1df]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.13
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.13
    -
    -## 0.1.0-beta.12
    -
    -### Patch Changes
    -
    -- 9ec358b: Upgrade React to version 18 and NextJs to version 13
    -- 3eb35bf: initial work to enable generators to run outside of the repo
    -- Updated dependencies [9ec358b]
    -- Updated dependencies [3eb35bf]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.12
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.12
    -
    -## 0.1.0-beta.11
    -
    -### Patch Changes
    -
    -- 146a4bb: fix SSR Initial render
    -
    -  removed Salt Core patch
    -  added Salt Labs patch (Cascading Menu) to support SSR
    -
    -- fc5d7b5: Generators can now interactively add sources
    -
    -  Previously we were making local edits to our own site or examples to implement new features.
    -  What we wanted was the ability to create a local rig, A local rig can be used for development purposes,
    -  without touching our site code.
    -
    -  We have added Mosaic repo commands, to enable us to generates local rigs (`yarn gen:rig`) and deploy our own
    -  tech docs via snapshot (`yarn gen`)
    -
    -  To generate a site+snapshot from sources defined in `mosaic-generators.js`, run `yarn gen`
    -  To generate a dynamic site from sources defined in `mosaic-generators.js`, run `yarn gen:site`
    -  To generate a rig `yarn gen:rig`
    -
    -  Equally these changes can be used to generate sites in other repos via the `mosaic-create-site` command.
    -
    -  `yarn mosaic-create-site init` will create a `mosaic.generators.js`.
    -
    -  Configure the `mosaic.generators.js` with your generator and sources, then run.
    -
    -  `yarn mosaic-create-site create -i -o path/to/my-site`
    -
    -  When this command is run, it will present an interactive menu of generators and output the site to `path/to/my-site`.
    -
    -- Updated dependencies [fc5d7b5]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.11
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.11
    -
    -## 0.1.0-beta.10
    -
    -### Patch Changes
    -
    -- af2f579: Converted repo to ESM and Salt DS nomenclature
    -
    -  - Switch UITK nomenclature to Salt DS
    -    Upgraded to first stable version of Salt DS version 1.0.0
    -  - CommonJS code switched to ESM and upgraded to Node 16
    -  - Removed example-nextjs-ssr package as un-required, can be replaced by documentation
    -  - Sites can now generate immutable snapshots of content that loads content like a SGS (statically generated site)
    -    Snapshots can be used as a serverless solution when deployed to Vercel.
    -  - New Middleware package `@jpmorganchase/mosaic-site-middleware`
    -
    -- Updated dependencies [af2f579]
    -  - @jpmorganchase/mosaic-store@0.1.0-beta.10
    -  - @jpmorganchase/mosaic-types@0.1.0-beta.10
    diff --git a/packages/site-middleware/README.md b/packages/site-middleware/README.md
    deleted file mode 100644
    index 84a50eed..00000000
    --- a/packages/site-middleware/README.md
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -# Mosaic Site Components Library
    -
    -`@jpmorganchase/mosaic-site-middleware` contains site specific middleware functions.
    -
    -Middleware functions are server-side only functions. They cannot be run on the client.
    -
    -## Features
    -
    -1. Middleware functions.
    -2. Middleware Preset
    -
    -## Installation
    -
    -`yarn add @jpmorganchase/mosaic-site-components`
    diff --git a/packages/site-middleware/package.json b/packages/site-middleware/package.json
    deleted file mode 100644
    index c7c7fb8f..00000000
    --- a/packages/site-middleware/package.json
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -{
    -  "name": "@jpmorganchase/mosaic-site-middleware",
    -  "version": "0.1.0-beta.89",
    -  "license": "Apache-2.0",
    -  "description": "Mosaic - Site middleware",
    -  "repository": {
    -    "type": "git",
    -    "url": "git@github.com:jpmorganchase/mosaic.git",
    -    "directory": "packages/site-middleware"
    -  },
    -  "main": "./dist/index.js",
    -  "types": "./dist/index.d.ts",
    -  "exports": {
    -    "./index.css": "./dist/index.css",
    -    ".": {
    -      "style": "./dist/index.css",
    -      "types": "./dist/index.d.ts",
    -      "import": "./dist/index.js",
    -      "node": "./dist/index.js",
    -      "default": "./dist/index.js"
    -    }
    -  },
    -  "files": [
    -    "dist"
    -  ],
    -  "scripts": {
    -    "build": "tsc",
    -    "clean": "rm -fr dist",
    -    "lint": "eslint --ignore-pattern \"**/__tests__/**\""
    -  },
    -  "devDependencies": {
    -    "aws-sdk-client-mock": "^2.0.1",
    -    "vitest-fetch-mock": "^0.3.0",
    -    "mock-fs": "^5.0.0",
    -    "typescript": "^4.8.3"
    -  },
    -  "dependencies": {
    -    "@aws-sdk/client-s3": "^3.645.0",
    -    "@jpmorganchase/mosaic-schemas": "^0.1.0-beta.89",
    -    "@jpmorganchase/mosaic-store": "^0.1.0-beta.89",
    -    "@jpmorganchase/mosaic-types": "^0.1.0-beta.89",
    -    "@types/mdast": "^3.0.0",
    -    "acorn": "^8.0.0",
    -    "acorn-jsx": "^5.0.0",
    -    "deepmerge": "^4.2.2",
    -    "hast-util-properties-to-mdx-jsx-attributes": "^1.0.0",
    -    "jwt-decode": "^3.1.2",
    -    "lodash-es": "^4.17.21",
    -    "mdast-util-mdx": "^3.0.0",
    -    "mdast-util-mdx-jsx": "^3.0.0",
    -    "mdast-util-from-markdown": "^2.0.0",
    -    "micromark-extension-mdxjs": "^3.0.0",
    -    "next": "^14.0.0",
    -    "next-mdx-remote": "^5.0.0",
    -    "node-cookie": "^2.1.2",
    -    "react-error-boundary": "^3.1.4",
    -    "remark-gfm": "^4.0.0",
    -    "rehype-slug": "^6.0.0",
    -    "unified": "^11.0.0",
    -    "unist-util-visit": "^5.0.0",
    -    "unist-util-visit-parents": "^6.0.0",
    -    "warning": "^3.0.0"
    -  },
    -  "peerDependencies": {
    -    "next-auth": "^4.22.1"
    -  }
    -}
    diff --git a/packages/site-middleware/src/MiddlewareError.ts b/packages/site-middleware/src/MiddlewareError.ts
    deleted file mode 100644
    index 64c25796..00000000
    --- a/packages/site-middleware/src/MiddlewareError.ts
    +++ /dev/null
    @@ -1,26 +0,0 @@
    -export default class MiddlewareError extends Error {
    -  /** Response code */
    -  public status: number;
    -
    -  /** Related route location */
    -  public location: string | undefined;
    -
    -  /** Array of errors */
    -  public errors: string[];
    -
    -  /** Props to pass back */
    -  public props: { show404?: boolean; show500?: boolean };
    -
    -  constructor(
    -    status: MiddlewareError['status'],
    -    location: MiddlewareError['location'],
    -    errors: MiddlewareError['errors'] = [],
    -    props: MiddlewareError['props'] = {}
    -  ) {
    -    super(`${status} error`);
    -    this.status = status;
    -    this.location = location;
    -    this.errors = errors;
    -    this.props = props;
    -  }
    -}
    diff --git a/packages/site-middleware/src/__tests__/withMDXContent.test.ts b/packages/site-middleware/src/__tests__/withMDXContent.test.ts
    deleted file mode 100644
    index 432286bd..00000000
    --- a/packages/site-middleware/src/__tests__/withMDXContent.test.ts
    +++ /dev/null
    @@ -1,105 +0,0 @@
    -import { describe, expect, test, vi, beforeAll, afterAll } from 'vitest';
    -import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
    -import { AwsStub, mockClient } from 'aws-sdk-client-mock';
    -import { sdkStreamMixin } from '@smithy/util-stream';
    -import { Readable } from 'stream';
    -import createFetchMock from 'vitest-fetch-mock';
    -
    -const mockFs = require('mock-fs');
    -
    -import { withMDXContent } from '../withMDXContent';
    -
    -const fetchMock = createFetchMock(vi);
    -
    -vi.mock('../compileMdx.js', () => ({
    -  compileMDX: async (value: string) => Promise.resolve(value)
    -}));
    -
    -declare var process: {
    -  env: {
    -    MOSAIC_S3_BUCKET?: string;
    -    MOSAIC_S3_REGION?: string;
    -    MOSAIC_S3_ACCESS_KEY_ID?: string;
    -    MOSAIC_S3_SECRET_ACCESS_KEY?: string;
    -    MOSAIC_SNAPSHOT_DIR?: string;
    -  };
    -};
    -
    -describe('GIVEN withMDXContent', () => {
    -  describe('WHEN snapshot-s3 Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    let s3ClientMock: AwsStub<{}, { $metadata: {} }>;
    -    beforeAll(() => {
    -      process.env = {
    -        ...process.env,
    -        MOSAIC_S3_BUCKET: 'some-bucket',
    -        MOSAIC_S3_REGION: 'some-region',
    -        MOSAIC_S3_ACCESS_KEY_ID: 'some-access-key',
    -        MOSAIC_S3_SECRET_ACCESS_KEY: 'some-secret-key'
    -      };
    -      s3ClientMock = mockClient(S3Client);
    -      const stream = new Readable();
    -      stream.push('my content');
    -      stream.push(null); // end of stream
    -      const contentStream = sdkStreamMixin(stream);
    -      s3ClientMock.on(GetObjectCommand).resolves({ Body: contentStream });
    -    });
    -    afterAll(() => {
    -      process.env = savedEnv;
    -      s3ClientMock.reset();
    -    });
    -    test('THEN a snapshot can be loaded from an S3 bucket', async () => {
    -      // arrange
    -      const content = await withMDXContent({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: { getHeader: () => 'snapshot-s3' }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: { raw: 'my content', source: 'my content', type: 'mdx' } });
    -    });
    -  });
    -
    -  describe('WHEN snapshot-file Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    beforeAll(() => {
    -      process.env = { ...process.env, MOSAIC_SNAPSHOT_DIR: '/some/snapshots' };
    -      mockFs({
    -        'some/snapshots/mynamespace/mydir': {
    -          'mypage.mdx': 'my content'
    -        }
    -      });
    -    });
    -    afterAll(() => {
    -      mockFs.restore();
    -      process.env = savedEnv;
    -    });
    -
    -    test('THEN a snapshot can be loaded from a local file', async () => {
    -      // arrange
    -      const content = await withMDXContent({
    -        resolvedUrl: '/mynamespace/mydir/mypage.mdx',
    -        res: { getHeader: () => 'snapshot-file' }
    -      });
    -      expect(content).toEqual({ props: { raw: 'my content', source: 'my content', type: 'mdx' } });
    -    });
    -  });
    -
    -  describe('WHEN dynamic Mosaic mode is set', () => {
    -    beforeAll(() => {
    -      fetchMock.enableMocks();
    -      fetchMock.mockOnce('my content');
    -    });
    -    afterAll(() => {
    -      fetchMock.disableMocks();
    -    });
    -    test('THEN content is fetched from the data source', async () => {
    -      // arrange
    -      const content = await withMDXContent({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: { getHeader: () => '/dynamic' }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: { raw: 'my content', source: 'my content', type: 'mdx' } });
    -    });
    -  });
    -});
    diff --git a/packages/site-middleware/src/__tests__/withSearchIndex.test.ts b/packages/site-middleware/src/__tests__/withSearchIndex.test.ts
    deleted file mode 100644
    index 5da3cd2a..00000000
    --- a/packages/site-middleware/src/__tests__/withSearchIndex.test.ts
    +++ /dev/null
    @@ -1,175 +0,0 @@
    -import { describe, expect, beforeAll, afterAll, test, afterEach, beforeEach, vi } from 'vitest';
    -import { GetObjectCommand, HeadObjectCommand, S3Client } from '@aws-sdk/client-s3';
    -import { AwsStub, mockClient } from 'aws-sdk-client-mock';
    -import { sdkStreamMixin } from '@smithy/util-stream';
    -import { Readable } from 'stream';
    -import createFetchMock from 'vitest-fetch-mock';
    -const mockFs = require('mock-fs');
    -
    -import { withSearchIndex } from '../withSearchIndex';
    -
    -declare var process: {
    -  env: {
    -    MOSAIC_S3_BUCKET?: string;
    -    MOSAIC_S3_REGION?: string;
    -    MOSAIC_S3_ACCESS_KEY_ID?: string;
    -    MOSAIC_S3_SECRET_ACCESS_KEY?: string;
    -    MOSAIC_SNAPSHOT_DIR?: string;
    -  };
    -};
    -
    -const fetchMock = createFetchMock(vi);
    -
    -describe('GIVEN withSearchIndex', () => {
    -  describe('WHEN snapshot-s3 Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    let s3ClientMock: AwsStub<{}, { $metadata: {} }>;
    -    beforeAll(() => {
    -      process.env = {
    -        ...process.env,
    -        MOSAIC_S3_BUCKET: 'some-bucket',
    -        MOSAIC_S3_REGION: 'some-region',
    -        MOSAIC_S3_ACCESS_KEY_ID: 'some-access-key',
    -        MOSAIC_S3_SECRET_ACCESS_KEY: 'some-secret-key'
    -      };
    -      s3ClientMock = mockClient(S3Client);
    -      const indexStream = new Readable();
    -      indexStream.push('{ "someValue": true }');
    -      indexStream.push(null); // end of stream
    -      const indexContentStream = sdkStreamMixin(indexStream);
    -      s3ClientMock
    -        .on(GetObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'search-data-condensed.json'
    -        })
    -        .resolves({ Body: indexContentStream });
    -      s3ClientMock
    -        .on(HeadObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'search-data-condensed.json'
    -        })
    -        .resolvesOnce({ $metadata: { httpStatusCode: 200 } })
    -        .resolves({ $metadata: { httpStatusCode: 404 } });
    -      const configStream = new Readable();
    -      configStream.push('{ "someConfigValue": true }');
    -      configStream.push(null); // end of stream
    -      const configContentStream = sdkStreamMixin(configStream);
    -      s3ClientMock
    -        .on(GetObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'search-config.json'
    -        })
    -        .resolves({ Body: configContentStream });
    -      s3ClientMock
    -        .on(HeadObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'search-config.json'
    -        })
    -        .resolvesOnce({ $metadata: { httpStatusCode: 200 } })
    -        .resolves({ $metadata: { httpStatusCode: 404 } });
    -    });
    -    afterAll(() => {
    -      process.env = savedEnv;
    -      s3ClientMock.reset();
    -    });
    -    test('THEN search-index can be loaded from an S3 bucket', async () => {
    -      // arrange
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mynamespace' : 'snapshot-s3')
    -        }
    -      });
    -      // assert
    -      expect(content).toEqual({
    -        props: { searchConfig: { someConfigValue: true }, searchIndex: { someValue: true } }
    -      });
    -    });
    -    test('THEN does not throw for a non-existent search-index', async () => {
    -      // arrange
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/non-existent/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mynamespace' : 'snapshot-s3')
    -        }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -
    -  describe('WHEN snapshot-file Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    beforeEach(() => {
    -      process.env = { MOSAIC_SNAPSHOT_DIR: '/some/snapshots' };
    -    });
    -    afterEach(() => {
    -      process.env = savedEnv;
    -    });
    -    test('THEN reads search-index from a local file', async () => {
    -      // arrange
    -      mockFs({
    -        'some/snapshots/': {
    -          'search-data-condensed.json': '{ "someValue": true }',
    -          'search-config.json': '{ "someConfigValue": true }'
    -        }
    -      });
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/mynamespace/mydir/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mydomain' : 'snapshot-file')
    -        }
    -      });
    -      expect(content).toEqual({
    -        props: { searchConfig: { someConfigValue: true }, searchIndex: { someValue: true } }
    -      });
    -      mockFs.restore();
    -    });
    -    test('THEN does not throw for a non-existent search-index', async () => {
    -      // arrange
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/mynamespace/non-existent/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mydomain' : 'snapshot-file')
    -        }
    -      });
    -      console.log({ content });
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -
    -  describe('WHEN active Mosaic mode is set', () => {
    -    beforeAll(() => {
    -      fetchMock.enableMocks();
    -      fetchMock.mockResponses(
    -        [JSON.stringify({ someValue: true }), { status: 200 }],
    -        [JSON.stringify({ someConfigValue: true }), { status: 200 }],
    -        ['', { status: 404 }],
    -        ['', { status: 404 }]
    -      );
    -    });
    -    afterAll(() => {
    -      fetchMock.disableMocks();
    -    });
    -    test('THEN search-index is fetched from the data source', async () => {
    -      // arrange
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: { getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mydomain' : 'active') }
    -      });
    -      // assert
    -      expect(content).toEqual({
    -        props: { searchConfig: { someConfigValue: true }, searchIndex: { someValue: true } }
    -      });
    -    });
    -    test('THEN does not throw for a non-existent search-index', async () => {
    -      // arrange
    -      const content = await withSearchIndex({
    -        resolvedUrl: '/mynamespace/non-existent/mypage.mdx',
    -        res: { getHeader: name => (name === 'X-Mosaic-Content-Url' ? '/mydomain' : 'active') }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -});
    diff --git a/packages/site-middleware/src/__tests__/withSharedConfig.test.ts b/packages/site-middleware/src/__tests__/withSharedConfig.test.ts
    deleted file mode 100644
    index 0175683b..00000000
    --- a/packages/site-middleware/src/__tests__/withSharedConfig.test.ts
    +++ /dev/null
    @@ -1,155 +0,0 @@
    -import { describe, test, expect, beforeAll, afterAll, beforeEach, afterEach, vi } from 'vitest';
    -import { GetObjectCommand, HeadObjectCommand, S3Client } from '@aws-sdk/client-s3';
    -import { AwsStub, mockClient } from 'aws-sdk-client-mock';
    -import { sdkStreamMixin } from '@smithy/util-stream';
    -import { Readable } from 'stream';
    -import createFetchMock from 'vitest-fetch-mock';
    -import { vol, fs } from 'memfs';
    -
    -import { withSharedConfig } from '../withSharedConfig';
    -
    -const fetchMock = createFetchMock(vi);
    -
    -declare var process: {
    -  env: {
    -    MOSAIC_S3_BUCKET?: string;
    -    MOSAIC_S3_REGION?: string;
    -    MOSAIC_S3_ACCESS_KEY_ID?: string;
    -    MOSAIC_S3_SECRET_ACCESS_KEY?: string;
    -    MOSAIC_SNAPSHOT_DIR?: string;
    -  };
    -};
    -
    -describe('GIVEN withSharedConfig', () => {
    -  describe('WHEN snapshot-s3 Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    let s3ClientMock: AwsStub<{}, { $metadata: {} }>;
    -    beforeAll(() => {
    -      process.env = {
    -        ...process.env,
    -        MOSAIC_S3_BUCKET: 'some-bucket',
    -        MOSAIC_S3_REGION: 'some-region',
    -        MOSAIC_S3_ACCESS_KEY_ID: 'some-access-key',
    -        MOSAIC_S3_SECRET_ACCESS_KEY: 'some-secret-key'
    -      };
    -      s3ClientMock = mockClient(S3Client);
    -      const stream = new Readable();
    -      stream.push('{"config": { "someValue": true }}');
    -      stream.push(null); // end of stream
    -      const contentStream = sdkStreamMixin(stream);
    -      s3ClientMock
    -        .on(GetObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'mynamespace/shared-config.json'
    -        })
    -        .resolves({ Body: contentStream });
    -      s3ClientMock
    -        .on(HeadObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'mynamespace/shared-config.json'
    -        })
    -        .resolves({ $metadata: { httpStatusCode: 200 } });
    -      s3ClientMock
    -        .on(HeadObjectCommand, {
    -          Bucket: 'some-bucket',
    -          Key: 'non-existent/shared-config.json'
    -        })
    -        .resolves({ $metadata: { httpStatusCode: 404 } });
    -    });
    -    afterAll(() => {
    -      process.env = savedEnv;
    -      s3ClientMock.reset();
    -    });
    -    test('THEN shared-config can be loaded from an S3 bucket', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'snapshot-s3')
    -        }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: { sharedConfig: { someValue: true } } });
    -    });
    -    test('THEN does not throw for a non-existent shared-config', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/non-existent/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'snapshot-s3')
    -        }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -
    -  describe('WHEN snapshot-file Mosaic mode is set', () => {
    -    let savedEnv = process.env;
    -    beforeEach(() => {
    -      process.env = { MOSAIC_SNAPSHOT_DIR: '/some/snapshots' };
    -      vol.fromNestedJSON({
    -        'some/snapshots/mynamespace/mydir': {
    -          'shared-config.json': '{"config": { "someValue": true }}'
    -        }
    -      });
    -      vi.mock('fs', () => ({ default: fs }));
    -    });
    -    afterEach(() => {
    -      vol.reset();
    -      process.env = savedEnv;
    -    });
    -
    -    test('THEN reads shared-config from a local file', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/mynamespace/mydir/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'snapshot-file')
    -        }
    -      });
    -      expect(content).toEqual({ props: { sharedConfig: { someValue: true } } });
    -    });
    -    test('THEN does not throw for a non-existent shared-config', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/mynamespace/non-existent/mypage.mdx',
    -        res: {
    -          getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'snapshot-file')
    -        }
    -      });
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -
    -  describe('WHEN active Mosaic mode is set', () => {
    -    beforeAll(() => {
    -      fetchMock.enableMocks();
    -      fetchMock.mockResponses(
    -        [JSON.stringify({ config: { someValue: true } }), { status: 200 }],
    -        ['', { status: 404 }]
    -      );
    -    });
    -    afterAll(() => {
    -      fetchMock.disableMocks();
    -    });
    -    test('THEN shared-config is fetched from the data source', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/mynamespace/mypage.mdx',
    -        res: { getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'active') }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: { sharedConfig: { someValue: true } } });
    -    });
    -    test('THEN does not throw for a non-existent shared-config', async () => {
    -      // arrange
    -      const content = await withSharedConfig({
    -        resolvedUrl: '/mynamespace/non-existent/mypage.mdx',
    -        res: { getHeader: name => (name === 'X-Mosaic-Content-Url' ? 'http://mydomain' : 'active') }
    -      });
    -      // assert
    -      expect(content).toEqual({ props: {} });
    -    });
    -  });
    -});
    diff --git a/packages/site-middleware/src/compileMdx.ts b/packages/site-middleware/src/compileMdx.ts
    deleted file mode 100644
    index e3fd093e..00000000
    --- a/packages/site-middleware/src/compileMdx.ts
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -import { serialize } from 'next-mdx-remote/serialize';
    -import remarkGfm from 'remark-gfm';
    -import rehypeSlug from 'rehype-slug';
    -import { codeBlocks } from './plugins/codeBlocks.js';
    -
    -export async function compileMDX(
    -  content,
    -  parseFrontmatter = true,
    -  rehypePlugins = [],
    -  remarkPlugins = []
    -) {
    -  const mdxSource = await serialize(content, {
    -    mdxOptions: {
    -      rehypePlugins: [codeBlocks, rehypeSlug, ...remarkPlugins],
    -      remarkPlugins: [remarkGfm, ...rehypePlugins]
    -    },
    -    parseFrontmatter
    -  });
    -  return mdxSource;
    -}
    diff --git a/packages/site-middleware/src/createMiddlewareRunner.ts b/packages/site-middleware/src/createMiddlewareRunner.ts
    deleted file mode 100644
    index 7716f957..00000000
    --- a/packages/site-middleware/src/createMiddlewareRunner.ts
    +++ /dev/null
    @@ -1,106 +0,0 @@
    -import type { GetServerSidePropsContext } from 'next';
    -import deepmerge from 'deepmerge';
    -
    -import type { MosaicAppProps } from './middlewarePresets.js';
    -import MiddlewareError from './MiddlewareError.js';
    -
    -const overwriteMerge = (_, sourceArray) => sourceArray;
    -
    -/** Props returned after running Middleware */
    -export type MiddlewareResult = Awaited>;
    -
    -/** Options to be passed to Middleware */
    -export type MosaicMiddlewareOptions = Record;
    -
    -/** Middleware callbacks return props to be added to the page */
    -export type MosaicMiddleware = (
    -  /** Context provides information on the current page */
    -  context: GetServerSidePropsContext,
    -  /** Middleware specific options */
    -  options?: TOptions,
    -  /** Previous result created by plugins */
    -  lastState?: Record
    -) => Promise>;
    -
    -/** Middleware with a configuration object specifying options */
    -export type MosaicMiddlewareWithConfig = [
    -  MosaicMiddleware,
    -  TConfig
    -];
    -
    -/** Function to run all provided middleware */
    -export type MosaicMiddlewareRunner = (
    -  context: GetServerSidePropsContext,
    -  options: MosaicMiddlewareOptions
    -) => Promise>;
    -
    -/**
    - * Creates a middleware runner from the collection of provided middleware
    - * @param initialState initial state
    - * @param middleware a collection of middleware to be executed in order to get the page props
    - * @returns a middleware runner
    - */
    -export function createMiddlewareRunner(
    -  initialState: Record,
    -  middleware: Array | MosaicMiddlewareWithConfig>
    -): MosaicMiddlewareRunner {
    -  return async function middlewareRunner(context, options) {
    -    let result: MiddlewareResult = initialState;
    -    const errors: Error[] = [];
    -    // eslint-disable-next-line no-restricted-syntax
    -    for (const fnOrConfig of middleware) {
    -      let fn: MosaicMiddleware;
    -      let finalOptions = options;
    -      try {
    -        if (typeof fnOrConfig === 'function') {
    -          fn = fnOrConfig;
    -        } else {
    -          fn = fnOrConfig[0];
    -          finalOptions = { ...options, ...fnOrConfig[1] };
    -        }
    -        // eslint-disable-next-line no-await-in-loop
    -        const nextState = await fn(context, finalOptions, result);
    -        result = deepmerge>(result, nextState, {
    -          arrayMerge: overwriteMerge
    -        });
    -      } catch (error) {
    -        if (error instanceof Error) {
    -          errors.push(error);
    -        } else {
    -          const unexpectedError = new MiddlewareError(500, undefined, [String(error)], {
    -            show500: true
    -          });
    -          errors.push(unexpectedError);
    -        }
    -      }
    -    }
    -    if (result.redirect) {
    -      return { redirect: result.redirect };
    -    }
    -    const show404 = errors.some(error => {
    -      if (error instanceof MiddlewareError) {
    -        return error.props?.show404;
    -      }
    -      return false;
    -    });
    -    const show500 =
    -      !show404 &&
    -      errors.some(error => {
    -        if (error instanceof MiddlewareError) {
    -          return error.props?.show500;
    -        }
    -        return true;
    -      });
    -
    -    if (show500) {
    -      console.error('An un-expected error(s) was thrown which caused the 500 page to appear');
    -      errors.forEach(console.error);
    -    }
    -
    -    if (show404 || show500) {
    -      context.res.setHeader(`X-Mosaic-${show404 ? '404' : '500'}`, 'true');
    -    }
    -    const props: TProps = { ...result.props, show404, show500 } as TProps;
    -    return { props };
    -  };
    -}
    diff --git a/packages/site-middleware/src/index.ts b/packages/site-middleware/src/index.ts
    deleted file mode 100644
    index 79134514..00000000
    --- a/packages/site-middleware/src/index.ts
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -export * from './compileMdx.js';
    -export * from './createMiddlewareRunner.js';
    -export * from './MiddlewareError.js';
    -export * from './middlewarePresets.js';
    -export * from './withMDXContent.js';
    -export * from './withMosaicMode.js';
    -export * from './withSearchIndex.js';
    -export * from './withSession.js';
    -export * from './withSharedConfig.js';
    diff --git a/packages/site-middleware/src/loaders/__tests__/createS3Loader.test.ts b/packages/site-middleware/src/loaders/__tests__/createS3Loader.test.ts
    deleted file mode 100644
    index 97e16acc..00000000
    --- a/packages/site-middleware/src/loaders/__tests__/createS3Loader.test.ts
    +++ /dev/null
    @@ -1,56 +0,0 @@
    -import { describe, test, expect, beforeAll, afterAll } from 'vitest';
    -import { GetObjectCommand, HeadObjectCommand, S3Client } from '@aws-sdk/client-s3';
    -import { AwsStub, mockClient } from 'aws-sdk-client-mock';
    -import { sdkStreamMixin } from '@smithy/util-stream';
    -import { Readable } from 'stream';
    -
    -import { createS3Loader } from '../index.js';
    -
    -describe('GIVEN createS3Loader', () => {
    -  let savedEnv = process.env;
    -  let s3ClientMock: AwsStub<{}, { $metadata: {} }>;
    -  beforeAll(() => {
    -    process.env = {
    -      ...process.env,
    -      MOSAIC_S3_BUCKET: 'some-bucket',
    -      MOSAIC_S3_REGION: 'some-region',
    -      MOSAIC_S3_ACCESS_KEY_ID: 'some-access-key',
    -      MOSAIC_S3_SECRET_ACCESS_KEY: 'some-secret-key'
    -    };
    -    s3ClientMock = mockClient(S3Client);
    -    const stream = new Readable();
    -    stream.push('some-content');
    -    stream.push(null); // end of stream
    -    const contentStream = sdkStreamMixin(stream);
    -    s3ClientMock.on(GetObjectCommand).resolves({ Body: contentStream });
    -    s3ClientMock
    -      .on(HeadObjectCommand, {
    -        Bucket: 'some-bucket',
    -        Key: 'some-key'
    -      })
    -      .resolves({ $metadata: { httpStatusCode: 200 } });
    -    s3ClientMock
    -      .on(HeadObjectCommand, {
    -        Bucket: 'some-bucket',
    -        Key: 'non-existent-key'
    -      })
    -      .resolves({ $metadata: { httpStatusCode: 404 } });
    -  });
    -  afterAll(() => {
    -    process.env = savedEnv;
    -    s3ClientMock.reset();
    -  });
    -  test('THEN the S3 loader can load keys from buckets', async () => {
    -    // arrange
    -    const s3Client = createS3Loader('some-bucket', 'some-access-key', 'some-secret-key');
    -    // assert
    -    expect(await s3Client.loadKey('some-bucket', 'some-key')).toEqual('some-content');
    -  });
    -  test('THEN the S3 loader can check keys exist in buckets', async () => {
    -    // arrange
    -    const s3Client = createS3Loader('some-bucket', 'some-access-key', 'some-secret-key');
    -    // assert
    -    expect(await s3Client.keyExists('some-bucket', 'some-key')).toEqual(true);
    -    expect(await s3Client.keyExists('some-bucket', 'non-existent-key')).toEqual(false);
    -  });
    -});
    diff --git a/packages/site-middleware/src/loaders/__tests__/getS3Config.test.ts b/packages/site-middleware/src/loaders/__tests__/getS3Config.test.ts
    deleted file mode 100644
    index 122ae4de..00000000
    --- a/packages/site-middleware/src/loaders/__tests__/getS3Config.test.ts
    +++ /dev/null
    @@ -1,45 +0,0 @@
    -import { describe, beforeAll, test, expect, afterAll } from 'vitest';
    -import { getSnapshotS3Config } from '../index.js';
    -describe('GIVEN getS3Config', () => {
    -  describe('WHEN valid config is defined', () => {
    -    let savedEnv = process.env;
    -    beforeAll(() => {
    -      process.env = {
    -        ...process.env,
    -        MOSAIC_S3_BUCKET: 'some-bucket',
    -        MOSAIC_S3_REGION: 'some-region',
    -        MOSAIC_S3_ACCESS_KEY_ID: 'some-access-key',
    -        MOSAIC_S3_SECRET_ACCESS_KEY: 'some-secret-key'
    -      };
    -    });
    -    afterAll(() => {
    -      process.env = savedEnv;
    -    });
    -    test('THEN it returns the S3 config', async () => {
    -      // arrange
    -      const config = getSnapshotS3Config('some-key');
    -      // assert
    -      expect(config).toEqual({
    -        bucket: 'some-bucket',
    -        region: 'some-region',
    -        accessKeyId: 'some-access-key',
    -        secretAccessKey: 'some-secret-key'
    -      });
    -    });
    -  });
    -  describe('WHEN invalid config is defined', () => {
    -    let savedEnv = process.env;
    -    beforeAll(() => {
    -      process.env = {};
    -    });
    -    afterAll(() => {
    -      process.env = savedEnv;
    -    });
    -    test('THEN it throws an error', () => {
    -      // assert
    -      expect(() => getSnapshotS3Config('some-key')).toThrow(
    -        /Environment variables missing for loading of S3 content for key some-key/
    -      );
    -    });
    -  });
    -});
    diff --git a/packages/site-middleware/src/loaders/__tests__/loadLocalFile.test.ts b/packages/site-middleware/src/loaders/__tests__/loadLocalFile.test.ts
    deleted file mode 100644
    index 6b99bb0b..00000000
    --- a/packages/site-middleware/src/loaders/__tests__/loadLocalFile.test.ts
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -import { describe, beforeEach, afterEach, test, expect, vi } from 'vitest';
    -import { vol, fs } from 'memfs';
    -import { loadLocalFile } from '../index.js';
    -
    -vi.mock('fs', () => ({
    -  default: fs
    -}));
    -
    -describe('GIVEN loadLocalFile', () => {
    -  beforeEach(() => {
    -    vol.fromNestedJSON({
    -      'some/snapshots/mynamespace/mydir': 'some-content',
    -      'some/snapshots/mynamespace/dir/index': 'directory index content'
    -    });
    -  });
    -  afterEach(() => {
    -    vol.reset();
    -  });
    -
    -  test('THEN it can read from a local file', async () => {
    -    // arrange
    -    const content = await loadLocalFile('some/snapshots/mynamespace/mydir');
    -    // assert
    -    expect(content).toEqual('some-content');
    -  });
    -  test('THEN it throws and error when the local file does not exist', async () => {
    -    // assert
    -    await expect(loadLocalFile('some/non-existent/mynamespace/mydir')).rejects.toThrow(
    -      "ENOENT: no such file or directory, stat 'some/non-existent/mynamespace/mydir'"
    -    );
    -  });
    -  test('THEN it loads the index file if a directory is requested', async () => {
    -    // arrange
    -    const content = await loadLocalFile('some/snapshots/mynamespace/dir');
    -    // assert
    -    expect(content).toEqual('directory index content');
    -  });
    -});
    diff --git a/packages/site-middleware/src/loaders/createS3Loader.ts b/packages/site-middleware/src/loaders/createS3Loader.ts
    deleted file mode 100644
    index b372709a..00000000
    --- a/packages/site-middleware/src/loaders/createS3Loader.ts
    +++ /dev/null
    @@ -1,61 +0,0 @@
    -import md5 from 'md5';
    -import { GetObjectCommand, HeadObjectCommand, S3Client } from '@aws-sdk/client-s3';
    -import { MetadataBearer } from '@aws-sdk/types';
    -
    -export function createClient(region, accessKeyId, secretAccessKey): S3Client {
    -  return new S3Client({
    -    region,
    -    credentials: {
    -      accessKeyId,
    -      secretAccessKey
    -    }
    -  });
    -}
    -
    -async function readFile(client, bucket, key) {
    -  const params = {
    -    Bucket: bucket,
    -    Key: key
    -  };
    -  const command = new GetObjectCommand(params);
    -  const response = await client.send(command);
    -  return response;
    -}
    -
    -const clientCache = {};
    -export function createS3Loader(region, accessKeyId, secretAccessKey) {
    -  const clientHash = md5(`${region}${accessKeyId}${secretAccessKey}`);
    -  if (!clientCache[clientHash]) {
    -    clientCache[clientHash] = createClient(region, accessKeyId, secretAccessKey);
    -  }
    -  const client = clientCache[clientHash];
    -
    -  return {
    -    loadKey: async (bucket: string, key: string): Promise => {
    -      const data = await readFile(client, bucket, key);
    -      const text = await data.Body.transformToString();
    -      return text;
    -    },
    -    keyExists: async (bucket: string, key: string): Promise => {
    -      const params = {
    -        Bucket: bucket,
    -        Key: key
    -      };
    -      const command = new HeadObjectCommand(params);
    -      let exists = false;
    -
    -      try {
    -        const response = await client.send(command);
    -        exists = response?.$metadata?.httpStatusCode === 200;
    -      } catch (error) {
    -        const bearer: MetadataBearer = error as MetadataBearer;
    -        if (bearer?.$metadata?.httpStatusCode === 404) {
    -          exists = false;
    -        } else {
    -          throw error;
    -        }
    -      }
    -      return !!exists;
    -    }
    -  };
    -}
    diff --git a/packages/site-middleware/src/loaders/getSnapshotFileConfig.ts b/packages/site-middleware/src/loaders/getSnapshotFileConfig.ts
    deleted file mode 100644
    index 764fe5f7..00000000
    --- a/packages/site-middleware/src/loaders/getSnapshotFileConfig.ts
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -import { snapshotFileEnvSchema } from '@jpmorganchase/mosaic-schemas';
    -
    -export const getSnapshotFileConfig = url => {
    -  const env = snapshotFileEnvSchema.safeParse(process.env);
    -  if (!env.success) {
    -    env.error.issues.forEach(issue => {
    -      console.error(
    -        `Missing process.env.${issue.path.join()} environment variable required to load path ${url} from local snapshot`
    -      );
    -    });
    -    throw new Error(`Environment variables missing for loading of ${url} for local snapshot`);
    -  }
    -  return {
    -    snapshotDir: env.data.MOSAIC_SNAPSHOT_DIR
    -  };
    -};
    diff --git a/packages/site-middleware/src/loaders/getSnapshotS3Config.ts b/packages/site-middleware/src/loaders/getSnapshotS3Config.ts
    deleted file mode 100644
    index 0f04a16b..00000000
    --- a/packages/site-middleware/src/loaders/getSnapshotS3Config.ts
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -import { snapshotS3EnvSchema } from '@jpmorganchase/mosaic-schemas';
    -
    -export function getSnapshotS3Config(key) {
    -  const config = snapshotS3EnvSchema.safeParse(process.env);
    -  if (!config.success) {
    -    config.error.issues.forEach(issue => {
    -      console.error(
    -        `Missing process.env.${issue.path.join()} environment variable required to load S3 bucket ${key}`
    -      );
    -    });
    -    throw new Error(`Environment variables missing for loading of S3 content for key ${key}`);
    -  }
    -  return {
    -    bucket: config.data.MOSAIC_S3_BUCKET,
    -    region: config.data.MOSAIC_S3_REGION,
    -    accessKeyId: config.data.MOSAIC_S3_ACCESS_KEY_ID,
    -    secretAccessKey: config.data.MOSAIC_S3_SECRET_ACCESS_KEY
    -  };
    -}
    diff --git a/packages/site-middleware/src/loaders/index.ts b/packages/site-middleware/src/loaders/index.ts
    deleted file mode 100644
    index c15e0563..00000000
    --- a/packages/site-middleware/src/loaders/index.ts
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -export * from './loadLocalFile.js';
    -export * from './createS3Loader.js';
    -export * from './getSnapshotS3Config';
    -export * from './getSnapshotFileConfig.js';
    diff --git a/packages/site-middleware/src/loaders/loadLocalFile.ts b/packages/site-middleware/src/loaders/loadLocalFile.ts
    deleted file mode 100644
    index 85e60228..00000000
    --- a/packages/site-middleware/src/loaders/loadLocalFile.ts
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -import fs from 'fs';
    -import path from 'path';
    -
    -export const loadLocalFile = async (filePath: string): Promise => {
    -  let localPath = filePath;
    -  if ((await fs.promises.stat(filePath)).isDirectory()) {
    -    localPath = path.posix.join(localPath, 'index');
    -  }
    -  const realPath = await fs.promises.realpath(localPath);
    -  const data = await fs.promises.readFile(realPath, 'utf-8');
    -  return data.toString();
    -};
    diff --git a/packages/site-middleware/src/middlewarePresets.ts b/packages/site-middleware/src/middlewarePresets.ts
    deleted file mode 100644
    index ae9737c5..00000000
    --- a/packages/site-middleware/src/middlewarePresets.ts
    +++ /dev/null
    @@ -1,47 +0,0 @@
    -import type { Redirect } from 'next';
    -import { SearchIndexSlice, SharedConfigSlice } from '@jpmorganchase/mosaic-store';
    -import type { ContentProps } from '@jpmorganchase/mosaic-types';
    -import { withSearchIndex } from './withSearchIndex.js';
    -import { withSharedConfig } from './withSharedConfig.js';
    -import { withMDXContent } from './withMDXContent.js';
    -import { MosaicMiddleware, MosaicMiddlewareWithConfig } from './createMiddlewareRunner.js';
    -import { withMosaicMode, type MosaicModeProps } from './withMosaicMode.js';
    -
    -export type BaseMosaicAppProps = {
    -  /** Flag to show custom 404 page, whilst maintaining current state/layout */
    -  show404?: boolean;
    -  /** Flag to show custom 500 page, whilst maintaining current state/layout */
    -  show500?: boolean;
    -};
    -
    -/** Abstract Mosaic App Props */
    -export type MosaicAppProps = {
    -  /** Page props created by [[`Middleware`]] */
    -  props?: T;
    -  /** Error description */
    -  errors?: {
    -    /** Stacktrace * */
    -    location?: string;
    -    /** Error message * */
    -    statusText?: string;
    -    /** Error code */
    -    status?: number;
    -  } & BaseMosaicAppProps;
    -  /** Next JS Redirect */
    -  redirect?: Redirect;
    -};
    -
    -/** Mosaic getServerSideProps result which supports error handling */
    -export type GetMosaicServerSidePropsResult = MosaicAppProps;
    -
    -/** MiddlewarePresets props */
    -export type MiddlewarePresetsProps = MosaicModeProps &
    -  ContentProps &
    -  SearchIndexSlice &
    -  SharedConfigSlice;
    -
    -/** A collection of preset [[`Middleware`]] plugins that will compose together the page props */
    -export const middlewarePresets: Array<
    -  | MosaicMiddleware
    -  | MosaicMiddlewareWithConfig
    -> = [withMosaicMode, withSharedConfig, withMDXContent, withSearchIndex];
    diff --git a/packages/site-middleware/src/plugins/codeBlocks.ts b/packages/site-middleware/src/plugins/codeBlocks.ts
    deleted file mode 100644
    index ef94d2a3..00000000
    --- a/packages/site-middleware/src/plugins/codeBlocks.ts
    +++ /dev/null
    @@ -1,87 +0,0 @@
    -import type { Root } from 'hast';
    -import type { Plugin, Transformer } from 'unified';
    -import { visitParents } from 'unist-util-visit-parents';
    -import { fromMarkdown } from 'mdast-util-from-markdown';
    -import { mdxjs } from 'micromark-extension-mdxjs';
    -import { mdxFromMarkdown } from 'mdast-util-mdx';
    -import { type MdxJsxFlowElementHast } from 'mdast-util-mdx-jsx';
    -// @ts-ignore
    -import { propertiesToMdxJsxAttributes } from 'hast-util-properties-to-mdx-jsx-attributes';
    -
    -/**
    - * Modified from: https://github.com/remcohaszing/rehype-mdx-code-props/blob/main/src/rehype-mdx-code-props.ts
    - *
    - * Custom meta parser for codefences that have extra params. e.g.
    - * ```jsx filename="hello.jsx"
    - * 
    Test!
    - * ``` - * - * Custom meta parser for codefences that have eval or eval="true". - * This allows vars to be resolved and their values used as the code block body. - * ```jsx eval - * meta.data.someStringOnlyAvailableAtRuntime - * ``` - */ -export const transformer: Transformer = ast => { - visitParents(ast, 'element', (node, ancestors) => { - if (node.tagName !== 'code') { - return; - } - - const meta = node.data?.meta; - - if (typeof meta !== 'string' || !meta) { - return; - } - - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - let parent = ancestors.at(-1)!; - - if (parent.type !== 'element') { - return; - } - - if (parent.tagName !== 'pre') { - return; - } - - if (parent.children.length !== 1) { - return; - } - - const child = parent; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - parent = ancestors.at(-2)!; - - // Limit eval to just basic strings that start with "meta." - // const isEval = - // /(^| )eval(="true"| |$)/.test(meta) && /^meta\.[a-z0-9_[\].$"']+$/i.test(child.value); - // - // let code; - // if (!isEval) { - // code = JSON.stringify(`${child.value}\n`); - // } else { - // code = child.value; - // } - - const replacement = fromMarkdown(`<${child.tagName} ${meta} />`, { - extensions: [mdxjs()], - mdastExtensions: [mdxFromMarkdown()] - }).children[0] as MdxJsxFlowElementHast; - replacement.children = child.children; - replacement.data = child.data; - replacement.position = child.position; - replacement.attributes.unshift( - ...propertiesToMdxJsxAttributes(child.properties, { elementAttributeNameCase: 'react' }) - ); - - parent.children[parent.children.indexOf(child)] = replacement; - }); -}; - -/** - * A markdown plugin for transforming code metadata. - * - * @returns A unified transformer. - */ -export const codeBlocks: Plugin<[], Root> = () => transformer; diff --git a/packages/site-middleware/src/withMDXContent.ts b/packages/site-middleware/src/withMDXContent.ts deleted file mode 100644 index 16841590..00000000 --- a/packages/site-middleware/src/withMDXContent.ts +++ /dev/null @@ -1,123 +0,0 @@ -import path from 'path'; -import { GetServerSidePropsContext } from 'next'; -import type { ContentProps, MosaicMode } from '@jpmorganchase/mosaic-types'; -import { MosaicMiddleware } from './createMiddlewareRunner.js'; -import MiddlewareError from './MiddlewareError.js'; -import { - createS3Loader, - getSnapshotFileConfig, - getSnapshotS3Config, - loadLocalFile -} from './loaders'; -import { compileMDX } from './compileMdx.js'; - -if (typeof window !== 'undefined') { - throw new Error('This file should not be loaded on the client.'); -} -function stripParams(resolvedUrl: string) { - const url = new URL(resolvedUrl, 'https://example.com'); - return url.pathname; -} - -function normalizeUrl(url: string) { - return /\/index$/.test(url) ? `${url}.mdx` : url; -} - -async function loadSnapshotFile(url) { - const { snapshotDir } = getSnapshotFileConfig(url); - const normalizedUrl = normalizeUrl(url); - const filePath = path.posix.join(process.cwd(), snapshotDir, normalizedUrl); - try { - return await loadLocalFile(filePath); - } catch (error) { - if (error instanceof Error) { - console.error(error.message); - } - throw new MiddlewareError(404, url, [`Could not read local file '${filePath}' for '${url}'`], { - show404: true - }); - } -} - -async function loadSnapshotS3(url) { - let text; - try { - const { accessKeyId, bucket, region, secretAccessKey } = getSnapshotS3Config(url); - const s3Loader = createS3Loader(region, accessKeyId, secretAccessKey); - const normalizedUrl = normalizeUrl(url); - const s3Key = normalizedUrl.replace(/^\//, ''); - text = await s3Loader.loadKey(bucket, s3Key); - } catch (error) { - if (error instanceof Error) { - console.error(error.message); - } - throw new MiddlewareError(404, url, [`Could not find an S3 object for '${url}'`], { - show404: true - }); - } - return text; -} - -async function loadActiveContent(url) { - let text; - const normalizedUrl = normalizeUrl(url); - const response = await fetch(normalizedUrl); - if (response.ok) { - text = await response.text(); - // If redirect url was returned - } else if (response.status === 302) { - return { - redirect: { - destination: (await response.json()).redirect, - permanent: true - } - }; - } else { - throw new MiddlewareError(404, url, [`Could not fetch any content for ${url}`], { - show404: true - }); - } - return text; -} -/** - * Adds the [[`type`, `source`, `raw`,]] object to the page props - * @param context - */ -export const withMDXContent: MosaicMiddleware = async ( - context: GetServerSidePropsContext -) => { - const { resolvedUrl } = context; - const mosaicMode = context.res.getHeader('X-Mosaic-Mode' || 'active') as MosaicMode; - const extname = path.extname(resolvedUrl); - const pathname = stripParams(resolvedUrl); - // Any urls which are not prefixed, will default to MDX - const isMDX = extname === '.mdx' || extname === ''; - if (!isMDX) { - return {}; - } - let text; - if (mosaicMode === 'snapshot-file') { - text = await loadSnapshotFile(pathname); - } else if (mosaicMode === 'snapshot-s3') { - text = await loadSnapshotS3(pathname); - } else { - const mosaicUrl = context.res.getHeader('X-Mosaic-Content-Url'); - const fetchedResult = await loadActiveContent(`${mosaicUrl}${pathname}`); - const isRedirect = typeof fetchedResult === 'object'; - if (isRedirect) { - return fetchedResult; - } - text = fetchedResult; - } - try { - const mdxSource = await compileMDX(text); - return { props: { type: 'mdx', source: mdxSource, raw: text } }; - } catch (error) { - console.error(error); - if (error instanceof Error) { - throw new MiddlewareError(500, resolvedUrl, [error.message], { show500: true }); - } else { - throw new MiddlewareError(500, resolvedUrl, ['unexpected error'], { show500: true }); - } - } -}; diff --git a/packages/site-middleware/src/withMosaicMode.ts b/packages/site-middleware/src/withMosaicMode.ts deleted file mode 100644 index 2ada9dbb..00000000 --- a/packages/site-middleware/src/withMosaicMode.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { MosaicMode } from '@jpmorganchase/mosaic-types'; - -import type { MosaicMiddleware } from './createMiddlewareRunner.js'; - -if (typeof window !== 'undefined') { - throw new Error('This file should not be loaded on the client.'); -} - -/** - * [[`MosaicModeProps`]] specifies the mode mosaic uses - */ -export interface MosaicModeProps { - mode?: MosaicMode; -} - -/** - * Adds the [[`MosaicModeProps`]] object to the page props - * @param context - */ -export const withMosaicMode: MosaicMiddleware = async context => { - const mode: MosaicMode = (process.env.MOSAIC_MODE || 'active') as MosaicMode; - const mosaicContentUrl = process.env[`MOSAIC_${mode.toUpperCase()}_MODE_URL`] || ''; - context.res.setHeader('X-Mosaic-Mode', mode); - context.res.setHeader('X-Mosaic-Content-Url', mosaicContentUrl); - return { props: { mode } }; -}; diff --git a/packages/site-middleware/src/withSearchIndex.ts b/packages/site-middleware/src/withSearchIndex.ts deleted file mode 100644 index 887c1215..00000000 --- a/packages/site-middleware/src/withSearchIndex.ts +++ /dev/null @@ -1,104 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import { GetServerSidePropsContext } from 'next'; -import type { SearchIndexSlice } from '@jpmorganchase/mosaic-store'; -import { MosaicMiddleware } from './createMiddlewareRunner.js'; -import MiddlewareError from './MiddlewareError.js'; -import { - createS3Loader, - getSnapshotFileConfig, - getSnapshotS3Config, - loadLocalFile -} from './loaders'; - -if (typeof window !== 'undefined') { - throw new Error('This file should not be loaded on the client.'); -} - -const searchDataFile = 'search-data-condensed.json'; -const searchConfigFile = 'search-config.json'; - -const getSnapshotFile = async (urlPath, targetPath) => { - const { snapshotDir } = getSnapshotFileConfig(urlPath); - const filePath = path.join(process.cwd(), snapshotDir, targetPath); - try { - await fs.promises.stat(filePath); - const rawSearchIndex = await loadLocalFile(filePath); - return JSON.parse(rawSearchIndex); - } catch { - console.warn(`Could not load data from ${urlPath}/${targetPath}`); - return false; - } -}; - -const getSnapshotS3File = async (urlPath, targetPath) => { - const { accessKeyId, bucket, region, secretAccessKey } = getSnapshotS3Config(targetPath); - const { keyExists, loadKey } = createS3Loader(region, accessKeyId, secretAccessKey); - const s3KeyExists = await keyExists(bucket, targetPath); - if (s3KeyExists) { - const rawSearchIndex = await loadKey(bucket, targetPath); - return JSON.parse(rawSearchIndex); - } else { - console.warn(`Could not load data from ${urlPath}/${targetPath}`); - return false; - } -}; - -const getFechedFile = async (mosaicUrl, targetPath) => { - const response = await fetch(`${mosaicUrl}/${targetPath}`, { - headers: { - 'Content-Type': 'application/json' - } - }); - if (response.ok) { - return await response.json(); - } else if (response.status !== 404) { - throw Error(`${response.status} - ${response.statusText}`); - } else { - console.warn(`Could not load data from ${mosaicUrl}/${targetPath}`); - return false; - } -}; - -/** - * Adds the [[`searchIndex`]] props to the page props - * @param _context - * @returns site props object - */ -export const withSearchIndex: MosaicMiddleware = async ( - context: GetServerSidePropsContext -) => { - const { res, resolvedUrl } = context; - const isSnapshotFile = res.getHeader('X-Mosaic-Mode') === 'snapshot-file'; - const isSnapshotS3 = res.getHeader('X-Mosaic-Mode') === 'snapshot-s3'; - - const matches = resolvedUrl.match(/(.*)[!/]/); - const urlPath = matches?.length ? matches[1] : ''; - - try { - let searchIndex; - let searchConfig; - if (isSnapshotFile) { - searchIndex = await getSnapshotFile(urlPath, searchDataFile); - searchConfig = await getSnapshotFile(urlPath, searchConfigFile); - } else if (isSnapshotS3) { - searchIndex = await getSnapshotS3File(urlPath, searchDataFile); - searchConfig = await getSnapshotS3File(urlPath, searchConfigFile); - } else { - const mosaicUrl = res.getHeader('X-Mosaic-Content-Url'); - searchIndex = await getFechedFile(mosaicUrl, searchDataFile); - searchConfig = await getFechedFile(mosaicUrl, searchConfigFile); - } - if (searchIndex && searchConfig) { - return { props: { searchConfig, searchIndex } }; - } - return { props: {} }; - } catch (error) { - console.error(error); - let errorMessage = `Could not load any search index for ${resolvedUrl}`; - throw new MiddlewareError(500, resolvedUrl, [errorMessage], { - show404: false, - show500: true - }); - } -}; diff --git a/packages/site-middleware/src/withSession.ts b/packages/site-middleware/src/withSession.ts deleted file mode 100644 index a738d565..00000000 --- a/packages/site-middleware/src/withSession.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { type NextAuthOptions, getServerSession } from 'next-auth'; -import type { Session } from '@jpmorganchase/mosaic-types'; -import { MosaicMiddleware } from './createMiddlewareRunner.js'; -import MiddlewareError from './MiddlewareError.js'; - -if (typeof window !== 'undefined') { - throw new Error('This file should not be loaded on the client.'); -} - -/** - * [[`SessionProps`]] specifies session object containing user profile of logged in user - */ -export interface SessionProps { - session?: Session; -} - -/** - * [[`SessionOptions`]] specifies a configuration object for the withSession middleware - */ -export interface SessionOptions { - /** is login required for the environment */ - loginRequired: boolean; - authOptions: NextAuthOptions; -} - -/** - * Adds the [[`Session`]] object to the page props - * @param context - * @param options - */ -export const withSession: MosaicMiddleware, SessionOptions> = async ( - context, - options -) => { - if (process.env.NEXT_PUBLIC_ENABLE_LOGIN !== 'true') { - return {}; - } - - if (!options?.authOptions) { - const errorMessage = '`authOptions` must be provided.'; - throw new MiddlewareError(500, context.resolvedUrl, [errorMessage], { - show500: true - }); - } - - const session = await getServerSession(context.req, context.res, options.authOptions); - - return { - props: { - session: { - ...session, - isLoggedIn: session !== null - } - } - }; -}; diff --git a/packages/site-middleware/src/withSharedConfig.ts b/packages/site-middleware/src/withSharedConfig.ts deleted file mode 100644 index e8472450..00000000 --- a/packages/site-middleware/src/withSharedConfig.ts +++ /dev/null @@ -1,82 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import { GetServerSidePropsContext } from 'next'; -import type { SharedConfig, SharedConfigSlice } from '@jpmorganchase/mosaic-store'; -import { MosaicMiddleware } from './createMiddlewareRunner.js'; -import MiddlewareError from './MiddlewareError.js'; -import { - createS3Loader, - getSnapshotFileConfig, - getSnapshotS3Config, - loadLocalFile -} from './loaders'; - -if (typeof window !== 'undefined') { - throw new Error('This file should not be loaded on the client.'); -} - -/** - * Adds the [[`sharedConfig`]] props to the page props - * @param _context - * @param _params - */ -export const withSharedConfig: MosaicMiddleware = async ( - context: GetServerSidePropsContext -) => { - const { resolvedUrl, res } = context; - const isSnapshotFile = res.getHeader('X-Mosaic-Mode') === 'snapshot-file'; - const isSnapshotS3 = res.getHeader('X-Mosaic-Mode') === 'snapshot-s3'; - - const matches = resolvedUrl.match(/(.*)[!/]/); - const urlPath = matches?.length ? matches[1] : ''; - try { - let sharedConfig; - if (isSnapshotFile) { - const { snapshotDir } = getSnapshotFileConfig(urlPath); - const filePath = path.join(process.cwd(), snapshotDir, urlPath, 'shared-config.json'); - let fileExists = false; - try { - await fs.promises.stat(filePath); - fileExists = true; - } catch {} - if (fileExists) { - const rawSharedConfig = await loadLocalFile(filePath); - sharedConfig = JSON.parse(rawSharedConfig); - } - } else if (isSnapshotS3) { - const s3Key = `${urlPath}/shared-config.json`.replace(/^\//, ''); - const { accessKeyId, bucket, region, secretAccessKey } = getSnapshotS3Config(s3Key); - const { keyExists, loadKey } = createS3Loader(region, accessKeyId, secretAccessKey); - - const s3KeyExists = await keyExists(bucket, s3Key); - if (s3KeyExists) { - const rawSharedConfig = await loadKey(bucket, s3Key); - sharedConfig = JSON.parse(rawSharedConfig); - } - } else { - const mosaicUrl = res.getHeader('X-Mosaic-Content-Url'); - const response = await fetch(`${mosaicUrl}${urlPath}/shared-config.json`, { - headers: { - 'Content-Type': 'application/json' - } - }); - if (response.ok) { - sharedConfig = await response.json(); - } else if (response.status !== 404) { - throw Error(`${response.status} - ${response.statusText}`); - } - } - if (sharedConfig) { - const { config } = sharedConfig as { config: SharedConfig }; - return { props: { sharedConfig: config } }; - } - return { props: {} }; - } catch (error) { - console.error(error); - let errorMessage = `Could not load any shared config for ${resolvedUrl}`; - throw new MiddlewareError(500, resolvedUrl, [errorMessage], { - show404: false, - show500: true - }); - } -}; diff --git a/packages/site-preset-styles/package.json b/packages/site-preset-styles/package.json index 72891e7d..2c057e07 100644 --- a/packages/site-preset-styles/package.json +++ b/packages/site-preset-styles/package.json @@ -27,19 +27,17 @@ "devDependencies": { "del-cli": "^4.0.1", "esbuild": "0.23.1", - "esbuild-node-externals": "^1.0.2" + "esbuild-node-externals": "^1.12.0" }, "dependencies": { "@salt-ds/theme": "^1.19.0", "@salt-ds/icons": "^1.12.1", "@jpmorganchase/mosaic-components": "0.1.0-beta.89", - "@jpmorganchase/mosaic-labs-components": "0.1.0-beta.89", "@jpmorganchase/mosaic-open-api-component": "0.1.0-beta.89", "@jpmorganchase/mosaic-content-editor-plugin": "0.1.0-beta.89", "@jpmorganchase/mosaic-site-components": "0.1.0-beta.89", "@jpmorganchase/mosaic-layouts": "0.1.0-beta.89", - "@jpmorganchase/mosaic-theme": "0.1.0-beta.89", - "prismjs": "^1.23.0" + "@jpmorganchase/mosaic-theme": "0.1.0-beta.89" }, "peerDependencies": {} } diff --git a/packages/site-preset-styles/src/index.js b/packages/site-preset-styles/src/index.js index 6aea1782..4fd10bf8 100644 --- a/packages/site-preset-styles/src/index.js +++ b/packages/site-preset-styles/src/index.js @@ -1,11 +1,13 @@ import '@salt-ds/theme/css/global.css'; import '@salt-ds/theme/css/theme.css'; +import '@salt-ds/icons/css/salt-icon.css'; +import '@salt-ds/core/css/salt-core.css'; +import '@salt-ds/lab/css/salt-lab.css'; import '@jpmorganchase/mosaic-theme/index.css'; import '@jpmorganchase/mosaic-theme/baseline.css'; -import '@jpmorganchase/mosaic-theme/salt.css'; import '@jpmorganchase/mosaic-layouts/index.css'; import '@jpmorganchase/mosaic-site-components/index.css'; import '@jpmorganchase/mosaic-components/index.css'; -import '@jpmorganchase/mosaic-labs-components/index.css'; +import '@jpmorganchase/mosaic-mdx-components/index.css'; import '@jpmorganchase/mosaic-content-editor-plugin/index.css'; -import 'prismjs/themes/prism.css'; +import '@jpmorganchase/mosaic-open-api-component/index.css'; diff --git a/packages/site/.env.local b/packages/site/.env.local index 31464e4a..bfcf4e26 100644 --- a/packages/site/.env.local +++ b/packages/site/.env.local @@ -4,6 +4,5 @@ OPTIMIZE_IMAGES=false NEXTAUTH_URL=http://localhost:3000 NODE_ENV=development MOSAIC_ENABLE_SOURCE_PUSH=true -NEXTAUTH_URL=http://localhost:3000/ NEXT_PUBLIC_MOSAIC_IBCE_PREVIEW_URL=/api/content/preview NEXT_PUBLIC_MOSAIC_WORKFLOWS_URL=ws://localhost:8080/workflows \ No newline at end of file diff --git a/packages/site/.eslintrc.js b/packages/site/.eslintrc.js index 38c0c80d..77b1f75f 100644 --- a/packages/site/.eslintrc.js +++ b/packages/site/.eslintrc.js @@ -1,8 +1,9 @@ module.exports = { + extends: ['eslint:recommended', 'next'], + ignorePatterns: ['**/*.test.*'], overrides: [ { files: ['./src/**/*'], - extends: ['next'], rules: { 'import/no-extraneous-dependencies': ['off'], 'import/no-duplicates': ['off'], diff --git a/packages/site/mosaic.config.mjs b/packages/site/mosaic.config.mjs index 359e6dec..41f5b72d 100644 --- a/packages/site/mosaic.config.mjs +++ b/packages/site/mosaic.config.mjs @@ -21,7 +21,12 @@ const siteConfig = { priority: -1, options: { outputDir: './public', - assets: ['sitemap.xml', 'search-data.json'] + assets: [ + 'search-config.json', + 'search-data.json', + 'search-data-condensed.json', + 'sitemap.xml' + ] } }, { @@ -54,19 +59,19 @@ export default deepmerge(siteConfig, { prefixDir: 'mosaic', // root path used for namespace extensions: ['.mdx'] // extensions of content which should be pulled } - }, + } /** * Tags examples require multiple sources */ - { - disabled: process.env.NODE_ENV !== 'development', - modulePath: '@jpmorganchase/mosaic-source-local-folder', - namespace: 'mosaic', - options: { - rootDir: '../../docs-tags', - prefixDir: 'mosaic/products', - extensions: ['.mdx'] - } - } + // { + // disabled: process.env.NODE_ENV !== 'development', + // modulePath: '@jpmorganchase/mosaic-source-local-folder', + // namespace: 'mosaic', + // options: { + // rootDir: '../../docs-tags', + // prefixDir: 'mosaic/products', + // extensions: ['.mdx'] + // } + // } ] }); diff --git a/packages/site/next-env.d.ts b/packages/site/next-env.d.ts index 4f11a03d..fd36f949 100644 --- a/packages/site/next-env.d.ts +++ b/packages/site/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/site/next.config.js b/packages/site/next.config.js index 2246e025..2631cd2f 100755 --- a/packages/site/next.config.js +++ b/packages/site/next.config.js @@ -1,35 +1,20 @@ -const webpack = require('webpack'); +const withBundleAnalyzer = require('@next/bundle-analyzer')({ + enabled: process.env.ANALYZE === 'true' +}); -module.exports = { +const nextConfig = { + experimental: { + mdxRs: true, + serverComponentsExternalPackages: ['@daviereid/next-mdx-remote'] + }, reactStrictMode: true, + output: process.env.GENERATE_STATIC_PARAMS_URL ? 'export' : 'standalone', swcMinify: true, experimental: { outputFileTracingExcludes: { '*': ['**/.next/cache/webpack'] } }, - transpilePackages: [ - '@jpmorganchase/mosaic-components', - '@jpmorganchase/mosaic-content-editor-plugin', - '@jpmorganchase/mosaic-labs-components', - '@jpmorganchase/mosaic-layouts', - '@jpmorganchase/mosaic-open-api-component', - '@jpmorganchase/mosaic-site-components', - '@jpmorganchase/mosaic-site-middleware', - '@jpmorganchase/mosaic-theme', - '@jpmorganchase/mosaic-store' - ], - rewrites() { - return { - // These rewrites are checked after headers/redirects - // and before all files including _next/public files which - // allows overriding page files - beforeFiles: [{ source: '/favicon.ico', destination: '/img/favicon.png' }], - // These rewrites are checked after pages/public files - // are checked but before dynamic routes - afterFiles: [] - }; - }, images: { domains: [ /** Insert the domains where you will load images from */ @@ -43,26 +28,10 @@ module.exports = { } else { config.resolve.fallback = { fs: false }; } + config.experiments.topLevelAwait = true; return config; }, - env: {}, - async redirects() { - return [ - { - source: '/', - destination: '/mosaic/index', - permanent: true - }, - { - source: '/mosaic', - destination: '/mosaic/index', - permanent: true - }, - { - source: '/local', - destination: '/local/index', - permanent: true - } - ]; - } + env: {} }; + +module.exports = withBundleAnalyzer(nextConfig); diff --git a/packages/site/package.json b/packages/site/package.json index dc68bb0f..ce845f3e 100644 --- a/packages/site/package.json +++ b/packages/site/package.json @@ -13,27 +13,31 @@ "types": "dist/index.d.ts", "style": "dist/index.css", "scripts": { + "analyze": "ANALYZE=true yarn build", "clean": "rm -fr public/.tmp .next", "build": "next build", + "export:static": "yarn mosaic export:static", + "build:static": "yarn cross-env GENERATE_STATIC_PARAMS_URL=\"http://localhost:8080/search-data-condensed.json\" concurrently --kill-others \"next build\"", "dev": "next dev", "start": "next start", "debug": "yarn mosaic serve -c ./mosaic.config.mjs -p 8080", - "deploy": "yarn mosaic deploy --out snapshots --name latest --config mosaic.config.mjs", + "deploy": "yarn mosaic deploy --out out --name latest --config mosaic.config.mjs", "docker:build": "docker build . --tag mosaic-site:latest", "docker:start": "docker run -it --rm --ipc=host -p 3000:3000 --network mosaic-net --name mosaic-site mosaic-site:latest", "e2e": "yarn playwright test", "e2e:codegen": "yarn playwright codegen localhost:3000", - "gen:snapshot": "yarn mosaic build --out snapshots --name latest --config mosaic.config.mjs", - "serve:snapshot:file": "yarn cross-env MOSAIC_MODE=\"snapshot-file\" concurrently --kill-others \"yarn dev\"", - "serve:snapshot:s3": "yarn cross-env MOSAIC_MODE=\"snapshot-s3\" concurrently --kill-others \"yarn dev\"", + "serve:fs": "yarn mosaic serve -c ./mosaic.config.mjs -p 8080", + "serve:static": "yarn mosaic serve:static -o ./out -p 3000", "serve": "concurrently --kill-others \"yarn dev\" \"yarn mosaic serve -c ./mosaic.config.mjs\" -p 8080" }, "dependencies": { + "@jpmorganchase/mosaic-loaders": "^0.1.0-beta.89", "@jpmorganchase/mosaic-cli": "^0.1.0-beta.89", "@jpmorganchase/mosaic-components": "^0.1.0-beta.89", "@jpmorganchase/mosaic-content-editor-plugin": "^0.1.0-beta.89", "@jpmorganchase/mosaic-layouts": "^0.1.0-beta.89", "@jpmorganchase/mosaic-site-components": "^0.1.0-beta.89", + "@jpmorganchase/mosaic-site-components-next": "^0.1.0-beta.89", "@jpmorganchase/mosaic-site-preset-styles": "^0.1.0-beta.89", "@jpmorganchase/mosaic-sitemap-component": "^0.1.0-beta.89", "@jpmorganchase/mosaic-source-git-repo": "^0.1.0-beta.89", @@ -43,13 +47,15 @@ "@jpmorganchase/mosaic-theme": "^0.1.0-beta.89", "@salt-ds/core": "^1.33.0", "@salt-ds/lab": "1.0.0-alpha.50", - "@types/react": "^18.0.26", "next": "^14.0.0", "next-auth": "^4.24.5" }, "devDependencies": { + "@next/bundle-analyzer": "14.0.0", "@next/eslint-plugin-next": "^14.0.0", + "@next/mdx": "^14.0.0", "@playwright/test": "^1.33.0", + "@types/react": "^18.2.46", "@types/node": "^16.0.0", "concurrently": "^7.1.0", "cross-env": "^7.0.3", diff --git a/packages/site/public/img/favicon.png b/packages/site/public/img/logo.png similarity index 100% rename from packages/site/public/img/favicon.png rename to packages/site/public/img/logo.png diff --git a/packages/site/snapshots/latest/search-config.json b/packages/site/public/search-config.json similarity index 100% rename from packages/site/snapshots/latest/search-config.json rename to packages/site/public/search-config.json diff --git a/packages/site/public/search-data-condensed.json b/packages/site/public/search-data-condensed.json new file mode 100644 index 00000000..07bdab0d --- /dev/null +++ b/packages/site/public/search-data-condensed.json @@ -0,0 +1 @@ +[{"title":"Mosaic","route":"/mosaic/index"},{"title":"Sitemap","route":"/mosaic/sitemap"},{"title":"Aliases","route":"/mosaic/author/aliases"},{"title":"Fragments","route":"/mosaic/author/fragments"},{"title":"Frontmatter","route":"/mosaic/author/frontmatter"},{"title":"Author","route":"/mosaic/author/index"},{"title":"Markdown Syntax","route":"/mosaic/author/markdown-syntax"},{"title":"Refs","route":"/mosaic/author/refs"},{"title":"Sidebar Configuration","route":"/mosaic/author/sidebars"},{"title":"Tags","route":"/mosaic/author/tags"},{"title":"UI Components","route":"/mosaic/author/ui-components"},{"title":"Configure","route":"/mosaic/configure/index"},{"title":"Content Fragment","route":"/mosaic/fragments/content-fragment"},{"title":"Fragments","route":"/mosaic/fragments/index"},{"title":"Tile A","route":"/mosaic/fragments/tile-a"},{"title":"Tile B","route":"/mosaic/fragments/tile-b"},{"title":"Create a Site","route":"/mosaic/getting-started/create-a-site"},{"title":"Getting Started","route":"/mosaic/getting-started/index"},{"title":"Publish a site to AWS","route":"/mosaic/getting-started/publish-site-to-aws"},{"title":"Publish","route":"/mosaic/publish/index"},{"title":"Publish a site to AWS","route":"/mosaic/publish/publish-site-to-aws"},{"title":"Publish a site to Vercel","route":"/mosaic/publish/publish-site-to-vercel"},{"title":"Test","route":"/mosaic/test/index"},{"title":"Admin","route":"/mosaic/configure/admin/index"},{"title":"Detail Highlight","route":"/mosaic/configure/layouts/detail-highlight"},{"title":"Detail Overview","route":"/mosaic/configure/layouts/detail-overview"},{"title":"Detail Technical","route":"/mosaic/configure/layouts/detail-technical"},{"title":"Layouts","route":"/mosaic/configure/layouts/index"},{"title":"Landing Layout","route":"/mosaic/configure/layouts/landing"},{"title":"Product Discover Layout","route":"/mosaic/configure/layouts/product-discover"},{"title":"Product Preview Layout","route":"/mosaic/configure/layouts/product-preview"},{"title":"Active mode","route":"/mosaic/configure/modes/active"},{"title":"Modes of operation","route":"/mosaic/configure/modes/index"},{"title":"Snapshot file mode","route":"/mosaic/configure/modes/snapshot-file"},{"title":"Snapshot AWS/S3 mode","route":"/mosaic/configure/modes/snapshot-s3"},{"title":"$AliasPlugin","route":"/mosaic/configure/plugins/alias-plugin"},{"title":"BreadcrumbsPlugin","route":"/mosaic/configure/plugins/breadcrumbs-plugin"},{"title":"BrokenLinksPlugin","route":"/mosaic/configure/plugins/broken-links-plugin"},{"title":"$CodeModPlugin","route":"/mosaic/configure/plugins/codemod-plugin"},{"title":"DocumentAssetsPlugin","route":"/mosaic/configure/plugins/document-assets-plugin"},{"title":"Plugins","route":"/mosaic/configure/plugins/index"},{"title":"LazyPagePlugin","route":"/mosaic/configure/plugins/lazy-page-plugin"},{"title":"PagesWithoutFileExtPlugin","route":"/mosaic/configure/plugins/pages-wthout-extensions-plugin"},{"title":"PublicAssetsPlugin","route":"/mosaic/configure/plugins/public-assets-plugin"},{"title":"ReadingTimePlugin","route":"/mosaic/configure/plugins/reading-time-plugin"},{"title":"$RefPlugin","route":"/mosaic/configure/plugins/ref-plugin"},{"title":"SearchIndexPlugin","route":"/mosaic/configure/plugins/search-index-plugin"},{"title":"SharedConfigPlugin","route":"/mosaic/configure/plugins/shared-config-plugin"},{"title":"SidebarPlugin","route":"/mosaic/configure/plugins/sidebar-plugin"},{"title":"SiteMapPlugin","route":"/mosaic/configure/plugins/site-map-plugin"},{"title":"$TagPlugin","route":"/mosaic/configure/plugins/tag-plugin"},{"title":"TableOfContentsPlugin","route":"/mosaic/configure/plugins/toc-plugin"},{"title":"Git Repo Source","route":"/mosaic/configure/sources/git-repo-source"},{"title":"HTTP Source","route":"/mosaic/configure/sources/http-source"},{"title":"Sources","route":"/mosaic/configure/sources/index"},{"title":"Local Folder Source","route":"/mosaic/configure/sources/local-folder-source"},{"title":"Source Schedules","route":"/mosaic/configure/sources/schedules"},{"title":"Figma Source","route":"/mosaic/configure/sources/source-figma"},{"title":"Readme Source","route":"/mosaic/configure/sources/source-readme"},{"title":"Storybook Source","route":"/mosaic/configure/sources/source-storybook"},{"title":"Custom Components","route":"/mosaic/configure/theme/custom-components"},{"title":"Custom CSS","route":"/mosaic/configure/theme/custom-css"},{"title":"Theming Your Site","route":"/mosaic/configure/theme/index"},{"title":"Aliases Test","route":"/mosaic/test/aliases/index"},{"title":"Detail Highlight Test Page","route":"/mosaic/test/layouts/detail-highlight"},{"title":"Detail Overview Test Page","route":"/mosaic/test/layouts/detail-overview"},{"title":"Detail Technical Test Page","route":"/mosaic/test/layouts/detail-technical"},{"title":"Edit Layout","route":"/mosaic/test/layouts/edit"},{"title":"Full Width Layout","route":"/mosaic/test/layouts/full-width"},{"title":"Layouts","route":"/mosaic/test/layouts/index"},{"title":"Landing Layout Test Page","route":"/mosaic/test/layouts/landing"},{"title":"Newsletter Test Page","route":"/mosaic/test/layouts/newsletter"},{"title":"Product Discover Test Page","route":"/mosaic/test/layouts/product-discover"},{"title":"Product Preview Test Page","route":"/mosaic/test/layouts/product-preview"},{"title":"Refs Data","route":"/mosaic/test/refs/data"},{"title":"Refs Test","route":"/mosaic/test/refs/index"},{"title":"Tags Test","route":"/mosaic/test/tags/index"},{"title":"$afterSource","route":"/mosaic/configure/plugins/lifecycle/after-source"},{"title":"afterUpdate","route":"/mosaic/configure/plugins/lifecycle/after-update"},{"title":"$beforeSend","route":"/mosaic/configure/plugins/lifecycle/before-send"},{"title":"Lifecycle Events","route":"/mosaic/configure/plugins/lifecycle/index"},{"title":"shouldClearCache","route":"/mosaic/configure/plugins/lifecycle/should-clear-cache"},{"title":"shouldUpdateNamespaceSources","route":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources"}] \ No newline at end of file diff --git a/packages/site/public/search-data.json b/packages/site/public/search-data.json index e08a93ae..72f9a557 100644 --- a/packages/site/public/search-data.json +++ b/packages/site/public/search-data.json @@ -1 +1 @@ -[{"title":"Mosaic","route":"/mosaic/index","content":["True to its name, Mosaic brings together several concepts—including content, design and technical infrastructure—to deliver a unified website experience that is truly greater than the sum of its individual parts.","With Mosaic, you can:","Don't move your content where it does not belong. ","Compose content from remote data sources which\n","are pulled at runtime by our content aggregator.","Visualize your content with your own theme, layouts and components or use the Mosaic Design\n","language.","Extend the existing code and add your own content source types through our simple plugin\n","architecture.","Publish your content through Server Side Rendering (SSR) or generate a snapshot of your content\n","and serve it as a Statically Generated Site (SGS).","Creating a website has never been so easy!"]},{"title":"Sitemap","route":"/mosaic/sitemap","content":["Sitemap"]},{"title":"Aliases","route":"/mosaic/author/aliases","content":["Aliases are virtual 'symlinks' of pages, allowing one page to take on one or more other routes.\n","This is not the same as copying the page, it is a primitive filesystem link which is resolved by Mosaic.","Use Cases","Aliases are great for linking to an old route if you've moved a page to a new place.\n","They can also be used to create short hand links to pages or to 'clone' a copy of a page into\n","another section of the site where it may be relevant.","Example","This is the frontmatter for this page:","---\n","title: Aliases\n","layout: DetailTechnical\n","aliases:\n"," - /mosaic/example/aliases\n","---","Try accessing this page from ","/mosaic/example/aliases"]},{"title":"Fragments","route":"/mosaic/author/fragments","content":["Fragments, also known as content fragments, are powerful tools that allow you to incorporate content from other pages into your documentation. ","By creating an MDX file and using the ","generic directives"," syntax ",", you can easily render the fragment in another file, providing modularity and reusability to your content.","Use Cases","Fragments offer various use cases, such as:","Consistent Content",": Use fragments to maintain consistent content across multiple pages. ","For instance, if you have a table or a tile that appears on multiple pages, you can create a fragment for it and include it in all relevant files. ","This ensures that any updates made to the fragment automatically reflect across the entire documentation.","Reusable Components",": Fragments enable the creation of reusable components or sections. ","You can define a complex or commonly used section once and then include it in multiple pages as needed. ","This approach saves time and effort, as you only need to update the fragment file to propagate changes throughout your documentation.","Modular Documentation",": With fragments, you can break down your documentation into smaller, manageable pieces. ","Each fragment represents a specific topic or section, allowing you to organize and structure your content more efficiently. ","This modular approach simplifies maintenance and makes it easier to navigate and update your documentation.","Usage","Firstly, enable the Fragment Plugin by adding the following to your plugins in ",".","{\n"," modulePath: '@jpmorganchase/mosaic-plugins/FragmentPlugin',\n"," options: {}\n","}","To include a fragment in your content, follow these steps:","Create an MDX file for the fragment you want to reuse. ","Remember to set the sidebar property of your fragment's frontmatter to exclude: true if you don't want the fragment to appear in the vertical navigation menu.","---\n","title: Fragment Title\n","sidebar:\n"," exclude: true\n","---","In the target file where you want to include the fragment, use the remark directive syntax ",".","Markdown Content Example","This is the contents of a fragment located at ",":","---\n","title: Content Fragment\n","sidebar:\n"," exclude: true\n","---\n","\n","#### Fragment Title\n","\n","This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`.\n","The below code snippet will render the content from the content-fragment.mdx file in your target file:",":fragment{src=\"../fragments/content-fragment.mdx\"}","Example output:","Fragment Title","This is an example fragment of markdown content, being pulled from ",".","Component Example","Here is another example, where the fragment files each contain a "," component.",":fragment{src=\"../fragments/tile-a.mdx\"} :fragment{src=\"../fragments/tile-b.mdx\"}","The above code will render the content from tile-a.mdx and tile-b.mdx files, demonstrated below:"," "]},{"title":"Frontmatter","route":"/mosaic/author/frontmatter","content":["Frontmatter",", also known as page metadata, is a powerful feature that allows easy configuration of a page and Mosaic site components e.g. the sidebar.","Frontmatter is written in yaml syntax and is found at the top of a page between 2 sets of 3 dashes: ",".","Example page yaml","---\n","title: Page Title\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","---\n","\n","// frontmatter is closed and now comes page content\n","# Page Title\n","\n","This is some content.\n","Accessing Frontmatter in content","With the syntax below it is possible to directly reference frontmatter inside content using curly brackets and the "," object.","You can think of "," as a JSON object that holds all the frontmatter of a page and when the Mosaic "," encounters the curly brackets then the value in the frontmatter will be resolved.","{meta.title}\n","{meta.description}\n","{meta.someValueYouHaveAddedToTheFrontmatter}","This is very common to see Mosaic pages that reference the title as shown below:","---\n","title: Title\n","---\n","\n","# {meta.title}","Plugins & Frontmatter","Mosaic plugins can also embed their output into page frontmatter in 2 different ways:","a property is directly added to the page object","a JSON file is generated and referenced using a ","ref","Adding a property to the page","A plugin can add a property to a page simply by extending the page object it receives in the "," lifecycle event:","async function $afterSource(pages) {\n"," for (const page of pages) {\n"," page.newProperty = 'Hello'\n"," }\n"," return pages;\n","}","You could use this property in the page content using ","JSON File","Let's take a look at the ",".","The purpose of this plugin is to crawl the page hierarchy to find the closest "," found in any parent page's frontmatter.","Finds all index pages among the source docs","Deserialises those pages so it can read the frontmatter and content of the page","If a property called "," in the page frontmatter is found a new file named shared-config.json is created","Adds a ref named "," to the shared config file that points to the shared config of the index page","import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\n","import { flatten } from 'lodash-es';\n","import path from 'path';\n","\n","function createFileGlob(url, pageExtensions) {\n","if (pageExtensions.length === 1) {\n","return `${url}${pageExtensions[0]}`;\n","}\n","return `${url}{${pageExtensions.join(',')}}`;\n","}\n","\n","interface SharedConfigPluginPage extends Page {\n","sharedConfig?: string;\n","}\n","\n","interface SharedConfigPluginOptions {\n","filename: string;\n","}\n","\n","const SharedConfigPlugin: PluginType = {\n","async $beforeSend(\n"," mutableFilesystem,\n"," { config, serialiser, ignorePages, pageExtensions },\n"," options\n"," ) {\n"," const pagePaths = await mutableFilesystem.promises.glob(\n"," createFileGlob('**/index', pageExtensions),\n"," {\n"," ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],\n","cwd: '/'\n","}\n",");\n","\n"," for (const pagePath of pagePaths) {\n"," const sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename);\n","\n"," const page = await serialiser.deserialise(\n"," String(pagePath),\n"," await mutableFilesystem.promises.readFile(String(pagePath))\n"," );\n"," if (page.sharedConfig) {\n"," config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`);\n"," await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');\n"," } else {\n"," const baseDir = path.posix.resolve(path.dirname(String(pagePath)), '..","/');\n"," config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]);\n"," }\n"," }\n","\n","}\n","};\n","\n","export default SharedConfigPlugin;\n"]},{"title":"Author","route":"/mosaic/author/index","content":["Here you will learn how to author documentation using markdown, Mosaic components and page templates"]},{"title":"Markdown Syntax","route":"/mosaic/author/markdown-syntax","content":["Out of the box, Mosaic supports documents written in ","MDX"," which allows React components to be embedded within the ","basic syntax"," outlined in the original Markdown design document.","In addition to the basic markdown syntax, the MDX processor used by Mosaic has been configured to support additional markdown syntax and features:","GitHub flavored markdown (gfm)","Frontmatter","Mosaic Standard Components","All components that comprise the "," export from "," package are available to use out of the box in your documents.","This includes components for all standard markdown syntax and additional components like "," and ",".","Referencing Frontmatter","Frontmatter values can be embedded into the page using the "," object. ","See ","frontmatter"," for more information.","Configuring Supported components","TODO"]},{"title":"Refs","route":"/mosaic/author/refs","content":["Refs are a very powerful feature of Mosaic documents that use ","JSON References"," to reference\n","a property from the page frontmatter or frontmatter of other pages.","The key concept is that of a JSON pointer which takes the form ","A","#","B"," where:","A"," is the relative path from the current schema to a target schema. ","If A is empty, the reference is to a type or property in the same schema, an in-schema reference. ","Otherwise, the reference is to a different schema, a cross-schema reference.","B"," is the complete path from the root of the schema to a type or property in the schema. ","If # in not included or B is empty, the reference is to an entire schema.","To translate this for our purposes:","A"," is the relative path to a file in the filesystem.","B"," is the path to a property in the frontmatter of the file.","It's probably better explained with examples...","Local refs (In-schema reference)","It is possible to reference a page's own frontmatter to avoid duplication:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," sidebarPriority:\n"," $ref: '#/sidebar/priority'\n","---","This page you are reading right now has a sidebar priority of ",".","The value of "," comes from "," in the frontmatter.","Notice that because we don't specify a path before the "," in the ref we need to put the whole\n","value inside quotes.","Remote Refs (Cross-schema reference)","It is possible to reference frontmatter of other pages. ","Again this helps avoid duplication but the real power is using refs to build the data model. ","See ","advanced"," for more information.","The ","index"," page of the Author section has this frontmatter:","---\n","title: Author\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," exampleRefData: Hello from Author page\n","---","This page you are currently looking at is referencing the "," in it's frontmatter like this:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," authorRef:\n"," $ref: ./#/data/exampleRefData\n","---","I can then use the data and embed it in this page like this:","{meta.data.authorRef}","And here it is: ","Notice that we did not need to put "," in the ref since index pages are resolved\n","automatically.","Advanced","You have had a taste of the power and want to know more? ","OK, lets reference and then list out all the mosaic modes:","The Modes ","index"," page has this frontmatter:","---\n","title: Modes of operation\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","data:\n"," modes:\n"," $ref: ./*#/title\n","---","The ref here is essentially using a wildcard (the *) to grab the "," property from the frontmatter of every page in the modes folder.","We can reference that data just like before:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," modes:\n"," $ref: ../configure/modes#/data/modes\n","---","Output","With the code below, the referenced data can be embedded in a page.","
      \n"," {meta.data.modes.map(mode => (\n","
    • {mode}
    • \n"," ))}\n","
    ","Output with Mosaic Components","You can use Mosaic components with referenced data as well. ","Below we are using the "," and "," components.","\n"," {meta.data.modes.map(mode => (\n"," \n"," ))}\n","","Setting Refs using Plugins","Mosaic plugins can create new refs, create new ","global"," refs and see existing refs created by the page or other plugins. ","This is achieved using a special "," property available in the plugin helpers.","Create new refs","Use the "," function from the helpers provided to plugin lifecycle events. ","You need to provide","The file/fullpath to write the ref to","The path to the ptoperty where the ref will be applied","The value of the ref, which can use wildcards","For example, the following would add a property to pages named ",". ","The value is the title of all pages in the ","same"," directory as the current page"," async $afterSource(pages, { config }) {\n"," for (const page of pages) {\n"," config.setRef(page.fullPath, ['titles', '$ref'], `**#/title`);\n"," }\n"," return pages;\n"," }","When setting the property path the last string must be "," otherwise you're not creating a ref\n","that will be resolved by the RefPlugin.","Existing refs","To view refs that already exist you can use ",". ","For example to see all refs for a page:"," config.data.refs[fullPathToPage]","Create global refs","Global refs are similar to regular refs except they do not pre-resolve. ","This means they are resolved when the referenced file is read and the global mosaic filesystem, made up of multiple sources, is used rather than the filesystem of a single source."]},{"title":"Sidebar Configuration","route":"/mosaic/author/sidebars","content":["Sidebar data is generated by the the ","Sidebar Plugin"," which by default uses alphabetical ordering of page names to order the sidebar.","Sidebar frontmatter","A page can add a "," property to its ","frontmatter"," to change the ordering of a sidebar and what title is used for a page in the sidebar.","To rearrange pages in the sidebar or to apply a different label to a page you can specify the following in the page frontmatter:","Sidebar group label","A sidebar group when expanded will reveal the pages contained within the group.\n","Each group has a default page, ",", which is the default for the group and any breadcrumb link.","The"," can define a "," which defines the name of the sidebar group.\n","If no ","groupLabel"," is defined, sidebar group labels will be defined by either ","label"," or ","title",".","To specify the label of the default page, refer to [Sidebar label](.","/Sidebar label)","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," groupLabel: Group label\n","---","Sidebar label","By default the ","title"," of a page is used in the sidebar as the label but this can be changed to another label using page frontmatter.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," label: A New Label\n","---","Sidebar priority","Sidebar priority is a number used to sort the sidebar. ","Higher the priority pages appear first in the sidebar ordering.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," priority: 10\n","---","Sidebar Sort Configuration","Sidebar sort configuration allows the sidebar to be sorted using a more sophisticated approach and only needs to be applied to the "," page of the directory you want to sort.","Priority takes precedence over sort configuration so it can be used to override the sort\n","configuration if required.","You must add the sidebar sort configuration to the "," property of an ","index"," page e.g.,","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/title\n"," dataType: string\n"," arrange: desc","The properties of the sort configuration are described in the table below:","| Property | Description | Required |\n","| -------- | ------------------------------------------------------------------------------------------ | -------- |\n","| field | the path, separated by ",", used to find the value in page frontmatter you wish to sort by | Yes |\n","| dataType | is the type of the value. ","Can be a "," or "," or ",". ","| Yes |\n","| arrange | "," or "," order | yes |","Newsletters Example","Let's say you have a ","Newsletters"," directory and each page in the directory represents a newsletter. ","You wish to sort the newsletter sidebar by publication date in descending order (newest first).","One way to do this is to edit each page and add a "," which is manually incremented every time a news newsletter is added. ","Alternatively you can add the following sort configuration to the newsletters index page:","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/publicationDate\n"," dataType: date\n"," arrange: desc","This will use the "," property in each newsletter to sort the newsletters in the sidebar. ","The publication date is converted to a "," by the Sidebar Plugin to ensure accurate ordering. ","There is now no need to increment a priority when a new newsletter is added.","Example newsletter page frontmatter:","---\n","title: Newsletter 01 Jan 2023\n","description: Newsletter 01 Jan 2023\n","data:\n"," title:\n"," $ref: '#/title'\n"," link: /newsletters/2023-01-01\n"," publicationDate: '2023-01-01'\n","---"]},{"title":"Tags","route":"/mosaic/author/tags","content":["Tags are very similar to ","Refs"," with one very important distinction: Tags work ","across multiple sources",".","In Mosaic, each source has it's own filesystem which are then merged together to form a union of all source filesystems. ","It is in this union filesystem that tags are applied and not to the individual source filesystem that the tag was defined on.","Tags are slower to apply than refs. ","Multiple sources need to run and update before tagged data\n","will be resolved. ","If possible, stick to refs and only use tags when dealing with multiple sources.","Tagging a page","To tag a page, add a "," property to the page frontmatter. ","For example, the Product A page is tagged with \"in-stock\":","---\n","title: Product A\n","description: Mosaic Product A\n","layout: ProductDiscover\n","tags:\n"," - in-stock\n","data:\n"," name:\n"," $ref: '#/title'\n","---"," is always an array","Subscribing to a tag","To subscribe to a tag, use the "," property. ","For example, the Products page has subscribed to the "," property of pages tagged with ",".","---\n","title: Products\n","data:\n"," in-stock:\n"," $tag: in-stock#/data\n","---","A "," can provide a path to a specific piece of metadata on tagged pages, just like a ref.","Example","This page has subscribed to "," and "," tags and is displaying them using 2 Mosaic "," components.","Both the Product A and Product B pages are part of a different source than this page.","In Stock","Out of Stock"]},{"title":"UI Components","route":"/mosaic/author/ui-components","content":[""]},{"title":"Configure","route":"/mosaic/configure/index","content":["Mosaic is a tool which retrieves, formats and combines documentation pages from any number of different external sources (such as GitHub repositories, local disks or REST endpoints), into a single filesystem for you to use in your websites."]},{"title":"Content Fragment","route":"/mosaic/fragments/content-fragment","content":["Fragment Title","This is an example fragment of markdown content, being pulled from ","."]},{"title":"Fragments","route":"/mosaic/fragments/index","content":["This folder contains example fragments that are referenced and rendered in the Fragments docs page."]},{"title":"Tile A","route":"/mosaic/fragments/tile-a","content":[]},{"title":"Tile B","route":"/mosaic/fragments/tile-b","content":[]},{"title":"Create a Site","route":"/mosaic/getting-started/create-a-site","content":["In this guide you will learn how to generate and serve a Mosaic site.","Prerequisites","To begin setting up a Mosaic site, you need to have the following software installed:","Yarn v1","Node.js v18 or higher","Step 1: Generate a Mosaic site","Run the following command in your project directory to generate a new Mosaic site:","npx @jpmorganchase/mosaic-create-site create -o my-sample-site","This command creates a new Mosaic site in the my-sample-site directory.","Next, navigate to the site directory:","cd my-sample-site","Step 2: Serve the site","The example site you have generated comes preconfigured with two ","sources",": a remote repository and a local docs folder. ","Sources are used by Mosaic to pull content from disparate locations and merge them into a single virtual filesystem that can be used by a Mosaic site.","Set up Git credentials","If you want the site to read from remote repositories, you need to set up an environment variable to store your Git credentials. ","Follow these steps:","Open a terminal or command prompt.","Replace "," and "," in the following commands with your actual Git username and personal access token.","On Unix:","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","On Windows:","set MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","This sets the MOSAIC_DOCS_CLONE_CREDENTIALS environment variable with your Git credentials.","Serve command","Now you can serve your Mosaic site by running the following command:","yarn serve","Access your Mosaic site from a browser using the following URLs:","To browse the content from your local source: http://localhost:3000/local","To browse the content from the Mosaic Git repo source: http://localhost:3000/mosaic","That's it! ","Your Mosaic site is now up and running.","Next Steps:","Deploy your Mosaic site to AWS or Vercel for production use.","Create more pages to expand your site's content.","Configure your own sources in the mosaic.config.mjs file to pull content from different locations.","Theme your site"]},{"title":"Getting Started","route":"/mosaic/getting-started/index","content":["Getting Started with Mosaic","Follow our step-by-step guides to quickly create and deploy your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/getting-started/publish-site-to-aws","content":["Publish a site to AWS using S3 snapshots.","Step 1: Generate a Mosaic site","If you have already created your Mosaic site, skip ahead to step 2.","> npx @jpmorganchase/mosaic-create-site -o my-sample-site\n","> cd my-sample-site","Step 2: Create a Github repository","> git init\n","> git remote add origin git@github.com:username/my-sample-site.git\n","> git add .\n","> git commit -m \"initial commit\"\n","> git push origin main","Step 3: Generate a snapshot of content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","> yarn gen:snapshot","Step 4: Configure environment for S3","> export MOSAIC_MODE=\"snapshot-s3\"\n","> export MOSAIC_S3_BUCKET=\"\"\n","> export MOSAIC_S3_REGION=\"\"\n","> export MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","> export MOSAIC_S3_SECRET_ACCESS_KEY=\"\"\n","> yarn mosaic upload -S ./snapshots/latest","Step 5: Setup AWS","Switch to the ","AWS Amplify"," console and deploy your app as a SSR application by following the ","AWS docs",".","Setup an S3 bucket as per the ","AWS S3 docs",".","Step 7: Configure your AWS app","Add the environment vars to the hosted app via your console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16","Step 8: Upload your snapshot","Upload your snapshot to S3 storage.","> yarn mosaic upload -S ./snapshots/latest"]},{"title":"Publish","route":"/mosaic/publish/index","content":["To create your first Mosaic site, we have created a command line generator that scaffolds a ","standard"," site.","A ","standard"," site offers","an out the box, working site, which showcases local and remote content sources","a minimal set of files that can be configured with your own components, themes, layouts, sources and plugins","an update path that enables you to update Mosaic, independently of your own configuration","Create your first site","Install the Mosaic create site script.","> yarn global add @jpmorganchase/mosaic-create-site","Create a directory for your site and run the "," script.","> mkdir mosaic-sample-site\n","> cd mosaic-sample-site\n","> mosaic-create-site -f .","Define the environment variable, which enables us to access your remote repo.","> export MOSAIC_DOCS_CLONE_CREDENTIALS=\"\"","The "," environment variable is composed of your git username and your PAT token.\n","Follow these ","docs"," to see how to create your own PAT token.","Your site is ready to run.","> yarn serve","In your browser load ","Congratulations, you have created your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/publish/publish-site-to-aws","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to AWS, deploy your app as a SSR application by following the ","AWS docs",".","Once the basic app has been configured, add the Mosaic specifics.","Add the environment vars to the hosted app via the Amplify console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16"]},{"title":"Publish a site to Vercel","route":"/mosaic/publish/publish-site-to-vercel","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to Vercel, refer to the ","Vercel docs",".","Deployment","As the ","vercel platform"," hosts static content you will need to deploy a mosaic snapshot. ","There is no option to run mosaic in ","active mode",".","1. ","Update Config File","Add the following to the mosaic config file used by your site:"," deployment: { mode: 'snapshot-file', platform: 'vercel' }","2. ","Set Environment Variables","Set 2 ","environment variables"," in the vercel dashboard.","| Variable Name | Value |\n","| ------------------- | ----------------- |\n","| MOSAIC_MODE | snapshot-file |\n","| MOSAIC_SNAPSHOT_DIR | snapshots/latest. ","|","3. ","Run Build and Deploy","The "," command used by vercel must run "," followed by ","The "," command is needed to workaround an ","output file tracing"," problem.","Example:","yarn build && yarn deploy","Output File Tracing","Output File Tracing"," is a feature of Next.js that uses static analysis\n","to determine what files are needed to deploy a production version of an application.","Due to the architecture of mosaic, snapshot files can be ignored by this process and therefore excluded from the build artifacts deployed by vercel.","If you are deploying your site to the ","vercel platform"," then the mosaic site has a "," command that will update the nextjs output trace to include the snapshot files."]},{"title":"Test","route":"/mosaic/test/index","content":["Pages for e2e testing."]},{"title":"Admin","route":"/mosaic/configure/admin/index","content":["There are several admin urls exposed by Mosaic that provide an insight into how the filesystem has been configured and a way to remotely manage sources.","Endpoints","| Endpoint | Method | Description | Params |\n","| -------------------------- | ------ | -------------------------------------------- | ---------------------- |\n","| "," | GET | Returns the JSON from the Mosaic config file | n/a |\n","| "," | GET | Returns the entire mosaic filesystem as JSON | n/a |\n","| "," | GET | Returns a collection of active sources | n/a |\n","| "," | POST | Adds the source | definition & isPreview |\n","| "," | PUT | Stops the source with the provided name | name |\n","| "," | PUT | Restarts the source with the provided name | name |"]},{"title":"Detail Highlight","route":"/mosaic/configure/layouts/detail-highlight","content":["Layout: Detail Highlight","Initialize with "," in your page's frontmatter.","This layout is used to promote, share insights, and statistics for a line of business.","This layout should be used for pages with only one level of nesting, therefore, pagination is not eligible for this\n","layout.","Page geometry"]},{"title":"Detail Overview","route":"/mosaic/configure/layouts/detail-overview","content":["Layout: Detail Overview","Initialize with "," in your page's frontmatter.","This layout is used to present an overview of expected documentation, statisitics, and ability to\n","navigate to more documents.","Avoid making this page too long. ","If it gets too long, we recommend the ","Detail Technical"," template.","Page geometry","Other Layouts","Detail Highlight","Detail Technical","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Detail Technical","route":"/mosaic/configure/layouts/detail-technical","content":["Layout: Detail Technical","Initialize with "," in your page's frontmatter.","This layout is used for longer, technical, detailed content about the product.","This layout shows less marketing-type visuals and more visual of diagrams, screenshots, and code\n","snippets.","This page can be short or very lengthy.","Page geometry","Other Layouts","Detail Highlight","Detail Overview","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Layouts","route":"/mosaic/configure/layouts/index","content":["Todo..."]},{"title":"Landing Layout","route":"/mosaic/configure/layouts/landing","content":["Layout: Landing","Initialize with "," in your page's frontmatter.","Use this layout as a landing page to show large branded visuals, and high-level content about the\n","line of business.","Set the tone and voice for your LOB’s experience.","Use components that support your content with places to insert visuals, share any stats or an\n","introduction of LOB’s story.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Product Discover Layout","route":"/mosaic/configure/layouts/product-discover","content":["Layout: Product Discover","Initialize with "," in your page's frontmatter.","Use this layout to introduce a product feature with a description and large visual.","This layout is use for marketing and discovery content.","Page geometry"]},{"title":"Product Preview Layout","route":"/mosaic/configure/layouts/product-preview","content":["Layout: Product Preview","Initialize with "," in your page's frontmatter.","This layout has been used to introduce a product and showcase their suite of product offerings.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Active mode","route":"/mosaic/configure/modes/active","content":["In "," mode content can be ","pulled"," from heterogeneous data sources and normalized via plugins, to the configured components/theme.\n","As your content changes, the site will ","re-pull"," the content and update your site in real-time.","The standard generated site comes with 2 sources to demonstrate, how 'active' mode work.","a local source, which loads content from ","a remote source, which loads content from a ","sample Github repository","Configuring your content sources","All content is composed together within a ","namespace",".","A ","namespace"," is the scope for aggregated content, represented by the root path.\n","e.g Our sample docs are aggregated into a ","namespace"," called "," and served by the user journey ","Mosaic doc sources are defined by a file called ","Here is how that might look for a standard site.","Pull your local content","To tryout local content creation, add a file called","The load ","Each directory should contain an "," which is the default page, when a page is loaded without a path","Now create other pages and subdirectories and explore how Mosaic, builds your user-journeys from your fileset.","Pull your remote content","To tryout remote content creation, your standard site comes pre-configured to load our Mosaic sample docs.","Edit the "," and change your "," and "," to pull content from other repos."]},{"title":"Modes of operation","route":"/mosaic/configure/modes/index","content":["Mosaic can operate in 3 different modes","Active updates","In ","active"," mode, content updates in real-time.","active"," mode content is pulled at configured intervals in real-time, as defined by ",".","Read the ","active"," configuration docs.","Static content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","In a snapshot mode, the snapshot does update itself.","File based snapshots","In "," mode, immutable snapshots of content are loaded at startup from the local file-system.","Read the ","snapshot-file"," configuration docs.","S3 based snapshots","In "," mode, snapshots of content are loaded at startup from a remote S3 bucket.","Read the ","snapshot-s3"," configuration docs."]},{"title":"Snapshot file mode","route":"/mosaic/configure/modes/snapshot-file","content":["In "," mode a local immutable snapshot can be loaded by the site. ","Typically, the snapshot and the site are\n","deployed together and upon startup the site can load the snapshot from the local file-system.","To use "," mode","export MOSAIC_MODE=\"snapshot-file\"\n","export MOSAIC_SNAPSHOT_DIR=\"./snapshot/latest\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Commit the snapshot to your Git repo and push the site+snapshot to your Git repo, within the same branch."]},{"title":"Snapshot AWS/S3 mode","route":"/mosaic/configure/modes/snapshot-s3","content":["In "," mode a snapshot can be loaded from a pre-configured AWS S3 bucket.","To use "," mode","> export MOSAIC_MODE=\"snapshot-s3\"\n","> MOSAIC_S3_BUCKET=\"\"\n","> MOSAIC_S3_REGION=\"\"\n","> MOSAIC_S3_ACCESS_KEY_ID=\"\"\n","> MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Uploading a snapshot to S3","To upload a snapshot to S3, define the required environment variables and run","yarn mosaic upload -S "]},{"title":"$AliasPlugin","route":"/mosaic/configure/plugins/alias-plugin","content":["The "," is what powers the ","aliases"," feature of Mosaic.","It does this by scrapes "," from page metadata and also applies all aliases stored in ","Other plugins can use "," to apply new aliases, as long as they call it before this plugin has reaches the "," lifecycle event.","This plugin is added to the plugins collection by Mosaic itself so users do ","not"," need to include it in their own mosaic config file.","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"BreadcrumbsPlugin","route":"/mosaic/configure/plugins/breadcrumbs-plugin","content":["The "," is responsible for generating the data needed to show breadcrumbs navigation on pages. ","It then appends this data to a "," property in the page metadata.","Should a page already have a "," property in it's metadata then it is respected and not overwritten.","If a page has a "," property in it's metadata then this is used as the label for the breadcrumb, otherwise the page "," is used.","When the "," is traversing up directories, it needs to know what page in the directory represents the ","breadcrumb"," for that directory. ","It is recommended to use the "," page for this but the page to use is a configurable option of the breadcrumbs plugin.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | ------------------------------------------------ |\n","| indexPageName | The page name to use for \"directory\" breadcrumbs |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the breadcrumbs plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BreadcrumbsPlugin',\n"," options: {\n"," indexPageName: 'index.mdx'\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"BrokenLinksPlugin","route":"/mosaic/configure/plugins/broken-links-plugin","content":["The "," will identify any broken links in pages Mosaic has pulled into it's filesystem by making use of the ","check-links"," package.","It can identify broken links between the pages themselves and external links that pages link out to.","What this plugin is really checking is \"liveness\" of a link.","alive if the URL is reachable (2XX status code)","dead if the URL is not reachable","invalid if the URL was parsed as invalid or used an unsupported protocol","Links may be \"alive\", but the ","content"," of the linked page may not be what you want so continue\n","to check links show what you expect.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n","| baseUrl | This is used to calculate the full url for links between pages. ","It should be the url Mosaic is running on |\n","| proxyEndpoint | If you are behind a corporate proxy, external link checking will not work unless you specify the proxy endpoint using this option |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BrokenLinksPlugin',\n"," priority: -1,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," baseUrl: process.env.MOSAIC_ACTIVE_MODE_URL || 'http://localhost:8080',\n"," proxyEndpoint: 'http://some-proxy-url'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because it needs Mosaic to be running in order to\n","make requests to all of the page links.","Example Output","When a link is found to be broken, you will see the following output in the console:","@jpmorganchase/mosaic-site:serve: 8080 [Mosaic] Broken links found in /local/docs/publish-site-to-vercel.mdx\n","@jpmorganchase/mosaic-site:serve: 8080 Link to https://nextjs.org/davie is dead {\n","@jpmorganchase/mosaic-site:serve: 8080 type: 'link',\n","@jpmorganchase/mosaic-site:serve: 8080 title: null,\n","@jpmorganchase/mosaic-site:serve: 8080 url: 'https://nextjs.org/davie',\n","@jpmorganchase/mosaic-site:serve: 8080 children: [ { type: 'text', value: 'Next.Js', position: [Object] } ],\n","@jpmorganchase/mosaic-site:serve: 8080 position: {\n","@jpmorganchase/mosaic-site:serve: 8080 start: { line: 4, column: 20, offset: 36 },\n","@jpmorganchase/mosaic-site:serve: 8080 end: { line: 4, column: 55, offset: 71 }\n","@jpmorganchase/mosaic-site:serve: 8080 }\n","@jpmorganchase/mosaic-site:serve: 8080 }"]},{"title":"$CodeModPlugin","route":"/mosaic/configure/plugins/codemod-plugin","content":["Todo"]},{"title":"Plugins","route":"/mosaic/configure/plugins/index","content":["Mosaic Plugins are ","lifecycle-based"," hooks that are called on ","every"," source at different stages. ","You will never need to invoke a lifecycle method directly as their execution is managed by a plugin runner.","Plugins enable Mosaic to have a lightweight and flexible, modular architecture by encapsulating features and functionality as plugins.","Installation","Configuration","Plugins are added to the "," collection of the mosaic config file. ","Like ","sources",", plugins have an options property that can be used to provide plugin specific configuration.","| Property | Description | Required |\n","| --------------- | -------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed plugin module | Yes |\n","| disabled | Exclude this plugin completely. ","Defaults to false | No |\n","| runtimeOnly | Exclude this plugin when generating a snapshot. ","Defaults to false | No |\n","| previewDisabled | Exclude this plugin for \"preview\" sources | No |\n","| allowMultiple | Allow multiple instances of this plugin to run. ","| No |\n","| priority | The importance of this plugin. ","Plugins with the highest priority run first | No |\n","| options | Collection of other configuration values | No |"," plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: {}\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n","],","There is no need to import the plugin module directly. ","As long as the plugin is installed, Mosaic\n","will be able to import it using the built-in plugin loader.","Default Plugins","The following plugins are always included by Mosaic, regardless of whether they are present in the plugins collection of the Mosaic config file:","$TagPlugin","$AliasPlugin","$CodeModPlugin","$RefPlugin","Plugin errors","Should a plugin fail, the failure will ","not"," cause a source to close or for any other plugin to not run.","Instead plugin errors are tracked by Mosaic and can be viewed in the "," property available on each source listed by the list sources ","admin API",".","Plugin errors will be split by lifecycle event and only the lifecycle events used by the loaded plugins used will be shown.","Multiple Instances","By default, Mosaic will only run one instance of a plugin.","It may be the case that you wish to run the same plugin twice with a slightly different config. ","To do this, you must have 2 instances listed in the plugins collection and they ","both"," must set the "," option to ",".","For example, the config below runs the ","SidebarPlugin"," twice:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: 'products/product-a' },\n"," allowMultiple: true\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/!(","product-a)/*' },\n"," allowMultiple: true\n"," }\n"," // other plugins\n","];"]},{"title":"LazyPagePlugin","route":"/mosaic/configure/plugins/lazy-page-plugin","content":["The "," attempts to reduce the size of the Mosaic filesystem in memory by moving page metadata and content to disk.","It then adds a hook, so that when a page is requested the data is loaded from disk and combined with what is already in the Mosaic filesystem.","It must be the very last to run so that it can strip off metadata and content after other plugins\n","have finished with them.","Priority","This plugin runs with a priority of -2. ","Needs to be the last to run for biggest impact.","Options","| Property | Description |\n","| -------- | ------------------------------------------------------------------------------ |\n","| cacheDir | The directory to store the cache. ","Defaults to "," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/LazyPagePlugin',\n"," // This plugin must be the very last to run, so it can strip off metadata and content after the other\n"," // plugins are done with them\n"," priority: -2,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," cacheDir: '.tmp/.pull-docs-last-page-plugin-cache'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because the goal is to reduce the in-memory\n","filesystem size."]},{"title":"PagesWithoutFileExtPlugin","route":"/mosaic/configure/plugins/pages-wthout-extensions-plugin","content":["The "," plugin creates ","aliases"," without the file extension for every page in the Mosaic filesystem.\n","This allows pages to be retrieved from the filesystem without specifying the extension e.g., ",".","The plugin also modifies the "," metadata property of a page to point to the shorter alias.","Priority","This plugin runs with a priority of 1. ","It must run after the ","$AliasPlugin",".","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," }\n"," // other plugins\n","];"]},{"title":"PublicAssetsPlugin","route":"/mosaic/configure/plugins/public-assets-plugin","content":["The "," is responsible for finding \"assets\" in the Mosaic filesystem and copying them to another directory.","Typical usecase is for copying "," and "," to the public directory of a Next.js site as these are considered ","static assets"," for Next.js.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| --------- | ----------------------------------------------------------- |\n","| outputDir | The directory to copy the assets to. ","Defaults to "," |\n","| assets | A collection of filenames to copy to the outputDir |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PublicAssetsPlugin',\n"," priority: -1,\n"," options: {\n"," outputDir: './public',\n"," assets: ['sitemap.xml', 'search-data.json']\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"ReadingTimePlugin","route":"/mosaic/configure/plugins/reading-time-plugin","content":["The "," generates an estimation of how long a page written in MDX will take to read and adds the "," property to the metadata of a page.","Priority","This plugin runs with no special priority.","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n"," // other plugins\n","];"]},{"title":"$RefPlugin","route":"/mosaic/configure/plugins/ref-plugin","content":["The "," powers the ","refs"," feature of Mosaic.","The plugin scrapes "," properties from page metadata and also applies all refs stored in ",".","Other plugins can use "," to apply new refs, as long as they call it before this plugin has reaches ",".","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"SearchIndexPlugin","route":"/mosaic/configure/plugins/search-index-plugin","content":["The "," is responsible for generating the search index and configuration information for ","Fuse.js"," which is the matching engine powering the client-side search functionality of Mosaic sites.","It outputs 3 files:","Full Search Index - ","Condensed Search Index - ","Search Configuration - ","Full Search Index","On a Mosaic site, the full index is fetched after a page has loaded, thus removing the chance of a huge index slowing down first-load.","Practically, the full index should load in the background before a user searches for something, but should a search be initiated before that (e.g., slow-internet) then the condensed version of the search index is available.","Condensed Search Data","Search Index plugin creates a \"condensed\" version of the search index that only includes the "," and "," for each page. ","This is the \"Minimum Viable Index\" to provide somewhat useable search results client-side while the main search index is loaded in the background.","Search Configuration","Any ","options"," that need to be passed to Fuse.js.","Search relevancy configuration","| Property | Description |\n","| ---------------- | ----------------------------------------------------- |\n","| includeScore | https://www.fusejs.io/api/options.html#includescore |\n","| includeMatches | https://www.fusejs.io/api/options.html#includematches |\n","| maxPatternLength | TODO |\n","| ignoreLocation | https://www.fusejs.io/api/options.html#ignorelocation |\n","| threshold | https://www.fusejs.io/api/options.html#threshold |\n","| keys | https://www.fusejs.io/api/options.html#keys |","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------- |\n","| maxLineLength | TODO |\n","| maxLineCount | TODO |\n","| keys | https://www.fusejs.io/api/options.html#keys |\n","| relevancy | ","search relevancy"," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SearchIndexPlugin',\n"," previewDisabled: true,\n"," options: { maxLineLength: 240, maxLineCount: 240 }\n"," }\n"," // other plugins\n","];","It's usually a good idea to mark this plugin as disabled for preview sources otherwise the pages\n","from the preview will appear in search results."]},{"title":"SharedConfigPlugin","route":"/mosaic/configure/plugins/shared-config-plugin","content":["The "," crawls the page hierarchy to find the closest "," metadata from any parent index's page metadata. ","It then exports a JSON file into each directory with the merged config for that level.","Shared config is typically the place where the following is configured for a Mosaic site:","App Header configuration including site name and main navigation","Footer information","Help links for the left sidebar area","Namespace Shared Configs","Consider 2 sources the share the same ","namespace"," \"product-docs\":","Source A - multiple product directories and main product index page. ","The index page specifies "," metadata.","Source B - pages relevant to a single product. ","Index page does ","not"," have any "," metadata.","Let's also assume that the pages from Source B would also naturally \"fit\" within the pages of Source B (e.g. inside a products directory).","In this scenario, the "," will attempt to copy the shared config file from Source A into the root directory of Source B allowing the Source B pages to use the Source A "," as though it were a product sourced directly from Source A.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| -------- | ---------------------------------------------- |\n","| filename | the name of the JSON file output by the plugin |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SharedConfigPlugin',\n"," options: {\n"," filename: 'shared-config.json'\n"," },\n"," priority: 3\n"," }\n"," // other plugins\n","];"]},{"title":"SidebarPlugin","route":"/mosaic/configure/plugins/sidebar-plugin","content":["The "," generates the necessary page metadata needed for the vertical navigation shown on some Mosaic pages.","The output from the plugin is added to a "," metadata property of the page.","Configuration","The "," is used to determine the \"root\" directories of the sidebar. ","So for example:"," - generate sidebar data for the pages that are 3 directories deep in the filesystem hierarchy"," - same as above but ignore the product-a directory"," - generate a sidebar just for product-b in the products directory","To rearrange pages in the sidebar or to apply a different label to a page you can ","configure the sidebar"," using page frontmatter.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| ----------- | ----------------------------------------------------------------------------- |\n","| filename | filename of the sidebar json, linked to each related page via ref |\n","| rootDirGlob | Glob pattern for matching directories which should be the root of the sidebar |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/*/*' }\n"," }\n"," // other plugins\n","];"]},{"title":"SiteMapPlugin","route":"/mosaic/configure/plugins/site-map-plugin","content":["The "," generates a ","sitemap"," using the pages in the Mosaic filesystem that adheres to the ","sitemaps XML schema",".","The output of the plugin is a file is named ",".","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | --------------------------------------------------------------------------------------------------- |\n","| siteUrl | The site URL. ","Used as the prefix for loc entries in the sitemap as these must start with a protocol |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SiteMapPlugin',\n"," previewDisabled: true,\n"," options: { siteUrl: process.env.SITE_URL || 'http://localhost:3000' }\n"," }\n"," // other plugins\n","];","Visualiser","To visualise your sitemap you can combine this plugin with the "," component provided by ",".","Rendering the "," component will render a tree view of your sitemap.","","Have a look at this site's pages, ","here","."]},{"title":"$TagPlugin","route":"/mosaic/configure/plugins/tag-plugin","content":["The "," powers the tags feature of Mosaic.","This plugin scrapes "," from page metadata and also applies all aliases stored in ",".","Tags ultimately resolve down into ","refs",", but are different from normal refs, in that they are applied to the\n","union filesystem (all merged filesystems), not to the individual source filesystem that they were defined on. ","This can be thought of as a ","global ref",".","Other plugins can use "," and modify the "," property, to apply new global refs, as long as\n","they do so before this plugin has reaches ",".","Priority","This plugin runs with no special priority but it must run before both the "," and the ",".","Example use case - Products Page","Let's assume there is a products page on your site and each product is shown as a tile. ","The information for each product tile is sourced from multiple Mosaic sources. ","How can tags be used to reference the product data needed for each tile on the products page?","The product page should add a "," metadata prop to its frontmatter:","---\n","title: Products\n","description: Product index\n","layout: ProductPreview\n","data:\n"," items:\n"," $tag: product#/data\n","---","The tag shown in the example above is saying populate "," of the Products index page with the "," metadata property of pages tagged with ",".","A tagged product page needs to have a "," property which is a collection of tags and one of these needs to be ",". ","This will allow the "," to correctly associate the product page to the product index page. ","It will also need a "," property because thats the property our product index page wants to use for the tiles.","---\n","title: Product A\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/a/index\n","---","---\n","title: Product B\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/b/index\n","---"]},{"title":"TableOfContentsPlugin","route":"/mosaic/configure/plugins/toc-plugin","content":["The "," generates a Table of Contents for each page in the Mosaic filesystem using the headings on the page.","Heading ranks are used to determine which page headings should be included in the Table of Contents:","| Heading Element (markdown syntax) | Rank |\n","| --------------------------------- | ---- |\n","| h1 (#) | 1 |\n","| h2 (##) | 2 |\n","| h3 (###) | 3 |\n","| h4 (####) | 4 |\n","| h5 (#####) | 5 |\n","| h6 (######) | 6 |","The plugin output is added to a "," metadata property of a page.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | ----------------------------- |\n","| minRank | The minimum page heading rank |\n","| maxRank | The maximum page heading rank |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/TableOfContentsPlugin',\n"," options: {\n"," minRank: 2,\n"," maxRank: 3\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"Git Repo Source","route":"/mosaic/configure/sources/git-repo-source","content":["The Git Repo Source is used to pull content from a remote git repository e.g. github.","Installation","Credentials and Access tokens","To successfully clone the git repo, the source definition must include credentials that have sufficient permissions to clone the repository.","We recommend storing a ","personal access token"," in an environment variable and using the environment variable in the source definition.","This keeps credentials out of code where they may be accidentally exposed to third parties.","Example","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\",","Configuration","| Property | Description | Required |\n","| ------------------- | -------------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-git-repo) | Yes |\n","| namespace | The scope for this source. ","| Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.credentials | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.subfolder | The name of the folder within the cloned repo containing the docs | Yes |\n","| options.repo | The repo URL | Yes |\n","| options.branch | The branch or tag to clone | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the subfolder | Yes |\n","| options.remote | The name of the git remote to use. ","Defaults to origin. ","| Yes |","Example Git Repo Source Definition","\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'mosaic',\n"," options: {\n"," credentials: process.env.MOSAIC_DOCS_CLONE_CREDENTIALS,\n"," prefixDir: 'mosaic',\n"," subfolder: 'docs',\n"," repo: 'https://github.com/jpmorganchase/mosaic.git',\n"," branch: 'main',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"]},{"title":"HTTP Source","route":"/mosaic/configure/sources/http-source","content":["The HTTP Source is used to pull content over HTTP.","Multiple endpoints can be specified and the source will combine and transform the response from each into a single collection of pages.","Installation","Configuration","| Property | Description | Required |\n","| ------------------------------------------ | ----------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-http) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.endpoints | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.transformResponseToPagesModulePath | The path of the module used to transform endpoint responses into Mosaic pages | Yes |\n","| options.checkIntervalMins | Number of minutes to wait between requests. ","Defaults to 5 minutes | No |\n","| options.initialDelayMs | Number of milliseconds to wait for making initial request. ","Defaults to 1000 | No |","Example HTTP Source Definition"," {\n"," modulePath: '@jpmorganchase/mosaic-source-http',\n"," namespace: 'my-namespace',\n"," options: {\n"," prefixDir: 'docs',\n"," endpoints: [\n"," 'https://api.data.com/blah',\n"," 'https://api.data.com/hello'\n"," ],\n"," transformResponseToPagesModulePath: '@scope/transformer-package'\n"," }\n"," }"]},{"title":"Sources","route":"/mosaic/configure/sources/index","content":["Sources are what Mosaic uses to pull content from disparate locations and merge into a single virtual filesystem that can be used by a Mosaic Site.","Depending on the ","mode"," used, sources can update periodically ensuring that new content is made available automatically.","Source Definitions","Source Definitions are specified in the "," collection of a mosaic config file.","Each source uses a ","zod schema"," to validate the provided JSON to ensure that all required information for the source to pull content has been provided.","A source definition at a minimum needs to provide the module path of the source and the ","namespace"," that it will use. ","A namespace is not unique across sources though it is common that each source has a different namespace.","Lastly, the options field can be used as a bucket for configuration values needed to configure the source e.g. credentials.","Users are free to add any property as a source option but please read the ","gotchas","\n","first regarding the allowed ","values",".","Example Local Folder Source Definition"," /**\n"," * Demonstrates a local file-system source, in this case a relative path to where the\n"," * site was generated.\n"," * Access from your browser as http://localhost:3000/local\n"," */\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n"," }","Source Namespace","A Source Namespace is a scoping mechanism for Mosaic sources used to filter the content loaded by Mosaic. ","By default all sources specified in the mosaic config file are loaded.","sources: [\n"," {\n"," namespace: 'my-namespace',\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder'\n"," }\n","];","The following command will ensure mosaic only loads sources with the "," scope.","yarn mosaic serve -c ''./mosaic.config.mjs' -p 8080 --scope \"local\"","Source Schedules","Source schedules define how often sources pull in content that exists remotely and if a failed source is retried. ","More information can be found ","here","Source Types","Out of the box, Mosaic provides 3 source \"types\":","Local Folder","Git Repo Source","HTTP Source","Sources must expose an observable interface so it is possible to compose sources together e.g. the Git Repo source uses the Local Folder source internally to watch the cloned folder for changes.","Watching for Updates","When running in ","active mode",", Mosaic will watch for any changes to the source content and if a change is detected, will initiate a pull of that new content.","How often to check for updates and how updates are triggered are a matter for the source to handle. ","Mosaic simply responds when a source emits new content.","Source Worker Thread","Sources are executed inside their own worker thread to ensure that the main thread is not overloaded. ","It is here that a local virtual filesystem for the source is created and where several of the ","Plugin Lifecycle"," events are triggered.","Gotchas","A service worker thread uses ","postMessage"," to communicate with the main thread and vice-versa.","This is important because it limits what values can be provided in the source definition to those that can be processed by the ","Structured Clone Algorithm","."]},{"title":"Local Folder Source","route":"/mosaic/configure/sources/local-folder-source","content":["The Local Folder Source is used to pull content from a folder located on the same machine as Mosaic is running.","It is common to use this source when running mosaic locally.","Installation","Configuration","| Property | Description | Required |\n","| ------------------ | ------------------------------------------------------------------------------ | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-local-folder) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.rootDir | The top level directory content will be pulled from | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the rootDir | Yes |","Example Local Folder Source Definition","{\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n","}","This source will look for content with the \".mdx\" extension in a \"docs\" directory 2 levels up from the Mosaic working directory. ","That content is included in the \"local\" namespace and available from a route that is prefixed with \"local\".","So if you had a file, "," then you would be able to view it at ","."]},{"title":"Source Schedules","route":"/mosaic/configure/sources/schedules","content":["A source schedule defines how often a source initiates a content pull and what to do when there is a failure.","A schedule can be specified for each source in the source definition, but should a source not provide a schedule it will inherit the \"global\" schedule.","Configuration","| Property | Description | Required | Default |\n","| ----------------- | -------------------------------------------------------------------------------------- | -------- | ------- |\n","| checkIntervalMins | The length of time in minutes before triggering a content refresh | Yes | 30 mins |\n","| initialDelayMs | Startup delay for the source. ","| Yes | 1000 ms |\n","| retryEnabled | When true, failures will trigger another content pull | No | true |\n","| retryDelayMins | The interval between retries. ","This will rise exponentially on every failure. ","| No | 5 |\n","| maxRetries | Maximum number of retry attempts | No | 100 |\n","| resetOnSuccess | If true, when a source recovers and emits pages it's retry counter is returned to zero | No | true |","Global Schedule","The global schedule applies to all sources that do ","not"," provide their own schedule. ","It can be configured as a top-level property of the Mosaic config file."," schedule: {\n"," checkIntervalMins: 60,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 15,\n"," maxRetries: 20\n"," }","Example","Given the config file below:"," schedule: {\n"," checkIntervalMins: 30,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 5,\n"," maxRetries: 10\n"," },\n"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceA',\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceA',\n"," subfolder: 'docs',\n"," repo: 'source-a-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceB',\n"," schedule:{\n"," checkIntervalMins: 60,\n"," initialDelayMs: 5000,\n"," retryDelayMins: 30,\n"," maxRetries: 50\n"," }\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceB',\n"," subfolder: 'docs',\n"," repo: 'source-b-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"," ]","Source A will inherit the global schedule so it will:","Start after a 1 second delay","Pull content every 30 minutes","Retry a failed content pull after an initial 5 minute delay","Retry 10 times and if still unsuccessful, closing","Source B has its own schedule so it will:","Start after a 5 second delay","Pull content every 60 minutes","Retry a failed content pull after an initial 30 minute delay","Retry 50 times and if still unsuccessful, closing","Retry Strategy","The retry strategy that Mosaic employs is ","Exponential Backoff",". ","This is a common strategy for networking applications that aims to prevent retries from causing more harm than good.","For example, given a source schedule that has a 1 minute retry delay and will retry a maximum of 3 times then the total time spent retrying is 7 minutes:","1 minute delay then 1st retry","2 minute delay then 2nd retry","4 minute delay then 3rd (and final) retry","Total delay: 1 + 2 + 4 = 7 minutes","As you can see, the delay between retries is growing exponentially giving the content source more time to recover after each retry."]},{"title":"Figma Source","route":"/mosaic/configure/sources/source-figma","content":["The Figma source is used to pull individual design patterns from Figma projects.\n","The source subscribes to Figma project groups, then extracts from project files, tagged patterns.","A Figma pattern tag is defined within a Figma project's ",".","For each retrieved/tagged pattern, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular pattern and then\n","group patterns based on owner.","Installation","Configuration","The Figma source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","| Property | Description | Required |\n","| ---------- | --------------------------------- | -------- |\n","| prefixDir | path to store figma patterns | Yes |\n","| figmaToken | figma access token | Yes |\n","| projects | array of projects to subscribe to | Yes |\n","| endpoints | figma endpoints | Yes |","Each project is configured from the "," array.","| Property | Description | Required |\n","| ------------- | --------------------------------------------- | -------- |\n","| id | numerical id of the subscribed project group | Yes |\n","| meta | metadata to add to each of the projects pages | Yes |\n","| patternPrefix | prefix to add to all pages created | Yes |"," defined the Figma REST API endpoints.","| Property | Description | Required |\n","| ----------------- | --------------------------------------------------------- | -------- |\n","| getProject | url to return a list of projects within the project group | Yes |\n","| getFile | url to return a project file | Yes |\n","| generateThumbnail | url to generate a thumbnail for the shared Figma node | Yes |","Example Figma Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-figma',\n"," namespace: 'some-namespace',\n"," options: {\n"," proxyEndpoint: 'http://path/to/optional/proxy',\n"," prefixDir: '/some/path/to/where/you/store/pattern/pages',\n"," figmaToken: process.env.FIGMA_TOKEN,\n"," projects: [{\n"," id: 99999,\n"," patternPrefix: 'yourPrefix',\n"," meta: {\n"," tags: [ 'some-tag'],\n"," data: {\n"," owner: 'some-owner'\n"," }\n"," }\n"," }],\n"," endpoints: {\n"," getFile: 'https://api.figma.com/v1/files/:file_id?","plugin_data=shared',\n"," getProject: 'https://api.figma.com/v1/projects/:project_id/files',\n"," generateThumbnail: 'https://api.figma.com/v1/images/:project_id?","ids=:node_id'\n"," }\n"," }\n"," }\n","]"]},{"title":"Readme Source","route":"/mosaic/configure/sources/source-readme","content":["The Readme source is used to pull individual "," text files from repositories.\n","This is a lighter weight version of a Git repository resource, which just pulls a single file,\n","rather the whole contents of the repo.","For each retrieved readme, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular "," and then\n","group this page, with others, based on owner.","Installation","Configuration","The Readme source is an "," and shares the same base configuration.","| Property | Description | Required |\n","| ----------- | --------------------- | -------- |\n","| accessToken | request access token | Yes |\n","| prefixDir | path to store pages | Yes |\n","| readme | array of readme files | Yes |","Each readme is configured from the "," array.","| Property | Description | Required |\n","| --------------- | ---------------------------- | -------- |\n","| contentTemplate | template for content of page | No |\n","| name | page name used in route | Yes |\n","| readmeUrl | url of readme | Yes |\n","| meta | metadata for page | Yes |","Example Readme Source Definition"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-readme',\n"," namespace: 'your-namespace',\n"," schedule: { checkIntervalMins: 0.25, initialDelayMs: 0 },\n"," options: {\n"," prefixDir: '/salt/community-index/readme',\n"," accessToken: 'Bearer your-access-token',\n"," readme: [\n"," {\n"," name: 'your-mosaic-page-name',\n"," readmeUrl: 'https://some/repo/url/readme.md',\n"," contentTemplate: `a template which replaces ::content:: with the content`,\n"," meta: {\n"," layout: 'DetailTechnical',\n"," title: 'Your Page Title',\n"," tags: ['your-tag-if-required'],\n"," description: 'A description for your readme'\n"," }\n"," }]\n"," }\n"," }]"]},{"title":"Storybook Source","route":"/mosaic/configure/sources/source-storybook","content":["The Storybook source is used to pull individual stories from Storybook, based on tags.","The Mosaic source will filter your Storybook's stories, based on "," or ",".","For each matching story, a page is created in the Mosaic file-system.","additional Mosaic tags can be added to each page using ","additional Mosaic metadata can be added to each page using ","This information can be used to create a dynamic index of stories from Storybook.","Installation","Configuration","The Storybook source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","The "," option is an array of Storybook urls that are used as Sources.\n","Each story is matched on "," using the "," Regexp (or by ",").","If specified, "," and "," can be added to any matching pages.","| Property | Description | Required |\n","| --------------- | ---------------------- | -------- |\n","| options.stories | array of story configs | Yes |"," is an array of Storybooks that you want to pull stories from","| Property | Description | Required |\n","| -------------- | ---------------------------------------- | -------- |\n","| storyUrlPrefix | prefix url of the storybook deployment | Yes |\n","| description | description of the storybook stories | Yes |\n","| storiesUrl | url of the storybook's "," | No |\n","| filter | RegExp filter to match on | No |\n","| filterTags | Array of Storybook tags to match on | No |\n","| meta | additional data to add to matching pages | No |","Example Local Folder Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-storybook',\n"," namespace: 'salt',\n"," options: {\n"," prefixDir: '/salt/internal/community-index/story-navigation',\n"," stories: [\n"," {\n"," storiesUrl: 'https://storybook.saltdesignsystem.com/stories.json',\n"," storyUrlPrefix: 'https://storybook.saltdesignsystem.com',\n"," description: 'Navigation patterns created in the Salt Labs',\n"," meta: { // can be any additional metadata you want added to the page's meta.data\n"," tags: ['some-tag'],\n"," data: {\n"," owner: 'Salt',\n"," source: 'STORYBOOK'\n"," }\n"," },\n"," filter: /Lab\\/Tabs/ // this is a Regexp that matches on Storybook title\n"," }\n"," ]\n"," }\n"," }\n","]","Example story metadata format","{\n"," \"type\": \"story\",\n"," \"id\": \"folder--story-1\",\n"," \"name\": \"Story 1\",\n"," \"title\": \"Folder/Story 1\",\n"," \"importPath\": \"./folder/story-1.stories.tsx\",\n"," \"tags\": [\n"," \"dev\",\n"," \"test\"\n"," ]\n","}"]},{"title":"Custom Components","route":"/mosaic/configure/theme/custom-components","content":["Learn how to add your own custom components to your Mosaic site.","Create Components Folder","To start, create a "," folder under "," where you'll store your custom components.","src/\n","└── components/","In this tutorial, we will create a custom "," component.","Create Card Component","Inside the "," folder, create a "," folder, which will contain your React "," component. ","The "," folder should include "," and "," files as shown in the structure below:","├── src/\n","│ ├── components/\n","│ │ └── card/\n","│ │ ├── index.tsx\n","│ │ └── card.module.css","Card Component: index.tsx","Create your "," component within the "," file:","import React from 'react';\n","import styles from './card.module.css';\n","\n","type CardProps = {\n"," title: string;\n"," content: string;\n","};\n","\n","export const Card: React.FC = ({ title, content }) => {\n"," return (\n","
    \n","

    {title}

    \n","

    {content}

    \n","
    \n"," );\n","};","Card Component: card.module.css","Define your component styles in the "," file:",".card {\n"," background-color: #f5f5f5;\n"," border: 1px solid #ccc;\n"," border-radius: 4px;\n"," box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n"," padding: 16px;\n"," transition: box-shadow 0.2s ease-in-out;\n","}\n","\n",".card:hover {\n"," box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n","}\n","\n",".card h2 {\n"," color: #333;\n"," font-size: 24px;\n"," margin-bottom: 8px;\n","}\n","\n",".card p {\n"," color: #666;\n"," font-size: 16px;\n"," line-height: 1.5;\n","}","In this example, we use a CSS file, but you can use whichever styling approach you prefer, such as ","vanilla extract",".","To export your "," component, create an "," file in the "," folder:","export * from './card';","Your final folder structure should look like this:","├── src/\n","│ ├── components/\n","│ │ ├── card/\n","│ │ │ ├── index.tsx\n","│ │ │ └── card.module.css\n","│ │ ├── index.ts","Import Custom Card Component","To use your custom "," component, import it into your site's "," file. ","Add the following line to your imports:","import * as myComponents from '../components';","Replace this line:","const components = mosaicComponents;","with:","const components = {\n"," ...mosaicComponents,\n"," ...myComponents\n","};","This will add your custom components to the site, and any custom components in "," will override the corresponding ones in ",". ","The spread operator (",") merges both "," and "," objects, giving priority to "," when there is a naming conflict.","Use Your Custom Card Component","Now you're ready to use your custom "," component. ","Build and run your site, and add the "," component to an MDX file in your "," folder or another source:","","You can create and add more custom components to your Mosaic site by following the same process."]},{"title":"Custom CSS","route":"/mosaic/configure/theme/custom-css","content":["You can customize the look and feel of your Mosaic site by creating cusotm CSS files. ","Here is a step-by-step guide to help you create your own CSS theme.","Create a CSS folder","To get started, create a folder named \"css\" in the \"src\" folder of your Mosaic project.","src/\n","└── css/","Create your theme","Inside the \"css\" folder, create a folder named \"global\". ","This is where you will add your custom styles.","src/\n","└── css/\n"," ├── global/\n"," ├── index.css","Create an \"index.css\" file inside the \"css\" folder. ","This file will import your custom styles.","@import './global/';","Inside your global folder, create a separate CSS file for each part of your site that you want to customize. ","For instance, if you want to change the text styling, create a \"text.css\" file inside the \"global\" folder. ","Here is an example of how your \"text.css\" file could look like:","h1 {\n"," /* Set custom font size and weight */\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h2 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h3 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h4 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h5 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h6 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","p {\n"," font-size: /* insert value */ ;\n"," line-height: /* insert value */ ;\n","}","You can add as many CSS files as you need, depending on how much you want to customize your site.","Create an \"index.css\" file inside the \"global\" folder. ","This file will import your custom styles, in this example we are importing our \"text.css\" file.","@import './text.css';","Your \"css\" folder should now look like this:","src/\n","└── css/\n"," ├── global/\n"," │ ├── text.css\n"," │ ├── index.css\n"," ├── index.css","Import your custom CSS into your site","To apply your custom styles to your Mosaic site, open your \"_app.tsx\" file and add the following line to the bottom of your imports:","import '../css/index.css';","Congratulations! ","You have successfully applied your custom CSS styles to your site. ","This example demonstrated how to create text styles, but you can use the same approach to customize other aspects of your site as well."]},{"title":"Theming Your Site","route":"/mosaic/configure/theme/index","content":["Create a unique look and feel for your Mosaic site by customizing the CSS theme and integrating your own UI components.","Customize the CSS","Adapt various design elements of your Mosaic site to create a cohesive visual theme. ","Refer to our guide to learn more about crafting a custom CSS theme:","CSS Theme Guide","Import Custom Components","Incorporate your own UI components, to tailor the look and functionality of your content. ","This tutorial will walk you through the process of adding custom components to your site:","Adding Custom Components Tutorial"]},{"title":"Aliases Test","route":"/mosaic/test/aliases/index","content":["This page is the alias test page."]},{"title":"Detail Highlight Test Page","route":"/mosaic/test/layouts/detail-highlight","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Overview Test Page","route":"/mosaic/test/layouts/detail-overview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Technical Test Page","route":"/mosaic/test/layouts/detail-technical","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Edit Layout","route":"/mosaic/test/layouts/edit","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Full Width Layout","route":"/mosaic/test/layouts/full-width","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Layouts","route":"/mosaic/test/layouts/index","content":["Pages for e2e testing of layouts."]},{"title":"Landing Layout Test Page","route":"/mosaic/test/layouts/landing","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Newsletter Test Page","route":"/mosaic/test/layouts/newsletter","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Discover Test Page","route":"/mosaic/test/layouts/product-discover","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Preview Test Page","route":"/mosaic/test/layouts/product-preview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Refs Data","route":"/mosaic/test/refs/data","content":[]},{"title":"Refs Test","route":"/mosaic/test/refs/index","content":["The sidebar priority is ",".","The other page data is ","."]},{"title":"Tags Test","route":"/mosaic/test/tags/index","content":["In Stock","Out of Stock"]},{"title":"$afterSource","route":"/mosaic/configure/plugins/lifecycle/after-source","content":["The first lifecycle event to trigger after receiving pages from a source and runs in a child process.\n","The pages can safely be mutated and will be reflected in the final filesystem that gets generated.\n","It ","must"," return a collection of pages.","The "," lifecycle event is called with:","pages - the collection of pages emitted by the source","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |","Example - Log out all page routes","async function $afterSource(pages, { config, ignorePages, pageExtensions }) {\n"," for (const page of pages) {\n"," console.log(page.route);\n"," }\n"," return pages;\n","}"]},{"title":"afterUpdate","route":"/mosaic/configure/plugins/lifecycle/after-update","content":["The third lifecycle event to trigger overall and the first to trigger inside the main Mosaic process.","Calls after the filesystem and symlinks have been reconstructed due to a change to the current source pages. ","Pages will ","not"," be cached when read at this stage, to allow for reading content and writing a new copy of it without the cached version taking effect.\n","This method is safe to use with lazy loading, as the filesystem should return the full page when read.","The "," lifecycle event is called with:","mutableFilesystem - Mutable filesystem instance with all of this source's pages inside (and symlinks re-applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalConfig | An immutable object for reading data from other lifecycle phases of all plugins. ","Shared across all sources. ","|\n","| sharedFilesystem | Mutable filesystem instance independent of any sources. ","Useful for global pages, like sitemaps |\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"$beforeSend","route":"/mosaic/configure/plugins/lifecycle/before-send","content":["The second lifecycle event to trigger and does so after a filesystem has been built up from the source pages.","It is the last lifecycle event to run in a source child process before the filesystem is sent to the main Mosaic process and should ","not"," return a value.","The "," lifecycle event is called with:","mutableFilesystem - Mutable virtual filesystem instance with all of this source's pages inside (and symlinks applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"Lifecycle Events","route":"/mosaic/configure/plugins/lifecycle/index","content":["Plugin lifecycle","The plugin lifecycle is triggered when a source emits content.","Each Mosaic source has its own worker thread and plugin lifecycle events that start with a "," will execute inside the worker thread.\n","All other lifecycle events will execute in the main Mosaic process.","The 5 lifecycle events are:","$afterSource","$beforeSend","afterUpdate","shouldClearCache","shouldUpdateNamespaceSources","Plugin methods that trigger inside the main thread should be asynchronous and highly optimised to\n","avoid holding up the main thread."]},{"title":"shouldClearCache","route":"/mosaic/configure/plugins/lifecycle/should-clear-cache","content":["The fourth lifecycle event to trigger overall and the second to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other"," sources should clear their cache in response to the source updating.","Only sources that have already run "," will call this lifecycle hook since there is no\n","cache to clear if they haven't reached that stage in the lifecycle.","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"shouldUpdateNamespaceSources","route":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources","content":["The fifth lifecycle event to trigger overall and the third to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other sources that share the same ","source namespace"," should re-run ",".","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]}] \ No newline at end of file +[{"title":"Mosaic","route":"/mosaic/index","content":["True to its name, Mosaic brings together several concepts—including content, design and technical infrastructure—to deliver a unified website experience that is truly greater than the sum of its individual parts.","With Mosaic, you can:","Don't move your content where it does not belong. ","Compose content from remote data sources which\n","are pulled at runtime by our content aggregator.","Visualize your content with your own theme, layouts and components or use the Mosaic Design\n","language.","Extend the existing code and add your own content source types through our simple plugin\n","architecture.","Publish your content through Server Side Rendering (SSR) or generate a snapshot of your content\n","and serve it as a Statically Generated Site (SGS).","Creating a website has never been so easy!"]},{"title":"Sitemap","route":"/mosaic/sitemap","content":["Sitemap"]},{"title":"Aliases","route":"/mosaic/author/aliases","content":["Aliases are virtual 'symlinks' of pages, allowing one page to take on one or more other routes.\n","This is not the same as copying the page, it is a primitive filesystem link which is resolved by Mosaic.","Use Cases","Aliases are great for linking to an old route if you've moved a page to a new place.\n","They can also be used to create short hand links to pages or to 'clone' a copy of a page into\n","another section of the site where it may be relevant.","Example","This is the frontmatter for this page:","---\n","title: Aliases\n","layout: DetailTechnical\n","aliases:\n"," - /mosaic/example/aliases\n","---","Try accessing this page from ","/mosaic/example/aliases"]},{"title":"Fragments","route":"/mosaic/author/fragments","content":["Fragments, also known as content fragments, are powerful tools that allow you to incorporate content from other pages into your documentation. ","By creating an MDX file and using the ","generic directives"," syntax ",", you can easily render the fragment in another file, providing modularity and reusability to your content.","Use Cases","Fragments offer various use cases, such as:","Consistent Content",": Use fragments to maintain consistent content across multiple pages. ","For instance, if you have a table or a tile that appears on multiple pages, you can create a fragment for it and include it in all relevant files. ","This ensures that any updates made to the fragment automatically reflect across the entire documentation.","Reusable Components",": Fragments enable the creation of reusable components or sections. ","You can define a complex or commonly used section once and then include it in multiple pages as needed. ","This approach saves time and effort, as you only need to update the fragment file to propagate changes throughout your documentation.","Modular Documentation",": With fragments, you can break down your documentation into smaller, manageable pieces. ","Each fragment represents a specific topic or section, allowing you to organize and structure your content more efficiently. ","This modular approach simplifies maintenance and makes it easier to navigate and update your documentation.","Usage","Firstly, enable the Fragment Plugin by adding the following to your plugins in ",".","{\n"," modulePath: '@jpmorganchase/mosaic-plugins/FragmentPlugin',\n"," options: {}\n","}","To include a fragment in your content, follow these steps:","Create an MDX file for the fragment you want to reuse. ","Remember to set the sidebar property of your fragment's frontmatter to exclude: true if you don't want the fragment to appear in the vertical navigation menu.","---\n","title: Fragment Title\n","sidebar:\n"," exclude: true\n","---","In the target file where you want to include the fragment, use the remark directive syntax ",".","Markdown Content Example","This is the contents of a fragment located at ",":","---\n","title: Content Fragment\n","sidebar:\n"," exclude: true\n","---\n","\n","#### Fragment Title\n","\n","This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`.\n","The below code snippet will render the content from the content-fragment.mdx file in your target file:",":fragment{src=\"../fragments/content-fragment.mdx\"}","Example output:","Fragment Title","This is an example fragment of markdown content, being pulled from ",".","Component Example","Here is another example, where the fragment files each contain a "," component.",":fragment{src=\"../fragments/tile-a.mdx\"} :fragment{src=\"../fragments/tile-b.mdx\"}","The above code will render the content from tile-a.mdx and tile-b.mdx files, demonstrated below:"," "]},{"title":"Frontmatter","route":"/mosaic/author/frontmatter","content":["Frontmatter",", also known as page metadata, is a powerful feature that allows easy configuration of a page and Mosaic site components e.g. the sidebar.","Frontmatter is written in yaml syntax and is found at the top of a page between 2 sets of 3 dashes: ",".","Example page yaml","---\n","title: Page Title\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","---\n","\n","// frontmatter is closed and now comes page content\n","# Page Title\n","\n","This is some content.\n","Accessing Frontmatter in content","With the syntax below it is possible to directly reference frontmatter inside content using curly brackets and the "," object.","You can think of "," as a JSON object that holds all the frontmatter of a page and when the Mosaic "," encounters the curly brackets then the value in the frontmatter will be resolved.","{meta.title}\n","{meta.description}\n","{meta.someValueYouHaveAddedToTheFrontmatter}","This is very common to see Mosaic pages that reference the title as shown below:","---\n","title: Title\n","---\n","\n","# {meta.title}","Plugins & Frontmatter","Mosaic plugins can also embed their output into page frontmatter in 2 different ways:","a property is directly added to the page object","a JSON file is generated and referenced using a ","ref","Adding a property to the page","A plugin can add a property to a page simply by extending the page object it receives in the "," lifecycle event:","async function $afterSource(pages) {\n"," for (const page of pages) {\n"," page.newProperty = 'Hello'\n"," }\n"," return pages;\n","}","You could use this property in the page content using ","JSON File","Let's take a look at the ",".","The purpose of this plugin is to crawl the page hierarchy to find the closest "," found in any parent page's frontmatter.","Finds all index pages among the source docs","Deserialises those pages so it can read the frontmatter and content of the page","If a property called "," in the page frontmatter is found a new file named shared-config.json is created","Adds a ref named "," to the shared config file that points to the shared config of the index page","import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\n","import { flatten } from 'lodash-es';\n","import path from 'path';\n","\n","function createFileGlob(url, pageExtensions) {\n","if (pageExtensions.length === 1) {\n","return `${url}${pageExtensions[0]}`;\n","}\n","return `${url}{${pageExtensions.join(',')}}`;\n","}\n","\n","interface SharedConfigPluginPage extends Page {\n","sharedConfig?: string;\n","}\n","\n","interface SharedConfigPluginOptions {\n","filename: string;\n","}\n","\n","const SharedConfigPlugin: PluginType = {\n","async $beforeSend(\n"," mutableFilesystem,\n"," { config, serialiser, ignorePages, pageExtensions },\n"," options\n"," ) {\n"," const pagePaths = await mutableFilesystem.promises.glob(\n"," createFileGlob('**/index', pageExtensions),\n"," {\n"," ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],\n","cwd: '/'\n","}\n",");\n","\n"," for (const pagePath of pagePaths) {\n"," const sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename);\n","\n"," const page = await serialiser.deserialise(\n"," String(pagePath),\n"," await mutableFilesystem.promises.readFile(String(pagePath))\n"," );\n"," if (page.sharedConfig) {\n"," config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`);\n"," await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');\n"," } else {\n"," const baseDir = path.posix.resolve(path.dirname(String(pagePath)), '..","/');\n"," config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]);\n"," }\n"," }\n","\n","}\n","};\n","\n","export default SharedConfigPlugin;\n"]},{"title":"Author","route":"/mosaic/author/index","content":["Here you will learn how to author documentation using markdown, Mosaic components and page templates"]},{"title":"Markdown Syntax","route":"/mosaic/author/markdown-syntax","content":["Out of the box, Mosaic supports documents written in ","MDX"," which allows React components to be embedded within the ","basic syntax"," outlined in the original Markdown design document.","In addition to the basic markdown syntax, the MDX processor used by Mosaic has been configured to support additional markdown syntax and features:","GitHub flavored markdown (gfm)","Frontmatter","Mosaic Standard Components","All components that comprise the "," export from "," package are available to use out of the box in your documents.","This includes components for all standard markdown syntax and additional components like "," and ",".","Referencing Frontmatter","Frontmatter values can be embedded into the page using the "," object. ","See ","frontmatter"," for more information.","Configuring Supported components","TODO"]},{"title":"Refs","route":"/mosaic/author/refs","content":["Refs are a very powerful feature of Mosaic documents that use ","JSON References"," to reference\n","a property from the page frontmatter or frontmatter of other pages.","The key concept is that of a JSON pointer which takes the form ","A","#","B"," where:","A"," is the relative path from the current schema to a target schema. ","If A is empty, the reference is to a type or property in the same schema, an in-schema reference. ","Otherwise, the reference is to a different schema, a cross-schema reference.","B"," is the complete path from the root of the schema to a type or property in the schema. ","If # in not included or B is empty, the reference is to an entire schema.","To translate this for our purposes:","A"," is the relative path to a file in the filesystem.","B"," is the path to a property in the frontmatter of the file.","It's probably better explained with examples...","Local refs (In-schema reference)","It is possible to reference a page's own frontmatter to avoid duplication:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," sidebarPriority:\n"," $ref: '#/sidebar/priority'\n","---","This page you are reading right now has a sidebar priority of ",".","The value of "," comes from "," in the frontmatter.","Notice that because we don't specify a path before the "," in the ref we need to put the whole\n","value inside quotes.","Remote Refs (Cross-schema reference)","It is possible to reference frontmatter of other pages. ","Again this helps avoid duplication but the real power is using refs to build the data model. ","See ","advanced"," for more information.","The ","index"," page of the Author section has this frontmatter:","---\n","title: Author\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," exampleRefData: Hello from Author page\n","---","This page you are currently looking at is referencing the "," in it's frontmatter like this:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," authorRef:\n"," $ref: ./#/data/exampleRefData\n","---","I can then use the data and embed it in this page like this:","{meta.data.authorRef}","And here it is: ","Notice that we did not need to put "," in the ref since index pages are resolved\n","automatically.","Advanced","You have had a taste of the power and want to know more? ","OK, lets reference and then list out all the mosaic modes:","The Modes ","index"," page has this frontmatter:","---\n","title: Modes of operation\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","data:\n"," modes:\n"," $ref: ./*#/title\n","---","The ref here is essentially using a wildcard (the *) to grab the "," property from the frontmatter of every page in the modes folder.","We can reference that data just like before:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," modes:\n"," $ref: ../configure/modes#/data/modes\n","---","Output","With the code below, the referenced data can be embedded in a page.","
      \n"," {meta.data.modes.map(mode => (\n","
    • {mode}
    • \n"," ))}\n","
    ","Output with Mosaic Components","You can use Mosaic components with referenced data as well. ","Below we are using the "," and "," components.","\n"," {meta.data.modes.map(mode => (\n"," \n"," ))}\n","","Setting Refs using Plugins","Mosaic plugins can create new refs, create new ","global"," refs and see existing refs created by the page or other plugins. ","This is achieved using a special "," property available in the plugin helpers.","Create new refs","Use the "," function from the helpers provided to plugin lifecycle events. ","You need to provide","The file/fullpath to write the ref to","The path to the ptoperty where the ref will be applied","The value of the ref, which can use wildcards","For example, the following would add a property to pages named ",". ","The value is the title of all pages in the ","same"," directory as the current page"," async $afterSource(pages, { config }) {\n"," for (const page of pages) {\n"," config.setRef(page.fullPath, ['titles', '$ref'], `**#/title`);\n"," }\n"," return pages;\n"," }","When setting the property path the last string must be "," otherwise you're not creating a ref\n","that will be resolved by the RefPlugin.","Existing refs","To view refs that already exist you can use ",". ","For example to see all refs for a page:"," config.data.refs[fullPathToPage]","Create global refs","Global refs are similar to regular refs except they do not pre-resolve. ","This means they are resolved when the referenced file is read and the global mosaic filesystem, made up of multiple sources, is used rather than the filesystem of a single source."]},{"title":"Sidebar Configuration","route":"/mosaic/author/sidebars","content":["Sidebar data is generated by the the ","Sidebar Plugin"," which by default uses alphabetical ordering of page names to order the sidebar.","Sidebar frontmatter","A page can add a "," property to its ","frontmatter"," to change the ordering of a sidebar and what title is used for a page in the sidebar.","To rearrange pages in the sidebar or to apply a different label to a page you can specify the following in the page frontmatter:","Sidebar group label","A sidebar group when expanded will reveal the pages contained within the group.\n","Each group has a default page, ",", which is the default for the group and any breadcrumb link.","The"," can define a "," which defines the name of the sidebar group.\n","If no ","groupLabel"," is defined, sidebar group labels will be defined by either ","label"," or ","title",".","To specify the label of the default page, refer to [Sidebar label](.","/Sidebar label)","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," groupLabel: Group label\n","---","Sidebar label","By default the ","title"," of a page is used in the sidebar as the label but this can be changed to another label using page frontmatter.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," label: A New Label\n","---","Sidebar priority","Sidebar priority is a number used to sort the sidebar. ","Higher the priority pages appear first in the sidebar ordering.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," priority: 10\n","---","Sidebar Sort Configuration","Sidebar sort configuration allows the sidebar to be sorted using a more sophisticated approach and only needs to be applied to the "," page of the directory you want to sort.","Priority takes precedence over sort configuration so it can be used to override the sort\n","configuration if required.","You must add the sidebar sort configuration to the "," property of an ","index"," page e.g.,","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/title\n"," dataType: string\n"," arrange: desc","The properties of the sort configuration are described in the table below:","| Property | Description | Required |\n","| -------- | ------------------------------------------------------------------------------------------ | -------- |\n","| field | the path, separated by ",", used to find the value in page frontmatter you wish to sort by | Yes |\n","| dataType | is the type of the value. ","Can be a "," or "," or ",". ","| Yes |\n","| arrange | "," or "," order | yes |","Newsletters Example","Let's say you have a ","Newsletters"," directory and each page in the directory represents a newsletter. ","You wish to sort the newsletter sidebar by publication date in descending order (newest first).","One way to do this is to edit each page and add a "," which is manually incremented every time a news newsletter is added. ","Alternatively you can add the following sort configuration to the newsletters index page:","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/publicationDate\n"," dataType: date\n"," arrange: desc","This will use the "," property in each newsletter to sort the newsletters in the sidebar. ","The publication date is converted to a "," by the Sidebar Plugin to ensure accurate ordering. ","There is now no need to increment a priority when a new newsletter is added.","Example newsletter page frontmatter:","---\n","title: Newsletter 01 Jan 2023\n","description: Newsletter 01 Jan 2023\n","data:\n"," title:\n"," $ref: '#/title'\n"," link: /newsletters/2023-01-01\n"," publicationDate: '2023-01-01'\n","---"]},{"title":"Tags","route":"/mosaic/author/tags","content":["Tags are very similar to ","Refs"," with one very important distinction: Tags work ","across multiple sources",".","In Mosaic, each source has it's own filesystem which are then merged together to form a union of all source filesystems. ","It is in this union filesystem that tags are applied and not to the individual source filesystem that the tag was defined on.","Tags are slower to apply than refs. ","Multiple sources need to run and update before tagged data\n","will be resolved. ","If possible, stick to refs and only use tags when dealing with multiple sources.","Tagging a page","To tag a page, add a "," property to the page frontmatter. ","For example, the Product A page is tagged with \"in-stock\":","---\n","title: Product A\n","description: Mosaic Product A\n","layout: ProductDiscover\n","tags:\n"," - in-stock\n","data:\n"," name:\n"," $ref: '#/title'\n","---"," is always an array","Subscribing to a tag","To subscribe to a tag, use the "," property. ","For example, the Products page has subscribed to the "," property of pages tagged with ",".","---\n","title: Products\n","data:\n"," in-stock:\n"," $tag: in-stock#/data\n","---","A "," can provide a path to a specific piece of metadata on tagged pages, just like a ref.","Example","This page has subscribed to "," and "," tags and is displaying them using 2 Mosaic "," components.","Both the Product A and Product B pages are part of a different source than this page.","In Stock","Out of Stock"]},{"title":"UI Components","route":"/mosaic/author/ui-components","content":[""]},{"title":"Configure","route":"/mosaic/configure/index","content":["Mosaic is a tool which retrieves, formats and combines documentation pages from any number of different external sources (such as GitHub repositories, local disks or REST endpoints), into a single filesystem for you to use in your websites."]},{"title":"Content Fragment","route":"/mosaic/fragments/content-fragment","content":["Fragment Title","This is an example fragment of markdown content, being pulled from ","."]},{"title":"Fragments","route":"/mosaic/fragments/index","content":["This folder contains example fragments that are referenced and rendered in the Fragments docs page."]},{"title":"Tile A","route":"/mosaic/fragments/tile-a","content":[]},{"title":"Tile B","route":"/mosaic/fragments/tile-b","content":[]},{"title":"Create a Site","route":"/mosaic/getting-started/create-a-site","content":["In this guide you will learn how to generate and serve a Mosaic site.","Prerequisites","To begin setting up a Mosaic site, you need to have the following software installed:","Yarn v1","Node.js v18 or higher","Step 1: Generate a Mosaic site","Run the following command in your project directory to generate a new Mosaic site:","npx @jpmorganchase/mosaic-create-site create -o my-sample-site","This command creates a new Mosaic site in the my-sample-site directory.","Next, navigate to the site directory:","cd my-sample-site","Step 2: Serve the site","The example site you have generated comes preconfigured with two ","sources",": a remote repository and a local docs folder. ","Sources are used by Mosaic to pull content from disparate locations and merge them into a single virtual filesystem that can be used by a Mosaic site.","Set up Git credentials","If you want the site to read from remote repositories, you need to set up an environment variable to store your Git credentials. ","Follow these steps:","Open a terminal or command prompt.","Replace "," and "," in the following commands with your actual Git username and personal access token.","On Unix:","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","On Windows:","set MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","This sets the MOSAIC_DOCS_CLONE_CREDENTIALS environment variable with your Git credentials.","Serve command","Now you can serve your Mosaic site by running the following command:","yarn serve","Access your Mosaic site from a browser using the following URLs:","To browse the content from your local source: http://localhost:3000/local","To browse the content from the Mosaic Git repo source: http://localhost:3000/mosaic","That's it! ","Your Mosaic site is now up and running.","Next Steps:","Deploy your Mosaic site to AWS or Vercel for production use.","Create more pages to expand your site's content.","Configure your own sources in the mosaic.config.mjs file to pull content from different locations.","Theme your site"]},{"title":"Getting Started","route":"/mosaic/getting-started/index","content":["Getting Started with Mosaic","Follow our step-by-step guides to quickly create and deploy your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/getting-started/publish-site-to-aws","content":["Publish a site to AWS using S3 snapshots.","Step 1: Generate a Mosaic site","If you have already created your Mosaic site, skip ahead to step 2.","> npx @jpmorganchase/mosaic-create-site -o my-sample-site\n","> cd my-sample-site","Step 2: Create a Github repository","> git init\n","> git remote add origin git@github.com:username/my-sample-site.git\n","> git add .\n","> git commit -m \"initial commit\"\n","> git push origin main","Step 3: Generate a snapshot of content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","> yarn gen:snapshot","Step 4: Configure environment for S3","> export MOSAIC_MODE=\"snapshot-s3\"\n","> export MOSAIC_S3_BUCKET=\"\"\n","> export MOSAIC_S3_REGION=\"\"\n","> export MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","> export MOSAIC_S3_SECRET_ACCESS_KEY=\"\"\n","> yarn mosaic upload -S ./snapshots/latest","Step 5: Setup AWS","Switch to the ","AWS Amplify"," console and deploy your app as a SSR application by following the ","AWS docs",".","Setup an S3 bucket as per the ","AWS S3 docs",".","Step 7: Configure your AWS app","Add the environment vars to the hosted app via your console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16","Step 8: Upload your snapshot","Upload your snapshot to S3 storage.","> yarn mosaic upload -S ./snapshots/latest"]},{"title":"Publish","route":"/mosaic/publish/index","content":["To create your first Mosaic site, we have created a command line generator that scaffolds a ","standard"," site.","A ","standard"," site offers","an out the box, working site, which showcases local and remote content sources","a minimal set of files that can be configured with your own components, themes, layouts, sources and plugins","an update path that enables you to update Mosaic, independently of your own configuration","Create your first site","Install the Mosaic create site script.","> yarn global add @jpmorganchase/mosaic-create-site","Create a directory for your site and run the "," script.","> mkdir mosaic-sample-site\n","> cd mosaic-sample-site\n","> mosaic-create-site -f .","Define the environment variable, which enables us to access your remote repo.","> export MOSAIC_DOCS_CLONE_CREDENTIALS=\"\"","The "," environment variable is composed of your git username and your PAT token.\n","Follow these ","docs"," to see how to create your own PAT token.","Your site is ready to run.","> yarn serve","In your browser load ","Congratulations, you have created your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/publish/publish-site-to-aws","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to AWS, deploy your app as a SSR application by following the ","AWS docs",".","Once the basic app has been configured, add the Mosaic specifics.","Add the environment vars to the hosted app via the Amplify console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16"]},{"title":"Publish a site to Vercel","route":"/mosaic/publish/publish-site-to-vercel","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to Vercel, refer to the ","Vercel docs",".","Deployment","As the ","vercel platform"," hosts static content you will need to deploy a mosaic snapshot. ","There is no option to run mosaic in ","active mode",".","1. ","Update Config File","Add the following to the mosaic config file used by your site:"," deployment: { mode: 'snapshot-file', platform: 'vercel' }","2. ","Set Environment Variables","Set 2 ","environment variables"," in the vercel dashboard.","| Variable Name | Value |\n","| ------------------- | ----------------- |\n","| MOSAIC_MODE | snapshot-file |\n","| MOSAIC_SNAPSHOT_DIR | snapshots/latest. ","|","3. ","Run Build and Deploy","The "," command used by vercel must run "," followed by ","The "," command is needed to workaround an ","output file tracing"," problem.","Example:","yarn build && yarn deploy","Output File Tracing","Output File Tracing"," is a feature of Next.js that uses static analysis\n","to determine what files are needed to deploy a production version of an application.","Due to the architecture of mosaic, snapshot files can be ignored by this process and therefore excluded from the build artifacts deployed by vercel.","If you are deploying your site to the ","vercel platform"," then the mosaic site has a "," command that will update the nextjs output trace to include the snapshot files."]},{"title":"Test","route":"/mosaic/test/index","content":["Pages for e2e testing."]},{"title":"Admin","route":"/mosaic/configure/admin/index","content":["There are several admin urls exposed by Mosaic that provide an insight into how the filesystem has been configured and a way to remotely manage sources.","Endpoints","| Endpoint | Method | Description | Params |\n","| -------------------------- | ------ | -------------------------------------------- | ---------------------- |\n","| "," | GET | Returns the JSON from the Mosaic config file | n/a |\n","| "," | GET | Returns the entire mosaic filesystem as JSON | n/a |\n","| "," | GET | Returns a collection of active sources | n/a |\n","| "," | POST | Adds the source | definition & isPreview |\n","| "," | PUT | Stops the source with the provided name | name |\n","| "," | PUT | Restarts the source with the provided name | name |"]},{"title":"Detail Highlight","route":"/mosaic/configure/layouts/detail-highlight","content":["Layout: Detail Highlight","Initialize with "," in your page's frontmatter.","This layout is used to promote, share insights, and statistics for a line of business.","This layout should be used for pages with only one level of nesting, therefore, pagination is not eligible for this\n","layout.","Page geometry"]},{"title":"Detail Overview","route":"/mosaic/configure/layouts/detail-overview","content":["Layout: Detail Overview","Initialize with "," in your page's frontmatter.","This layout is used to present an overview of expected documentation, statisitics, and ability to\n","navigate to more documents.","Avoid making this page too long. ","If it gets too long, we recommend the ","Detail Technical"," template.","Page geometry","Other Layouts","Detail Highlight","Detail Technical","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Detail Technical","route":"/mosaic/configure/layouts/detail-technical","content":["Layout: Detail Technical","Initialize with "," in your page's frontmatter.","This layout is used for longer, technical, detailed content about the product.","This layout shows less marketing-type visuals and more visual of diagrams, screenshots, and code\n","snippets.","This page can be short or very lengthy.","Page geometry","Other Layouts","Detail Highlight","Detail Overview","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Layouts","route":"/mosaic/configure/layouts/index","content":["Todo..."]},{"title":"Landing Layout","route":"/mosaic/configure/layouts/landing","content":["Layout: Landing","Initialize with "," in your page's frontmatter.","Use this layout as a landing page to show large branded visuals, and high-level content about the\n","line of business.","Set the tone and voice for your LOB’s experience.","Use components that support your content with places to insert visuals, share any stats or an\n","introduction of LOB’s story.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Product Discover Layout","route":"/mosaic/configure/layouts/product-discover","content":["Layout: Product Discover","Initialize with "," in your page's frontmatter.","Use this layout to introduce a product feature with a description and large visual.","This layout is use for marketing and discovery content.","Page geometry"]},{"title":"Product Preview Layout","route":"/mosaic/configure/layouts/product-preview","content":["Layout: Product Preview","Initialize with "," in your page's frontmatter.","This layout has been used to introduce a product and showcase their suite of product offerings.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Active mode","route":"/mosaic/configure/modes/active","content":["In "," mode content can be ","pulled"," from heterogeneous data sources and normalized via plugins, to the configured components/theme.\n","As your content changes, the site will ","re-pull"," the content and update your site in real-time.","The standard generated site comes with 2 sources to demonstrate, how 'active' mode work.","a local source, which loads content from ","a remote source, which loads content from a ","sample Github repository","Configuring your content sources","All content is composed together within a ","namespace",".","A ","namespace"," is the scope for aggregated content, represented by the root path.\n","e.g Our sample docs are aggregated into a ","namespace"," called "," and served by the user journey ","Mosaic doc sources are defined by a file called ","Here is how that might look for a standard site.","Pull your local content","To tryout local content creation, add a file called","The load ","Each directory should contain an "," which is the default page, when a page is loaded without a path","Now create other pages and subdirectories and explore how Mosaic, builds your user-journeys from your fileset.","Pull your remote content","To tryout remote content creation, your standard site comes pre-configured to load our Mosaic sample docs.","Edit the "," and change your "," and "," to pull content from other repos."]},{"title":"Modes of operation","route":"/mosaic/configure/modes/index","content":["Mosaic can operate in 3 different modes","Active updates","In ","active"," mode, content updates in real-time.","active"," mode content is pulled at configured intervals in real-time, as defined by ",".","Read the ","active"," configuration docs.","Static content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","In a snapshot mode, the snapshot does update itself.","File based snapshots","In "," mode, immutable snapshots of content are loaded at startup from the local file-system.","Read the ","snapshot-file"," configuration docs.","S3 based snapshots","In "," mode, snapshots of content are loaded at startup from a remote S3 bucket.","Read the ","snapshot-s3"," configuration docs."]},{"title":"Snapshot file mode","route":"/mosaic/configure/modes/snapshot-file","content":["In "," mode a local immutable snapshot can be loaded by the site. ","Typically, the snapshot and the site are\n","deployed together and upon startup the site can load the snapshot from the local file-system.","To use "," mode","export MOSAIC_MODE=\"snapshot-file\"\n","export MOSAIC_SNAPSHOT_DIR=\"./snapshot/latest\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Commit the snapshot to your Git repo and push the site+snapshot to your Git repo, within the same branch."]},{"title":"Snapshot AWS/S3 mode","route":"/mosaic/configure/modes/snapshot-s3","content":["In "," mode a snapshot can be loaded from a pre-configured AWS S3 bucket.","To use "," mode","> export MOSAIC_MODE=\"snapshot-s3\"\n","> MOSAIC_S3_BUCKET=\"\"\n","> MOSAIC_S3_REGION=\"\"\n","> MOSAIC_S3_ACCESS_KEY_ID=\"\"\n","> MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Uploading a snapshot to S3","To upload a snapshot to S3, define the required environment variables and run","yarn mosaic upload -S "]},{"title":"$AliasPlugin","route":"/mosaic/configure/plugins/alias-plugin","content":["The "," is what powers the ","aliases"," feature of Mosaic.","It does this by scrapes "," from page metadata and also applies all aliases stored in ","Other plugins can use "," to apply new aliases, as long as they call it before this plugin has reaches the "," lifecycle event.","This plugin is added to the plugins collection by Mosaic itself so users do ","not"," need to include it in their own mosaic config file.","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"BreadcrumbsPlugin","route":"/mosaic/configure/plugins/breadcrumbs-plugin","content":["The "," is responsible for generating the data needed to show breadcrumbs navigation on pages. ","It then appends this data to a "," property in the page metadata.","Should a page already have a "," property in it's metadata then it is respected and not overwritten.","If a page has a "," property in it's metadata then this is used as the label for the breadcrumb, otherwise the page "," is used.","When the "," is traversing up directories, it needs to know what page in the directory represents the ","breadcrumb"," for that directory. ","It is recommended to use the "," page for this but the page to use is a configurable option of the breadcrumbs plugin.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | ------------------------------------------------ |\n","| indexPageName | The page name to use for \"directory\" breadcrumbs |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the breadcrumbs plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BreadcrumbsPlugin',\n"," options: {\n"," indexPageName: 'index.mdx'\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"BrokenLinksPlugin","route":"/mosaic/configure/plugins/broken-links-plugin","content":["The "," will identify any broken links in pages Mosaic has pulled into it's filesystem by making use of the ","check-links"," package.","It can identify broken links between the pages themselves and external links that pages link out to.","What this plugin is really checking is \"liveness\" of a link.","alive if the URL is reachable (2XX status code)","dead if the URL is not reachable","invalid if the URL was parsed as invalid or used an unsupported protocol","Links may be \"alive\", but the ","content"," of the linked page may not be what you want so continue\n","to check links show what you expect.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n","| baseUrl | This is used to calculate the full url for links between pages. ","It should be the url Mosaic is running on |\n","| proxyEndpoint | If you are behind a corporate proxy, external link checking will not work unless you specify the proxy endpoint using this option |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BrokenLinksPlugin',\n"," priority: -1,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," baseUrl: process.env.MOSAIC_ACTIVE_MODE_URL || 'http://localhost:8080',\n"," proxyEndpoint: 'http://some-proxy-url'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because it needs Mosaic to be running in order to\n","make requests to all of the page links.","Example Output","When a link is found to be broken, you will see the following output in the console:","@jpmorganchase/mosaic-site:serve: 8080 [Mosaic] Broken links found in /local/docs/publish-site-to-vercel.mdx\n","@jpmorganchase/mosaic-site:serve: 8080 Link to https://nextjs.org/davie is dead {\n","@jpmorganchase/mosaic-site:serve: 8080 type: 'link',\n","@jpmorganchase/mosaic-site:serve: 8080 title: null,\n","@jpmorganchase/mosaic-site:serve: 8080 url: 'https://nextjs.org/davie',\n","@jpmorganchase/mosaic-site:serve: 8080 children: [ { type: 'text', value: 'Next.Js', position: [Object] } ],\n","@jpmorganchase/mosaic-site:serve: 8080 position: {\n","@jpmorganchase/mosaic-site:serve: 8080 start: { line: 4, column: 20, offset: 36 },\n","@jpmorganchase/mosaic-site:serve: 8080 end: { line: 4, column: 55, offset: 71 }\n","@jpmorganchase/mosaic-site:serve: 8080 }\n","@jpmorganchase/mosaic-site:serve: 8080 }"]},{"title":"$CodeModPlugin","route":"/mosaic/configure/plugins/codemod-plugin","content":["Todo"]},{"title":"DocumentAssetsPlugin","route":"/mosaic/configure/plugins/document-assets-plugin","content":["The "," is responsible for copying assets from a document sub-directory to the public folder of your site. ","This is particularly useful for co-locating images within your document structure and referencing them from documents using relative paths.","Co-locating Images","A common use case is to store images within the same directory structure as your documents. ","This allows you to reference images using relative paths.","For example, to load an image (",") from a sub-directory called ",", relative to the document's path, you can use the following Markdown:","![","alt text](./images/mosaic.jpg)","This will render the image as follows:\n","Centralized Image Directory","Alternatively, if you prefer to store all your images in a common parent directory, you can reference them using a relative path that navigates up the directory structure.","For example, to load an image from a common parent directory, you can use:","![","alt text](..","/../images/mosaic.jpg)","Handling Absolute Paths and URLs","The plugin ignores image paths that start with a leading slash (/) or are fully qualified URLs. ","This ensures that only relative paths are processed and copied to the public folder.","![","alt text](/images/mosaic.jpg)\n","![","alt text](https://www.saltdesignsystem.com/img/hero_image.svg)","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins.","Options","| Property | Description | Default |\n","| ------------ | ---------------------------------------------------------------------------------- | ------------- |\n","| srcDir | The path where pages reside ","after"," cloning or when running locally | './docs' |\n","| outputDir | There path to your site's public images directory where you want to put the images | './public' |\n","| assetSubDirs | An array of subdirectory globs that could contain assets | ['**/images'] |\n","| imagesPrefix | The prefix that is added to all new paths | '/images' |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/DocumentAssetsPlugin',\n"," priority: -1,\n"," options: {\n"," srcDir: `..","/../docs`,\n"," outputDir: './public/images/mosaic',\n"," assetSubDirs: ['**/images'],\n"," imagesPrefix: '/images'\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"Plugins","route":"/mosaic/configure/plugins/index","content":["Mosaic Plugins are ","lifecycle-based"," hooks that are called on ","every"," source at different stages. ","You will never need to invoke a lifecycle method directly as their execution is managed by a plugin runner.","Plugins enable Mosaic to have a lightweight and flexible, modular architecture by encapsulating features and functionality as plugins.","Installation","Configuration","Plugins are added to the "," collection of the mosaic config file. ","Like ","sources",", plugins have an options property that can be used to provide plugin specific configuration.","| Property | Description | Required |\n","| --------------- | -------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed plugin module | Yes |\n","| disabled | Exclude this plugin completely. ","Defaults to false | No |\n","| runtimeOnly | Exclude this plugin when generating a snapshot. ","Defaults to false | No |\n","| previewDisabled | Exclude this plugin for \"preview\" sources | No |\n","| allowMultiple | Allow multiple instances of this plugin to run. ","| No |\n","| priority | The importance of this plugin. ","Plugins with the highest priority run first | No |\n","| options | Collection of other configuration values | No |"," plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: {}\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n","],","There is no need to import the plugin module directly. ","As long as the plugin is installed, Mosaic\n","will be able to import it using the built-in plugin loader.","Default Plugins","The following plugins are always included by Mosaic, regardless of whether they are present in the plugins collection of the Mosaic config file:","$TagPlugin","$AliasPlugin","$CodeModPlugin","$RefPlugin","Plugin errors","Should a plugin fail, the failure will ","not"," cause a source to close or for any other plugin to not run.","Instead plugin errors are tracked by Mosaic and can be viewed in the "," property available on each source listed by the list sources ","admin API",".","Plugin errors will be split by lifecycle event and only the lifecycle events used by the loaded plugins used will be shown.","Multiple Instances","By default, Mosaic will only run one instance of a plugin.","It may be the case that you wish to run the same plugin twice with a slightly different config. ","To do this, you must have 2 instances listed in the plugins collection and they ","both"," must set the "," option to ",".","For example, the config below runs the ","SidebarPlugin"," twice:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: 'products/product-a' },\n"," allowMultiple: true\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/!(","product-a)/*' },\n"," allowMultiple: true\n"," }\n"," // other plugins\n","];"]},{"title":"LazyPagePlugin","route":"/mosaic/configure/plugins/lazy-page-plugin","content":["The "," attempts to reduce the size of the Mosaic filesystem in memory by moving page metadata and content to disk.","It then adds a hook, so that when a page is requested the data is loaded from disk and combined with what is already in the Mosaic filesystem.","It must be the very last to run so that it can strip off metadata and content after other plugins\n","have finished with them.","Priority","This plugin runs with a priority of -2. ","Needs to be the last to run for biggest impact.","Options","| Property | Description |\n","| -------- | ------------------------------------------------------------------------------ |\n","| cacheDir | The directory to store the cache. ","Defaults to "," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/LazyPagePlugin',\n"," // This plugin must be the very last to run, so it can strip off metadata and content after the other\n"," // plugins are done with them\n"," priority: -2,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," cacheDir: '.tmp/.pull-docs-last-page-plugin-cache'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because the goal is to reduce the in-memory\n","filesystem size."]},{"title":"PagesWithoutFileExtPlugin","route":"/mosaic/configure/plugins/pages-wthout-extensions-plugin","content":["The "," plugin creates ","aliases"," without the file extension for every page in the Mosaic filesystem.\n","This allows pages to be retrieved from the filesystem without specifying the extension e.g., ",".","The plugin also modifies the "," metadata property of a page to point to the shorter alias.","Priority","This plugin runs with a priority of 1. ","It must run after the ","$AliasPlugin",".","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," }\n"," // other plugins\n","];"]},{"title":"PublicAssetsPlugin","route":"/mosaic/configure/plugins/public-assets-plugin","content":["The "," is responsible for finding \"assets\" in the Mosaic filesystem and copying them to another directory.","Typical use-case is for copying "," and "," to the public directory of a Next.js site as these are considered ","static assets"," for Next.js.","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins.","Options","| Property | Description |\n","| --------- | ----------------------------------------------------------- |\n","| outputDir | The directory to copy the assets to. ","Defaults to "," |\n","| assets | A collection of filenames to copy to the outputDir |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PublicAssetsPlugin',\n"," priority: -1,\n"," options: {\n"," outputDir: './public',\n"," assets: ['sitemap.xml', 'search-data.json']\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"ReadingTimePlugin","route":"/mosaic/configure/plugins/reading-time-plugin","content":["The "," generates an estimation of how long a page written in MDX will take to read and adds the "," property to the metadata of a page.","Priority","This plugin runs with no special priority.","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n"," // other plugins\n","];"]},{"title":"$RefPlugin","route":"/mosaic/configure/plugins/ref-plugin","content":["The "," powers the ","refs"," feature of Mosaic.","The plugin scrapes "," properties from page metadata and also applies all refs stored in ",".","Other plugins can use "," to apply new refs, as long as they call it before this plugin has reaches ",".","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"SearchIndexPlugin","route":"/mosaic/configure/plugins/search-index-plugin","content":["The "," is responsible for generating the search index and configuration information for ","Fuse.js"," which is the matching engine powering the client-side search functionality of Mosaic sites.","It outputs 3 files:","Full Search Index - ","Condensed Search Index - ","Search Configuration - ","Full Search Index","On a Mosaic site, the full index is fetched after a page has loaded, thus removing the chance of a huge index slowing down first-load.","Practically, the full index should load in the background before a user searches for something, but should a search be initiated before that (e.g., slow-internet) then the condensed version of the search index is available.","Condensed Search Data","Search Index plugin creates a \"condensed\" version of the search index that only includes the "," and "," for each page. ","This is the \"Minimum Viable Index\" to provide somewhat useable search results client-side while the main search index is loaded in the background.","Search Configuration","Any ","options"," that need to be passed to Fuse.js.","Search relevancy configuration","| Property | Description |\n","| ---------------- | ----------------------------------------------------- |\n","| includeScore | https://www.fusejs.io/api/options.html#includescore |\n","| includeMatches | https://www.fusejs.io/api/options.html#includematches |\n","| maxPatternLength | TODO |\n","| ignoreLocation | https://www.fusejs.io/api/options.html#ignorelocation |\n","| threshold | https://www.fusejs.io/api/options.html#threshold |\n","| keys | https://www.fusejs.io/api/options.html#keys |","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------- |\n","| maxLineLength | TODO |\n","| maxLineCount | TODO |\n","| keys | https://www.fusejs.io/api/options.html#keys |\n","| relevancy | ","search relevancy"," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SearchIndexPlugin',\n"," previewDisabled: true,\n"," options: { maxLineLength: 240, maxLineCount: 240 }\n"," }\n"," // other plugins\n","];","It's usually a good idea to mark this plugin as disabled for preview sources otherwise the pages\n","from the preview will appear in search results."]},{"title":"SharedConfigPlugin","route":"/mosaic/configure/plugins/shared-config-plugin","content":["The "," crawls the page hierarchy to find the closest "," metadata from any parent index's page metadata. ","It then exports a JSON file into each directory with the merged config for that level.","Shared config is typically the place where the following is configured for a Mosaic site:","App Header configuration including site name and main navigation","Footer information","Help links for the left sidebar area","Namespace Shared Configs","Consider 2 sources the share the same ","namespace"," \"product-docs\":","Source A - multiple product directories and main product index page. ","The index page specifies "," metadata.","Source B - pages relevant to a single product. ","Index page does ","not"," have any "," metadata.","Let's also assume that the pages from Source B would also naturally \"fit\" within the pages of Source B (e.g. inside a products directory).","In this scenario, the "," will attempt to copy the shared config file from Source A into the root directory of Source B allowing the Source B pages to use the Source A "," as though it were a product sourced directly from Source A.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| -------- | ---------------------------------------------- |\n","| filename | the name of the JSON file output by the plugin |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SharedConfigPlugin',\n"," options: {\n"," filename: 'shared-config.json'\n"," },\n"," priority: 3\n"," }\n"," // other plugins\n","];"]},{"title":"SidebarPlugin","route":"/mosaic/configure/plugins/sidebar-plugin","content":["The "," generates the necessary page metadata needed for the vertical navigation shown on some Mosaic pages.","The output from the plugin is added to a "," metadata property of the page.","Configuration","The "," is used to determine the \"root\" directories of the sidebar. ","So for example:"," - generate sidebar data for the pages that are 3 directories deep in the filesystem hierarchy"," - same as above but ignore the product-a directory"," - generate a sidebar just for product-b in the products directory","To rearrange pages in the sidebar or to apply a different label to a page you can ","configure the sidebar"," using page frontmatter.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| ----------- | ----------------------------------------------------------------------------- |\n","| filename | filename of the sidebar json, linked to each related page via ref |\n","| rootDirGlob | Glob pattern for matching directories which should be the root of the sidebar |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/*/*' }\n"," }\n"," // other plugins\n","];"]},{"title":"SiteMapPlugin","route":"/mosaic/configure/plugins/site-map-plugin","content":["The "," generates a ","sitemap"," using the pages in the Mosaic filesystem that adheres to the ","sitemaps XML schema",".","The output of the plugin is a file is named ",".","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | --------------------------------------------------------------------------------------------------- |\n","| siteUrl | The site URL. ","Used as the prefix for loc entries in the sitemap as these must start with a protocol |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SiteMapPlugin',\n"," previewDisabled: true,\n"," options: { siteUrl: process.env.SITE_URL || 'http://localhost:3000' }\n"," }\n"," // other plugins\n","];","Visualiser","To visualise your sitemap you can combine this plugin with the "," component provided by ",".","Rendering the "," component will render a tree view of your sitemap.","","Have a look at this site's pages, ","here","."]},{"title":"$TagPlugin","route":"/mosaic/configure/plugins/tag-plugin","content":["The "," powers the tags feature of Mosaic.","This plugin scrapes "," from page metadata and also applies all aliases stored in ",".","Tags ultimately resolve down into ","refs",", but are different from normal refs, in that they are applied to the\n","union filesystem (all merged filesystems), not to the individual source filesystem that they were defined on. ","This can be thought of as a ","global ref",".","Other plugins can use "," and modify the "," property, to apply new global refs, as long as\n","they do so before this plugin has reaches ",".","Priority","This plugin runs with no special priority but it must run before both the "," and the ",".","Example use case - Products Page","Let's assume there is a products page on your site and each product is shown as a tile. ","The information for each product tile is sourced from multiple Mosaic sources. ","How can tags be used to reference the product data needed for each tile on the products page?","The product page should add a "," metadata prop to its frontmatter:","---\n","title: Products\n","description: Product index\n","layout: ProductPreview\n","data:\n"," items:\n"," $tag: product#/data\n","---","The tag shown in the example above is saying populate "," of the Products index page with the "," metadata property of pages tagged with ",".","A tagged product page needs to have a "," property which is a collection of tags and one of these needs to be ",". ","This will allow the "," to correctly associate the product page to the product index page. ","It will also need a "," property because thats the property our product index page wants to use for the tiles.","---\n","title: Product A\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/a/index\n","---","---\n","title: Product B\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/b/index\n","---"]},{"title":"TableOfContentsPlugin","route":"/mosaic/configure/plugins/toc-plugin","content":["The "," generates a Table of Contents for each page in the Mosaic filesystem using the headings on the page.","Heading ranks are used to determine which page headings should be included in the Table of Contents:","| Heading Element (markdown syntax) | Rank |\n","| --------------------------------- | ---- |\n","| h1 (#) | 1 |\n","| h2 (##) | 2 |\n","| h3 (###) | 3 |\n","| h4 (####) | 4 |\n","| h5 (#####) | 5 |\n","| h6 (######) | 6 |","The plugin output is added to a "," metadata property of a page.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | ----------------------------- |\n","| minRank | The minimum page heading rank |\n","| maxRank | The maximum page heading rank |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/TableOfContentsPlugin',\n"," options: {\n"," minRank: 2,\n"," maxRank: 3\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"Git Repo Source","route":"/mosaic/configure/sources/git-repo-source","content":["The Git Repo Source is used to pull content from a remote git repository e.g. github.","Installation","Credentials and Access tokens","To successfully clone the git repo, the source definition must include credentials that have sufficient permissions to clone the repository.","We recommend storing a ","personal access token"," in an environment variable and using the environment variable in the source definition.","This keeps credentials out of code where they may be accidentally exposed to third parties.","Example","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\",","Configuration","| Property | Description | Required |\n","| ------------------- | -------------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-git-repo) | Yes |\n","| namespace | The scope for this source. ","| Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.credentials | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.subfolder | The name of the folder within the cloned repo containing the docs | Yes |\n","| options.repo | The repo URL | Yes |\n","| options.branch | The branch or tag to clone | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the subfolder | Yes |\n","| options.remote | The name of the git remote to use. ","Defaults to origin. ","| Yes |","Example Git Repo Source Definition","\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'mosaic',\n"," options: {\n"," credentials: process.env.MOSAIC_DOCS_CLONE_CREDENTIALS,\n"," prefixDir: 'mosaic',\n"," subfolder: 'docs',\n"," repo: 'https://github.com/jpmorganchase/mosaic.git',\n"," branch: 'main',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"]},{"title":"HTTP Source","route":"/mosaic/configure/sources/http-source","content":["The HTTP Source is used to pull content over HTTP.","Multiple endpoints can be specified and the source will combine and transform the response from each into a single collection of pages.","Installation","Configuration","| Property | Description | Required |\n","| ------------------------------------------ | ----------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-http) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.endpoints | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.transformResponseToPagesModulePath | The path of the module used to transform endpoint responses into Mosaic pages | Yes |\n","| options.checkIntervalMins | Number of minutes to wait between requests. ","Defaults to 5 minutes | No |\n","| options.initialDelayMs | Number of milliseconds to wait for making initial request. ","Defaults to 1000 | No |","Example HTTP Source Definition"," {\n"," modulePath: '@jpmorganchase/mosaic-source-http',\n"," namespace: 'my-namespace',\n"," options: {\n"," prefixDir: 'docs',\n"," endpoints: [\n"," 'https://api.data.com/blah',\n"," 'https://api.data.com/hello'\n"," ],\n"," transformResponseToPagesModulePath: '@scope/transformer-package'\n"," }\n"," }"]},{"title":"Sources","route":"/mosaic/configure/sources/index","content":["Sources are what Mosaic uses to pull content from disparate locations and merge into a single virtual filesystem that can be used by a Mosaic Site.","Depending on the ","mode"," used, sources can update periodically ensuring that new content is made available automatically.","Source Definitions","Source Definitions are specified in the "," collection of a mosaic config file.","Each source uses a ","zod schema"," to validate the provided JSON to ensure that all required information for the source to pull content has been provided.","A source definition at a minimum needs to provide the module path of the source and the ","namespace"," that it will use. ","A namespace is not unique across sources though it is common that each source has a different namespace.","Lastly, the options field can be used as a bucket for configuration values needed to configure the source e.g. credentials.","Users are free to add any property as a source option but please read the ","gotchas","\n","first regarding the allowed ","values",".","Example Local Folder Source Definition"," /**\n"," * Demonstrates a local file-system source, in this case a relative path to where the\n"," * site was generated.\n"," * Access from your browser as http://localhost:3000/local\n"," */\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n"," }","Source Namespace","A Source Namespace is a scoping mechanism for Mosaic sources used to filter the content loaded by Mosaic. ","By default all sources specified in the mosaic config file are loaded.","sources: [\n"," {\n"," namespace: 'my-namespace',\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder'\n"," }\n","];","The following command will ensure mosaic only loads sources with the "," scope.","yarn mosaic serve -c ''./mosaic.config.mjs' -p 8080 --scope \"local\"","Source Schedules","Source schedules define how often sources pull in content that exists remotely and if a failed source is retried. ","More information can be found ","here","Source Types","Out of the box, Mosaic provides 3 source \"types\":","Local Folder","Git Repo Source","HTTP Source","Sources must expose an observable interface so it is possible to compose sources together e.g. the Git Repo source uses the Local Folder source internally to watch the cloned folder for changes.","Watching for Updates","When running in ","active mode",", Mosaic will watch for any changes to the source content and if a change is detected, will initiate a pull of that new content.","How often to check for updates and how updates are triggered are a matter for the source to handle. ","Mosaic simply responds when a source emits new content.","Source Worker Thread","Sources are executed inside their own worker thread to ensure that the main thread is not overloaded. ","It is here that a local virtual filesystem for the source is created and where several of the ","Plugin Lifecycle"," events are triggered.","Gotchas","A service worker thread uses ","postMessage"," to communicate with the main thread and vice-versa.","This is important because it limits what values can be provided in the source definition to those that can be processed by the ","Structured Clone Algorithm","."]},{"title":"Local Folder Source","route":"/mosaic/configure/sources/local-folder-source","content":["The Local Folder Source is used to pull content from a folder located on the same machine as Mosaic is running.","It is common to use this source when running mosaic locally.","Installation","Configuration","| Property | Description | Required |\n","| ------------------ | ------------------------------------------------------------------------------ | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-local-folder) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.rootDir | The top level directory content will be pulled from | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the rootDir | Yes |","Example Local Folder Source Definition","{\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n","}","This source will look for content with the \".mdx\" extension in a \"docs\" directory 2 levels up from the Mosaic working directory. ","That content is included in the \"local\" namespace and available from a route that is prefixed with \"local\".","So if you had a file, "," then you would be able to view it at ","."]},{"title":"Source Schedules","route":"/mosaic/configure/sources/schedules","content":["A source schedule defines how often a source initiates a content pull and what to do when there is a failure.","A schedule can be specified for each source in the source definition, but should a source not provide a schedule it will inherit the \"global\" schedule.","Configuration","| Property | Description | Required | Default |\n","| ----------------- | -------------------------------------------------------------------------------------- | -------- | ------- |\n","| checkIntervalMins | The length of time in minutes before triggering a content refresh | Yes | 30 mins |\n","| initialDelayMs | Startup delay for the source. ","| Yes | 1000 ms |\n","| retryEnabled | When true, failures will trigger another content pull | No | true |\n","| retryDelayMins | The interval between retries. ","This will rise exponentially on every failure. ","| No | 5 |\n","| maxRetries | Maximum number of retry attempts | No | 100 |\n","| resetOnSuccess | If true, when a source recovers and emits pages it's retry counter is returned to zero | No | true |","Global Schedule","The global schedule applies to all sources that do ","not"," provide their own schedule. ","It can be configured as a top-level property of the Mosaic config file."," schedule: {\n"," checkIntervalMins: 60,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 15,\n"," maxRetries: 20\n"," }","Example","Given the config file below:"," schedule: {\n"," checkIntervalMins: 30,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 5,\n"," maxRetries: 10\n"," },\n"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceA',\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceA',\n"," subfolder: 'docs',\n"," repo: 'source-a-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceB',\n"," schedule:{\n"," checkIntervalMins: 60,\n"," initialDelayMs: 5000,\n"," retryDelayMins: 30,\n"," maxRetries: 50\n"," }\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceB',\n"," subfolder: 'docs',\n"," repo: 'source-b-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"," ]","Source A will inherit the global schedule so it will:","Start after a 1 second delay","Pull content every 30 minutes","Retry a failed content pull after an initial 5 minute delay","Retry 10 times and if still unsuccessful, closing","Source B has its own schedule so it will:","Start after a 5 second delay","Pull content every 60 minutes","Retry a failed content pull after an initial 30 minute delay","Retry 50 times and if still unsuccessful, closing","Retry Strategy","The retry strategy that Mosaic employs is ","Exponential Backoff",". ","This is a common strategy for networking applications that aims to prevent retries from causing more harm than good.","For example, given a source schedule that has a 1 minute retry delay and will retry a maximum of 3 times then the total time spent retrying is 7 minutes:","1 minute delay then 1st retry","2 minute delay then 2nd retry","4 minute delay then 3rd (and final) retry","Total delay: 1 + 2 + 4 = 7 minutes","As you can see, the delay between retries is growing exponentially giving the content source more time to recover after each retry."]},{"title":"Figma Source","route":"/mosaic/configure/sources/source-figma","content":["The Figma source is used to pull individual design patterns from Figma projects.\n","The source subscribes to Figma project groups, then extracts from project files, tagged patterns.","A Figma pattern tag is defined within a Figma project's ",".","For each retrieved/tagged pattern, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular pattern and then\n","group patterns based on owner.","Installation","Configuration","The Figma source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","| Property | Description | Required |\n","| ---------- | --------------------------------- | -------- |\n","| prefixDir | path to store figma patterns | Yes |\n","| figmaToken | figma access token | Yes |\n","| projects | array of projects to subscribe to | Yes |\n","| endpoints | figma endpoints | Yes |","Each project is configured from the "," array.","| Property | Description | Required |\n","| ------------- | --------------------------------------------- | -------- |\n","| id | numerical id of the subscribed project group | Yes |\n","| meta | metadata to add to each of the projects pages | Yes |\n","| patternPrefix | prefix to add to all pages created | Yes |"," defined the Figma REST API endpoints.","| Property | Description | Required |\n","| ----------------- | --------------------------------------------------------- | -------- |\n","| getProject | url to return a list of projects within the project group | Yes |\n","| getFile | url to return a project file | Yes |\n","| generateThumbnail | url to generate a thumbnail for the shared Figma node | Yes |","Example Figma Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-figma',\n"," namespace: 'some-namespace',\n"," options: {\n"," proxyEndpoint: 'http://path/to/optional/proxy',\n"," prefixDir: '/some/path/to/where/you/store/pattern/pages',\n"," figmaToken: process.env.FIGMA_TOKEN,\n"," projects: [{\n"," id: 99999,\n"," patternPrefix: 'yourPrefix',\n"," meta: {\n"," tags: [ 'some-tag'],\n"," data: {\n"," owner: 'some-owner'\n"," }\n"," }\n"," }],\n"," endpoints: {\n"," getFile: 'https://api.figma.com/v1/files/:file_id?","plugin_data=shared',\n"," getProject: 'https://api.figma.com/v1/projects/:project_id/files',\n"," generateThumbnail: 'https://api.figma.com/v1/images/:project_id?","ids=:node_id'\n"," }\n"," }\n"," }\n","]"]},{"title":"Readme Source","route":"/mosaic/configure/sources/source-readme","content":["The Readme source is used to pull individual "," text files from repositories.\n","This is a lighter weight version of a Git repository resource, which just pulls a single file,\n","rather the whole contents of the repo.","For each retrieved readme, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular "," and then\n","group this page, with others, based on owner.","Installation","Configuration","The Readme source is an "," and shares the same base configuration.","| Property | Description | Required |\n","| ----------- | --------------------- | -------- |\n","| accessToken | request access token | Yes |\n","| prefixDir | path to store pages | Yes |\n","| readme | array of readme files | Yes |","Each readme is configured from the "," array.","| Property | Description | Required |\n","| --------------- | ---------------------------- | -------- |\n","| contentTemplate | template for content of page | No |\n","| name | page name used in route | Yes |\n","| readmeUrl | url of readme | Yes |\n","| meta | metadata for page | Yes |","Example Readme Source Definition"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-readme',\n"," namespace: 'your-namespace',\n"," schedule: { checkIntervalMins: 0.25, initialDelayMs: 0 },\n"," options: {\n"," prefixDir: '/salt/community-index/readme',\n"," accessToken: 'Bearer your-access-token',\n"," readme: [\n"," {\n"," name: 'your-mosaic-page-name',\n"," readmeUrl: 'https://some/repo/url/readme.md',\n"," contentTemplate: `a template which replaces ::content:: with the content`,\n"," meta: {\n"," layout: 'DetailTechnical',\n"," title: 'Your Page Title',\n"," tags: ['your-tag-if-required'],\n"," description: 'A description for your readme'\n"," }\n"," }]\n"," }\n"," }]"]},{"title":"Storybook Source","route":"/mosaic/configure/sources/source-storybook","content":["The Storybook source is used to pull individual stories from Storybook, based on tags.","The Mosaic source will filter your Storybook's stories, based on "," or ",".","For each matching story, a page is created in the Mosaic file-system.","additional Mosaic tags can be added to each page using ","additional Mosaic metadata can be added to each page using ","This information can be used to create a dynamic index of stories from Storybook.","Installation","Configuration","The Storybook source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","The "," option is an array of Storybook urls that are used as Sources.\n","Each story is matched on "," using the "," Regexp (or by ",").","If specified, "," and "," can be added to any matching pages.","| Property | Description | Required |\n","| --------------- | ---------------------- | -------- |\n","| options.stories | array of story configs | Yes |"," is an array of Storybooks that you want to pull stories from","| Property | Description | Required |\n","| -------------- | ---------------------------------------- | -------- |\n","| storyUrlPrefix | prefix url of the storybook deployment | Yes |\n","| description | description of the storybook stories | Yes |\n","| storiesUrl | url of the storybook's "," | No |\n","| filter | RegExp filter to match on | No |\n","| filterTags | Array of Storybook tags to match on | No |\n","| meta | additional data to add to matching pages | No |","Example Local Folder Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-storybook',\n"," namespace: 'salt',\n"," options: {\n"," prefixDir: '/salt/internal/community-index/story-navigation',\n"," stories: [\n"," {\n"," storiesUrl: 'https://storybook.saltdesignsystem.com/stories.json',\n"," storyUrlPrefix: 'https://storybook.saltdesignsystem.com',\n"," description: 'Navigation patterns created in the Salt Labs',\n"," meta: { // can be any additional metadata you want added to the page's meta.data\n"," tags: ['some-tag'],\n"," data: {\n"," owner: 'Salt',\n"," source: 'STORYBOOK'\n"," }\n"," },\n"," filter: /Lab\\/Tabs/ // this is a Regexp that matches on Storybook title\n"," }\n"," ]\n"," }\n"," }\n","]","Example story metadata format","{\n"," \"type\": \"story\",\n"," \"id\": \"folder--story-1\",\n"," \"name\": \"Story 1\",\n"," \"title\": \"Folder/Story 1\",\n"," \"importPath\": \"./folder/story-1.stories.tsx\",\n"," \"tags\": [\n"," \"dev\",\n"," \"test\"\n"," ]\n","}"]},{"title":"Custom Components","route":"/mosaic/configure/theme/custom-components","content":["Learn how to add your own custom components to your Mosaic site.","Create Components Folder","To start, create a "," folder under "," where you'll store your custom components.","src/\n","└── components/","In this tutorial, we will create a custom "," component.","Create Card Component","Inside the "," folder, create a "," folder, which will contain your React "," component. ","The "," folder should include "," and "," files as shown in the structure below:","├── src/\n","│ ├── components/\n","│ │ └── card/\n","│ │ ├── index.tsx\n","│ │ └── card.module.css","Card Component: index.tsx","Create your "," component within the "," file:","import React from 'react';\n","import styles from './card.module.css';\n","\n","type CardProps = {\n"," title: string;\n"," content: string;\n","};\n","\n","export const Card: React.FC = ({ title, content }) => {\n"," return (\n","
    \n","

    {title}

    \n","

    {content}

    \n","
    \n"," );\n","};","Card Component: card.module.css","Define your component styles in the "," file:",".card {\n"," background-color: #f5f5f5;\n"," border: 1px solid #ccc;\n"," border-radius: 4px;\n"," box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n"," padding: 16px;\n"," transition: box-shadow 0.2s ease-in-out;\n","}\n","\n",".card:hover {\n"," box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n","}\n","\n",".card h2 {\n"," color: #333;\n"," font-size: 24px;\n"," margin-bottom: 8px;\n","}\n","\n",".card p {\n"," color: #666;\n"," font-size: 16px;\n"," line-height: 1.5;\n","}","In this example, we use a CSS file, but you can use whichever styling approach you prefer, such as ","vanilla extract",".","To export your "," component, create an "," file in the "," folder:","export * from './card';","Your final folder structure should look like this:","├── src/\n","│ ├── components/\n","│ │ ├── card/\n","│ │ │ ├── index.tsx\n","│ │ │ └── card.module.css\n","│ │ ├── index.ts","Import Custom Card Component","To use your custom "," component, import it into your site's "," file. ","Add the following line to your imports:","import * as myComponents from '../components';","Replace this line:","const components = mosaicComponents;","with:","const components = {\n"," ...mosaicComponents,\n"," ...myComponents\n","};","This will add your custom components to the site, and any custom components in "," will override the corresponding ones in ",". ","The spread operator (",") merges both "," and "," objects, giving priority to "," when there is a naming conflict.","Use Your Custom Card Component","Now you're ready to use your custom "," component. ","Build and run your site, and add the "," component to an MDX file in your "," folder or another source:","","You can create and add more custom components to your Mosaic site by following the same process."]},{"title":"Custom CSS","route":"/mosaic/configure/theme/custom-css","content":["You can customize the look and feel of your Mosaic site by creating cusotm CSS files. ","Here is a step-by-step guide to help you create your own CSS theme.","Create a CSS folder","To get started, create a folder named \"css\" in the \"src\" folder of your Mosaic project.","src/\n","└── css/","Create your theme","Inside the \"css\" folder, create a folder named \"global\". ","This is where you will add your custom styles.","src/\n","└── css/\n"," ├── global/\n"," ├── index.css","Create an \"index.css\" file inside the \"css\" folder. ","This file will import your custom styles.","@import './global/';","Inside your global folder, create a separate CSS file for each part of your site that you want to customize. ","For instance, if you want to change the text styling, create a \"text.css\" file inside the \"global\" folder. ","Here is an example of how your \"text.css\" file could look like:","h1 {\n"," /* Set custom font size and weight */\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h2 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h3 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h4 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h5 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h6 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","p {\n"," font-size: /* insert value */ ;\n"," line-height: /* insert value */ ;\n","}","You can add as many CSS files as you need, depending on how much you want to customize your site.","Create an \"index.css\" file inside the \"global\" folder. ","This file will import your custom styles, in this example we are importing our \"text.css\" file.","@import './text.css';","Your \"css\" folder should now look like this:","src/\n","└── css/\n"," ├── global/\n"," │ ├── text.css\n"," │ ├── index.css\n"," ├── index.css","Import your custom CSS into your site","To apply your custom styles to your Mosaic site, open your \"_app.tsx\" file and add the following line to the bottom of your imports:","import '../css/index.css';","Congratulations! ","You have successfully applied your custom CSS styles to your site. ","This example demonstrated how to create text styles, but you can use the same approach to customize other aspects of your site as well."]},{"title":"Theming Your Site","route":"/mosaic/configure/theme/index","content":["Create a unique look and feel for your Mosaic site by customizing the CSS theme and integrating your own UI components.","Customize the CSS","Adapt various design elements of your Mosaic site to create a cohesive visual theme. ","Refer to our guide to learn more about crafting a custom CSS theme:","CSS Theme Guide","Import Custom Components","Incorporate your own UI components, to tailor the look and functionality of your content. ","This tutorial will walk you through the process of adding custom components to your site:","Adding Custom Components Tutorial"]},{"title":"Aliases Test","route":"/mosaic/test/aliases/index","content":["This page is the alias test page."]},{"title":"Detail Highlight Test Page","route":"/mosaic/test/layouts/detail-highlight","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Overview Test Page","route":"/mosaic/test/layouts/detail-overview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Technical Test Page","route":"/mosaic/test/layouts/detail-technical","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Edit Layout","route":"/mosaic/test/layouts/edit","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Full Width Layout","route":"/mosaic/test/layouts/full-width","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Layouts","route":"/mosaic/test/layouts/index","content":["Pages for e2e testing of layouts."]},{"title":"Landing Layout Test Page","route":"/mosaic/test/layouts/landing","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Newsletter Test Page","route":"/mosaic/test/layouts/newsletter","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Discover Test Page","route":"/mosaic/test/layouts/product-discover","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Preview Test Page","route":"/mosaic/test/layouts/product-preview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Refs Data","route":"/mosaic/test/refs/data","content":[]},{"title":"Refs Test","route":"/mosaic/test/refs/index","content":["The sidebar priority is ",".","The other page data is ","."]},{"title":"Tags Test","route":"/mosaic/test/tags/index","content":["In Stock","Out of Stock"]},{"title":"$afterSource","route":"/mosaic/configure/plugins/lifecycle/after-source","content":["The first lifecycle event to trigger after receiving pages from a source and runs in a child process.\n","The pages can safely be mutated and will be reflected in the final filesystem that gets generated.\n","It ","must"," return a collection of pages.","The "," lifecycle event is called with:","pages - the collection of pages emitted by the source","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |","Example - Log out all page routes","async function $afterSource(pages, { config, ignorePages, pageExtensions }) {\n"," for (const page of pages) {\n"," console.log(page.route);\n"," }\n"," return pages;\n","}"]},{"title":"afterUpdate","route":"/mosaic/configure/plugins/lifecycle/after-update","content":["The third lifecycle event to trigger overall and the first to trigger inside the main Mosaic process.","Calls after the filesystem and symlinks have been reconstructed due to a change to the current source pages. ","Pages will ","not"," be cached when read at this stage, to allow for reading content and writing a new copy of it without the cached version taking effect.\n","This method is safe to use with lazy loading, as the filesystem should return the full page when read.","The "," lifecycle event is called with:","mutableFilesystem - Mutable filesystem instance with all of this source's pages inside (and symlinks re-applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalConfig | An immutable object for reading data from other lifecycle phases of all plugins. ","Shared across all sources. ","|\n","| sharedFilesystem | Mutable filesystem instance independent of any sources. ","Useful for global pages, like sitemaps |\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"$beforeSend","route":"/mosaic/configure/plugins/lifecycle/before-send","content":["The second lifecycle event to trigger and does so after a filesystem has been built up from the source pages.","It is the last lifecycle event to run in a source child process before the filesystem is sent to the main Mosaic process and should ","not"," return a value.","The "," lifecycle event is called with:","mutableFilesystem - Mutable virtual filesystem instance with all of this source's pages inside (and symlinks applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"Lifecycle Events","route":"/mosaic/configure/plugins/lifecycle/index","content":["Plugin lifecycle","The plugin lifecycle is triggered when a source emits content.","Each Mosaic source has its own worker thread and plugin lifecycle events that start with a "," will execute inside the worker thread.\n","All other lifecycle events will execute in the main Mosaic process.","The 5 lifecycle events are:","$afterSource","$beforeSend","afterUpdate","shouldClearCache","shouldUpdateNamespaceSources","Plugin methods that trigger inside the main thread should be asynchronous and highly optimised to\n","avoid holding up the main thread."]},{"title":"shouldClearCache","route":"/mosaic/configure/plugins/lifecycle/should-clear-cache","content":["The fourth lifecycle event to trigger overall and the second to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other"," sources should clear their cache in response to the source updating.","Only sources that have already run "," will call this lifecycle hook since there is no\n","cache to clear if they haven't reached that stage in the lifecycle.","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"shouldUpdateNamespaceSources","route":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources","content":["The fifth lifecycle event to trigger overall and the third to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other sources that share the same ","source namespace"," should re-run ",".","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]}] \ No newline at end of file diff --git a/packages/site/public/sitemap.xml b/packages/site/public/sitemap.xml index ce0967af..04863bf0 100644 --- a/packages/site/public/sitemap.xml +++ b/packages/site/public/sitemap.xml @@ -194,6 +194,11 @@ weekly 0.5 + + https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/document-assets-plugin + weekly + 0.5 + https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/index weekly diff --git a/packages/site/snapshots/latest/mosaic/another/example b/packages/site/snapshots/latest/mosaic/another/example deleted file mode 120000 index 3f7f0cfa..00000000 --- a/packages/site/snapshots/latest/mosaic/another/example +++ /dev/null @@ -1 +0,0 @@ -../test/aliases/index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/aliases b/packages/site/snapshots/latest/mosaic/author/aliases deleted file mode 120000 index c34f928a..00000000 --- a/packages/site/snapshots/latest/mosaic/author/aliases +++ /dev/null @@ -1 +0,0 @@ -aliases.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/aliases.mdx b/packages/site/snapshots/latest/mosaic/author/aliases.mdx deleted file mode 100644 index 231c44b4..00000000 --- a/packages/site/snapshots/latest/mosaic/author/aliases.mdx +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Aliases -layout: DetailTechnical -sidebar: - label: Aliases - groupLabel: Aliases - priority: 3 -sharedConfig: - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Getting Started - link: /mosaic/getting-started/index - - title: Configure - link: /mosaic/configure/index - - title: Author - link: /mosaic/author/index - - title: Publish - link: /mosaic/publish/index - footer: - description: Coming soon - title: Mosaic BETA - href: /mosaic -lastModified: 1700475661337 -fullPath: /mosaic/author/aliases.mdx -route: /mosaic/author/aliases -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 1 min read - minutes: 0.525 - time: 31500 - words: 105 -tableOfContents: - - depth: 2 - level: 0 - id: use-cases - text: Use Cases - - depth: 2 - level: 0 - id: example - text: Example -navigation: - prev: - title: Frontmatter - route: /mosaic/author/frontmatter - next: - title: Refs - route: /mosaic/author/refs -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Aliases are virtual 'symlinks' of pages, allowing one page to take on one or more other routes. -This is not the same as copying the page, it is a primitive filesystem link which is resolved by Mosaic. - -## Use Cases - -Aliases are great for linking to an old route if you've moved a page to a new place. -They can also be used to create short hand links to pages or to 'clone' a copy of a page into -another section of the site where it may be relevant. - -## Example - -This is the frontmatter for this page: - -``` ---- -title: Aliases -layout: DetailTechnical -aliases: - - /mosaic/example/aliases ---- -``` - -Try accessing this page from [/mosaic/example/aliases](/mosaic/example/aliases) diff --git a/packages/site/snapshots/latest/mosaic/author/fragments b/packages/site/snapshots/latest/mosaic/author/fragments deleted file mode 120000 index 468b49ef..00000000 --- a/packages/site/snapshots/latest/mosaic/author/fragments +++ /dev/null @@ -1 +0,0 @@ -fragments.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/fragments.mdx b/packages/site/snapshots/latest/mosaic/author/fragments.mdx deleted file mode 100644 index 25ced20a..00000000 --- a/packages/site/snapshots/latest/mosaic/author/fragments.mdx +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: Fragments -layout: DetailTechnical -sidebar: - label: Fragments - groupLabel: Fragments - priority: 2 -lastModified: 1700475661338 -fullPath: /mosaic/author/fragments.mdx -route: /mosaic/author/fragments -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 2 min read - minutes: 1.845 - time: 110700 - words: 369 -tableOfContents: - - depth: 2 - level: 0 - id: use-cases - text: Use Cases - - depth: 2 - level: 0 - id: usage - text: Usage - - depth: 3 - level: 1 - id: markdown-content-example - text: Markdown Content Example - - depth: 3 - level: 1 - id: component-example - text: Component Example -navigation: - prev: - title: Tags - route: /mosaic/author/tags - next: - title: UI Components - route: /mosaic/author/ui-components -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Fragments, also known as content fragments, are powerful tools that allow you to incorporate content from other pages into your documentation. By creating an MDX file and using the [generic directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) syntax `:fragment{src="path-to-fragment"}`, you can easily render the fragment in another file, providing modularity and reusability to your content. - -## Use Cases - -Fragments offer various use cases, such as: - -**Consistent Content**: Use fragments to maintain consistent content across multiple pages. For instance, if you have a table or a tile that appears on multiple pages, you can create a fragment for it and include it in all relevant files. This ensures that any updates made to the fragment automatically reflect across the entire documentation. - -**Reusable Components**: Fragments enable the creation of reusable components or sections. You can define a complex or commonly used section once and then include it in multiple pages as needed. This approach saves time and effort, as you only need to update the fragment file to propagate changes throughout your documentation. - -**Modular Documentation**: With fragments, you can break down your documentation into smaller, manageable pieces. Each fragment represents a specific topic or section, allowing you to organize and structure your content more efficiently. This modular approach simplifies maintenance and makes it easier to navigate and update your documentation. - -## Usage - -Firstly, enable the Fragment Plugin by adding the following to your plugins in `mosaic.config.mjs`. - -``` -{ - modulePath: '@jpmorganchase/mosaic-plugins/FragmentPlugin', - options: {} -} -``` - -To include a fragment in your content, follow these steps: - -Create an MDX file for the fragment you want to reuse. Remember to set the sidebar property of your fragment's frontmatter to exclude: true if you don't want the fragment to appear in the vertical navigation menu. - -``` ---- -title: Fragment Title -sidebar: - exclude: true ---- -``` - -In the target file where you want to include the fragment, use the remark directive syntax `:fragment{src="path-to-fragment"}`. - -### Markdown Content Example - -This is the contents of a fragment located at `../fragments/content-fragment.mdx`: - -``` ---- -title: Content Fragment -sidebar: - exclude: true ---- - -#### Fragment Title - -This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`. - -``` - -The below code snippet will render the content from the content-fragment.mdx file in your target file: - -``` -:fragment{src="../fragments/content-fragment.mdx"} -``` - -Example output: - - -#### Fragment Title - -This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`. - - -### Component Example - -Here is another example, where the fragment files each contain a `` component. - -``` -:fragment{src="../fragments/tile-a.mdx"} :fragment{src="../fragments/tile-b.mdx"} -``` - -The above code will render the content from tile-a.mdx and tile-b.mdx files, demonstrated below: - - - - - diff --git a/packages/site/snapshots/latest/mosaic/author/frontmatter b/packages/site/snapshots/latest/mosaic/author/frontmatter deleted file mode 120000 index b1325195..00000000 --- a/packages/site/snapshots/latest/mosaic/author/frontmatter +++ /dev/null @@ -1 +0,0 @@ -frontmatter.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/frontmatter.mdx b/packages/site/snapshots/latest/mosaic/author/frontmatter.mdx deleted file mode 100644 index 01437a19..00000000 --- a/packages/site/snapshots/latest/mosaic/author/frontmatter.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Frontmatter -layout: DetailTechnical -sidebar: - label: Frontmatter - groupLabel: Frontmatter - priority: 4 -lastModified: 1700475661338 -fullPath: /mosaic/author/frontmatter.mdx -route: /mosaic/author/frontmatter -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 3 min read - minutes: 2.215 - time: 132900 - words: 443 -tableOfContents: - - depth: 2 - level: 0 - id: example-page-yaml - text: Example page yaml - - depth: 2 - level: 0 - id: accessing-frontmatter-in-content - text: Accessing Frontmatter in content - - depth: 2 - level: 0 - id: plugins--frontmatter - text: Plugins & Frontmatter - - depth: 3 - level: 1 - id: adding-a-property-to-the-page - text: Adding a property to the page - - depth: 3 - level: 1 - id: json-file - text: JSON File -navigation: - prev: - title: Markdown Syntax - route: /mosaic/author/markdown-syntax - next: - title: Aliases - route: /mosaic/author/aliases -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -[Frontmatter](https://mdxjs.com/guides/frontmatter/), also known as page metadata, is a powerful feature that allows easy configuration of a page and Mosaic site components e.g. the sidebar. - -Frontmatter is written in yaml syntax and is found at the top of a page between 2 sets of 3 dashes: `---`. - -## Example page yaml - -``` ---- -title: Page Title -layout: DetailTechnical -sidebar: - priority: 4 ---- - -// frontmatter is closed and now comes page content -# Page Title - -This is some content. - -``` - -## Accessing Frontmatter in content - -With the syntax below it is possible to directly reference frontmatter inside content using curly brackets and the `meta` object. - -You can think of `meta` as a JSON object that holds all the frontmatter of a page and when the Mosaic `RefPlugin` encounters the curly brackets then the value in the frontmatter will be resolved. - -``` -{meta.title} -{meta.description} -{meta.someValueYouHaveAddedToTheFrontmatter} -``` - -This is very common to see Mosaic pages that reference the title as shown below: - -``` ---- -title: Title ---- - -# {meta.title} -``` - -## Plugins & Frontmatter - -Mosaic plugins can also embed their output into page frontmatter in 2 different ways: - -* a property is directly added to the page object -* a JSON file is generated and referenced using a [ref](./refs) - -### Adding a property to the page - -A plugin can add a property to a page simply by extending the page object it receives in the `$afterSource` lifecycle event: - -``` -async function $afterSource(pages) { - for (const page of pages) { - page.newProperty = 'Hello' - } - return pages; -} -``` - -You could use this property in the page content using `{meta.newProperty}` - -### JSON File - -Let's take a look at the `SharedConfigPlugin`. - -The purpose of this plugin is to crawl the page hierarchy to find the closest `sharedConfig` found in any parent page's frontmatter. - -* Finds all index pages among the source docs -* Deserialises those pages so it can read the frontmatter and content of the page -* If a property called `sharedConfig` in the page frontmatter is found a new file named shared-config.json is created -* Adds a ref named `config` to the shared config file that points to the shared config of the index page - -``` -import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types'; -import { flatten } from 'lodash-es'; -import path from 'path'; - -function createFileGlob(url, pageExtensions) { -if (pageExtensions.length === 1) { -return `${url}${pageExtensions[0]}`; -} -return `${url}{${pageExtensions.join(',')}}`; -} - -interface SharedConfigPluginPage extends Page { -sharedConfig?: string; -} - -interface SharedConfigPluginOptions { -filename: string; -} - -const SharedConfigPlugin: PluginType = { -async $beforeSend( - mutableFilesystem, - { config, serialiser, ignorePages, pageExtensions }, - options - ) { - const pagePaths = await mutableFilesystem.promises.glob( - createFileGlob('**/index', pageExtensions), - { - ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))], -cwd: '/' -} -); - - for (const pagePath of pagePaths) { - const sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename); - - const page = await serialiser.deserialise( - String(pagePath), - await mutableFilesystem.promises.readFile(String(pagePath)) - ); - if (page.sharedConfig) { - config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`); - await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}'); - } else { - const baseDir = path.posix.resolve(path.dirname(String(pagePath)), '../'); - config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]); - } - } - -} -}; - -export default SharedConfigPlugin; - -``` diff --git a/packages/site/snapshots/latest/mosaic/author/index b/packages/site/snapshots/latest/mosaic/author/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/author/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/index.mdx b/packages/site/snapshots/latest/mosaic/author/index.mdx deleted file mode 100644 index ff310e29..00000000 --- a/packages/site/snapshots/latest/mosaic/author/index.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Author -layout: DetailTechnical -sidebar: - label: Author - groupLabel: Author - priority: 3 -data: - exampleRefData: Hello from Author page -lastModified: 1700475661338 -fullPath: /mosaic/author/index.mdx -route: /mosaic/author/index -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 1 min read - minutes: 0.075 - time: 4500 - words: 15 -tableOfContents: [] -navigation: - next: - title: Markdown Syntax - route: /mosaic/author/markdown-syntax -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Here you will learn how to author documentation using markdown, Mosaic components and page templates diff --git a/packages/site/snapshots/latest/mosaic/author/markdown-syntax b/packages/site/snapshots/latest/mosaic/author/markdown-syntax deleted file mode 120000 index f70cbe6e..00000000 --- a/packages/site/snapshots/latest/mosaic/author/markdown-syntax +++ /dev/null @@ -1 +0,0 @@ -markdown-syntax.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/markdown-syntax.mdx b/packages/site/snapshots/latest/mosaic/author/markdown-syntax.mdx deleted file mode 100644 index 2b64d365..00000000 --- a/packages/site/snapshots/latest/mosaic/author/markdown-syntax.mdx +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Markdown Syntax -layout: DetailTechnical -sidebar: - label: Markdown Syntax - groupLabel: Markdown Syntax - priority: 5 -lastModified: 1700475661338 -fullPath: /mosaic/author/markdown-syntax.mdx -route: /mosaic/author/markdown-syntax -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 1 min read - minutes: 0.52 - time: 31200 - words: 104 -tableOfContents: - - depth: 2 - level: 0 - id: mosaic-standard-components - text: Mosaic Standard Components - - depth: 2 - level: 0 - id: referencing-frontmatter - text: Referencing Frontmatter - - depth: 2 - level: 0 - id: configuring-supported-components - text: Configuring Supported components -navigation: - prev: - title: Author - route: /mosaic/author/index - next: - title: Frontmatter - route: /mosaic/author/frontmatter -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Out of the box, Mosaic supports documents written in [MDX](https://mdxjs.com/) which allows React components to be embedded within the [basic syntax](https://www.markdownguide.org/basic-syntax/) outlined in the original Markdown design document. - -In addition to the basic markdown syntax, the MDX processor used by Mosaic has been configured to support additional markdown syntax and features: - -* [GitHub flavored markdown (gfm)](https://mdxjs.com/guides/gfm/) -* [Frontmatter](./frontmatter) - -## Mosaic Standard Components - -All components that comprise the `components` export from `@jpmorganchase/mosaic-site-components` package are available to use out of the box in your documents. - -This includes components for all standard markdown syntax and additional components like `Callout` and `Tile`. - -## Referencing Frontmatter - -Frontmatter values can be embedded into the page using the `meta` object. See [frontmatter](./frontmatter#accessing-frontmatter-in-content) for more information. - -## Configuring Supported components - -TODO diff --git a/packages/site/snapshots/latest/mosaic/author/refs b/packages/site/snapshots/latest/mosaic/author/refs deleted file mode 120000 index d01c31d6..00000000 --- a/packages/site/snapshots/latest/mosaic/author/refs +++ /dev/null @@ -1 +0,0 @@ -refs.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/refs.mdx b/packages/site/snapshots/latest/mosaic/author/refs.mdx deleted file mode 100644 index 15b51145..00000000 --- a/packages/site/snapshots/latest/mosaic/author/refs.mdx +++ /dev/null @@ -1,346 +0,0 @@ ---- -title: Refs -layout: DetailTechnical -sidebar: - label: Refs - groupLabel: Refs - priority: 3 -data: - authorRef: Hello from Author page - modes: - - active - - snapshot-file - - snapshot-s3 - sidebarPriority: 3 -lastModified: 1700475661338 -fullPath: /mosaic/author/refs.mdx -route: /mosaic/author/refs -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 4 min read - minutes: 3.075 - time: 184500 - words: 615 -tableOfContents: - - depth: 2 - level: 0 - id: local-refs-in-schema-reference - text: Local refs (In-schema reference) - - depth: 2 - level: 0 - id: remote-refs-cross-schema-reference - text: Remote Refs (Cross-schema reference) - - depth: 2 - level: 0 - id: advanced - text: Advanced - - depth: 3 - level: 1 - id: output - text: Output - - depth: 3 - level: 1 - id: output-with-mosaic-components - text: Output with Mosaic Components - - depth: 2 - level: 0 - id: setting-refs-using-plugins - text: Setting Refs using Plugins - - depth: 3 - level: 1 - id: create-new-refs - text: Create new refs - - depth: 3 - level: 1 - id: existing-refs - text: Existing refs - - depth: 3 - level: 1 - id: create-global-refs - text: Create global refs -navigation: - prev: - title: Aliases - route: /mosaic/author/aliases - next: - title: Tags - route: /mosaic/author/tags -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Refs are a very powerful feature of Mosaic documents that use [JSON References](https://json-spec.readthedocs.io/reference.html) to reference -a property from the page frontmatter or frontmatter of other pages. - -The key concept is that of a JSON pointer which takes the form **A**#**B** where: - -* **A** is the relative path from the current schema to a target schema. If A is empty, the reference is to a type or property in the same schema, an in-schema reference. Otherwise, the reference is to a different schema, a cross-schema reference. -* **B** is the complete path from the root of the schema to a type or property in the schema. If # in not included or B is empty, the reference is to an entire schema. - -To translate this for our purposes: - -* **A** is the relative path to a file in the filesystem. -* **B** is the path to a property in the frontmatter of the file. - -It's probably better explained with examples... - -## Local refs (In-schema reference) - -It is possible to reference a page's own frontmatter to avoid duplication: - -``` ---- -title: Refs -layout: DetailTechnical -sidebar: - priority: 3 -data: - sidebarPriority: - $ref: '#/sidebar/priority' ---- -``` - -This page you are reading right now has a sidebar priority of **{meta.data.sidebarPriority}**. - -The value of `data.sidebarPriority` comes from `sidebar.priority` in the frontmatter. - - - Notice that because we don't specify a path before the `#` in the ref we need to put the whole - value inside quotes. - - -## Remote Refs (Cross-schema reference) - -It is possible to reference frontmatter of other pages. Again this helps avoid duplication but the real power is using refs to build the data model. See [advanced](#advanced) for more information. - -The [index](./index) page of the Author section has this frontmatter: - -``` ---- -title: Author -layout: DetailTechnical -sidebar: - priority: 3 -data: - exampleRefData: Hello from Author page ---- -``` - -This page you are currently looking at is referencing the `data.exampleRefData` in it's frontmatter like this: - -``` ---- -title: Refs -layout: DetailTechnical -sidebar: - priority: 3 -data: - authorRef: - $ref: ./#/data/exampleRefData ---- -``` - -I can then use the data and embed it in this page like this: - -``` -{meta.data.authorRef} -``` - -And here it is: {meta.data.authorRef} - - - Notice that we did not need to put `/index` in the ref since index pages are resolved - automatically. - - -## Advanced - -You have had a taste of the power and want to know more? OK, lets reference and then list out all the mosaic modes: - -
      - {meta.data.modes.map(mode => ( -
    • {mode}
    • - ))} -
    - -The Modes [index](../configure/modes/index) page has this frontmatter: - -``` ---- -title: Modes of operation -layout: DetailTechnical -sidebar: - priority: 4 -data: - modes: - $ref: ./*#/title ---- -``` - -The ref here is essentially using a wildcard (the \*) to grab the `mode` property from the frontmatter of every page in the modes folder. - -We can reference that data just like before: - -``` ---- -title: Refs -layout: DetailTechnical -sidebar: - priority: 3 -data: - modes: - $ref: ../configure/modes#/data/modes ---- -``` - -### Output - -With the code below, the referenced data can be embedded in a page. - -``` -
      - {meta.data.modes.map(mode => ( -
    • {mode}
    • - ))} -
    -``` - -### Output with Mosaic Components - -You can use Mosaic components with referenced data as well. Below we are using the `Tiles` and `TileContent` components. - - - {meta.data.modes.map(mode => ( - - ))} - - -``` - - {meta.data.modes.map(mode => ( - - ))} - -``` - -## Setting Refs using Plugins - -Mosaic plugins can create new refs, create new *global* refs and see existing refs created by the page or other plugins. This is achieved using a special `config` property available in the plugin helpers. - -### Create new refs - -Use the `config.setRef` function from the helpers provided to plugin lifecycle events. You need to provide - -* The file/fullpath to write the ref to -* The path to the ptoperty where the ref will be applied -* The value of the ref, which can use wildcards - -For example, the following would add a property to pages named `titles`. The value is the title of all pages in the **same** directory as the current page - -``` - async $afterSource(pages, { config }) { - for (const page of pages) { - config.setRef(page.fullPath, ['titles', '$ref'], `**#/title`); - } - return pages; - } -``` - - - When setting the property path the last string must be `$ref` otherwise you're not creating a ref - that will be resolved by the RefPlugin. - - -### Existing refs - -To view refs that already exist you can use `config.data.refs`. For example to see all refs for a page: - -``` - config.data.refs[fullPathToPage] -``` - -### Create global refs - -Global refs are similar to regular refs except they do not pre-resolve. This means they are resolved when the referenced file is read and the global mosaic filesystem, made up of multiple sources, is used rather than the filesystem of a single source. diff --git a/packages/site/snapshots/latest/mosaic/author/shared-config.json b/packages/site/snapshots/latest/mosaic/author/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/author/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/sidebar.json b/packages/site/snapshots/latest/mosaic/author/sidebar.json deleted file mode 100644 index 10e7d8e5..00000000 --- a/packages/site/snapshots/latest/mosaic/author/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/author/index","kind":"data","fullPath":"/mosaic/author/index.mdx","name":"Author","priority":999,"data":{"level":2,"link":"/mosaic/author/index"}},{"id":"/mosaic/author/markdown-syntax","kind":"data","fullPath":"/mosaic/author/markdown-syntax.mdx","name":"Markdown Syntax","priority":5,"data":{"level":2,"link":"/mosaic/author/markdown-syntax"}},{"id":"/mosaic/author/frontmatter","kind":"data","fullPath":"/mosaic/author/frontmatter.mdx","name":"Frontmatter","priority":4,"data":{"level":2,"link":"/mosaic/author/frontmatter"}},{"id":"/mosaic/author/aliases","kind":"data","fullPath":"/mosaic/author/aliases.mdx","name":"Aliases","priority":3,"data":{"level":2,"link":"/mosaic/author/aliases"}},{"id":"/mosaic/author/refs","kind":"data","fullPath":"/mosaic/author/refs.mdx","name":"Refs","priority":3,"data":{"level":2,"link":"/mosaic/author/refs"}},{"id":"/mosaic/author/tags","kind":"data","fullPath":"/mosaic/author/tags.mdx","name":"Tags","priority":3,"data":{"level":2,"link":"/mosaic/author/tags"}},{"id":"/mosaic/author/fragments","kind":"data","fullPath":"/mosaic/author/fragments.mdx","name":"Fragments","priority":2,"data":{"level":2,"link":"/mosaic/author/fragments"}},{"id":"/mosaic/author/ui-components","kind":"data","fullPath":"/mosaic/author/ui-components.mdx","name":"UI Components","priority":2,"data":{"level":2,"link":"/mosaic/author/ui-components"}},{"id":"/mosaic/author/sidebars","kind":"data","fullPath":"/mosaic/author/sidebars.mdx","name":"Sidebar Configuration","data":{"level":2,"link":"/mosaic/author/sidebars"}}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/sidebars b/packages/site/snapshots/latest/mosaic/author/sidebars deleted file mode 120000 index 7d9a9c87..00000000 --- a/packages/site/snapshots/latest/mosaic/author/sidebars +++ /dev/null @@ -1 +0,0 @@ -sidebars.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/sidebars.mdx b/packages/site/snapshots/latest/mosaic/author/sidebars.mdx deleted file mode 100644 index 5aa22a81..00000000 --- a/packages/site/snapshots/latest/mosaic/author/sidebars.mdx +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: Sidebar Configuration -layout: DetailTechnical -lastModified: 1718016109332 -fullPath: /mosaic/author/sidebars.mdx -route: /mosaic/author/sidebars -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -sidebar: - label: Sidebar Configuration - groupLabel: Sidebar Configuration -readingTime: - text: 3 min read - minutes: 2.435 - time: 146100 - words: 487 -tableOfContents: - - depth: 2 - level: 0 - id: sidebar-frontmatter - text: Sidebar frontmatter - - depth: 3 - level: 1 - id: sidebar-group-label - text: Sidebar group label - - depth: 3 - level: 1 - id: sidebar-label - text: Sidebar label - - depth: 3 - level: 1 - id: sidebar-priority - text: Sidebar priority - - depth: 2 - level: 0 - id: sidebar-sort-configuration - text: Sidebar Sort Configuration - - depth: 3 - level: 1 - id: newsletters-example - text: Newsletters Example -navigation: - prev: - title: UI Components - route: /mosaic/author/ui-components -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Sidebar data is generated by the the [Sidebar Plugin](../configure/plugins/sidebar-plugin) which by default uses alphabetical ordering of page names to order the sidebar. - -## Sidebar frontmatter - -A page can add a `sidebar` property to its [frontmatter](./frontmatter) to change the ordering of a sidebar and what title is used for a page in the sidebar. - -To rearrange pages in the sidebar or to apply a different label to a page you can specify the following in the page frontmatter: - -### Sidebar group label - -A sidebar group when expanded will reveal the pages contained within the group. -Each group has a default page, `index.mdx`, which is the default for the group and any breadcrumb link. - -The`index.mdx` can define a `groupLabel` which defines the name of the sidebar group. -If no *groupLabel* is defined, sidebar group labels will be defined by either *label* or *title*. - -To specify the label of the default page, refer to \[Sidebar label]\(./Sidebar label) - -```yaml ---- -title: Sidebar Configuration -layout: DetailTechnical -sidebar: - groupLabel: Group label ---- -``` - -### Sidebar label - -By default the *title* of a page is used in the sidebar as the label but this can be changed to another label using page frontmatter. - -```yaml ---- -title: Sidebar Configuration -layout: DetailTechnical -sidebar: - label: A New Label ---- -``` - -### Sidebar priority - -Sidebar priority is a number used to sort the sidebar. Higher the priority pages appear first in the sidebar ordering. - -```yaml ---- -title: Sidebar Configuration -layout: DetailTechnical -sidebar: - priority: 10 ---- -``` - -## Sidebar Sort Configuration - -Sidebar sort configuration allows the sidebar to be sorted using a more sophisticated approach and only needs to be applied to the `index` page of the directory you want to sort. - - - Priority takes precedence over sort configuration so it can be used to override the sort - configuration if required. - - -You must add the sidebar sort configuration to the `sharedConfig.sidebar.sort` property of an **index** page e.g., - -```yaml -sharedConfig: - sidebar: - sort: - field: data/title - dataType: string - arrange: desc -``` - -The properties of the sort configuration are described in the table below: - -| Property | Description | Required | -| -------- | ------------------------------------------------------------------------------------------ | -------- | -| field | the path, separated by `/`, used to find the value in page frontmatter you wish to sort by | Yes | -| dataType | is the type of the value. Can be a `string` or `number` or `date`. | Yes | -| arrange | `asc` or `desc` order | yes | - -### Newsletters Example - -Let's say you have a *Newsletters* directory and each page in the directory represents a newsletter. You wish to sort the newsletter sidebar by publication date in descending order (newest first). - -One way to do this is to edit each page and add a `priority` which is manually incremented every time a news newsletter is added. Alternatively you can add the following sort configuration to the newsletters index page: - -```yaml -sharedConfig: - sidebar: - sort: - field: data/publicationDate - dataType: date - arrange: desc -``` - -This will use the `data.publicationDate` property in each newsletter to sort the newsletters in the sidebar. The publication date is converted to a `date` by the Sidebar Plugin to ensure accurate ordering. There is now no need to increment a priority when a new newsletter is added. - -#### Example newsletter page frontmatter: - -```yaml ---- -title: Newsletter 01 Jan 2023 -description: Newsletter 01 Jan 2023 -data: - title: - $ref: '#/title' - link: /newsletters/2023-01-01 - publicationDate: '2023-01-01' ---- -``` diff --git a/packages/site/snapshots/latest/mosaic/author/tags b/packages/site/snapshots/latest/mosaic/author/tags deleted file mode 120000 index 8d8ebdb4..00000000 --- a/packages/site/snapshots/latest/mosaic/author/tags +++ /dev/null @@ -1 +0,0 @@ -tags.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/tags.mdx b/packages/site/snapshots/latest/mosaic/author/tags.mdx deleted file mode 100644 index 2aa9991e..00000000 --- a/packages/site/snapshots/latest/mosaic/author/tags.mdx +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Tags -layout: DetailTechnical -sidebar: - label: Tags - groupLabel: Tags - priority: 3 -data: - in-stock: - - name: Product A - out-of-stock: - - name: Product B -lastModified: 1700475661339 -fullPath: /mosaic/author/tags.mdx -route: /mosaic/author/tags -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 1 min read - minutes: 0.855 - time: 51300 - words: 171 -tableOfContents: - - depth: 2 - level: 0 - id: tagging-a-page - text: Tagging a page - - depth: 2 - level: 0 - id: subscribing-to-a-tag - text: Subscribing to a tag - - depth: 3 - level: 1 - id: example - text: Example -navigation: - prev: - title: Refs - route: /mosaic/author/refs - next: - title: Fragments - route: /mosaic/author/fragments -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Tags are very similar to [Refs](./refs) with one very important distinction: Tags work **across multiple sources**. - -In Mosaic, each source has it's own filesystem which are then merged together to form a union of all source filesystems. It is in this union filesystem that tags are applied and not to the individual source filesystem that the tag was defined on. - - - Tags are slower to apply than refs. Multiple sources need to run and update before tagged data - will be resolved. If possible, stick to refs and only use tags when dealing with multiple sources. - - -## Tagging a page - -To tag a page, add a `tags` property to the page frontmatter. For example, the Product A page is tagged with "in-stock": - -``` ---- -title: Product A -description: Mosaic Product A -layout: ProductDiscover -tags: - - in-stock -data: - name: - $ref: '#/title' ---- -``` - -`tags` is always an array - -## Subscribing to a tag - -To subscribe to a tag, use the `$tag` property. For example, the Products page has subscribed to the `data` property of pages tagged with `in-stock`. - -``` ---- -title: Products -data: - in-stock: - $tag: in-stock#/data ---- -``` - - - A `$tag` can provide a path to a specific piece of metadata on tagged pages, just like a ref. - - -### Example - -This page has subscribed to `in-stock` and `out-of-stock` tags and is displaying them using 2 Mosaic `PageFilterView` components. - -Both the Product A and Product B pages are part of a different source than this page. - -#### In Stock - - - -#### Out of Stock - - diff --git a/packages/site/snapshots/latest/mosaic/author/ui-components b/packages/site/snapshots/latest/mosaic/author/ui-components deleted file mode 120000 index 2dc3fd50..00000000 --- a/packages/site/snapshots/latest/mosaic/author/ui-components +++ /dev/null @@ -1 +0,0 @@ -ui-components.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/author/ui-components.mdx b/packages/site/snapshots/latest/mosaic/author/ui-components.mdx deleted file mode 100644 index aca708ce..00000000 --- a/packages/site/snapshots/latest/mosaic/author/ui-components.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: UI Components -layout: DetailTechnical -sidebar: - label: UI Components - groupLabel: UI Components - priority: 2 -lastModified: 1700475661339 -fullPath: /mosaic/author/ui-components.mdx -route: /mosaic/author/ui-components -breadcrumbs: - - label: Author - path: /mosaic/author/index - id: /mosaic/author/index.mdx -readingTime: - text: 1 min read - minutes: 0.005 - time: 300 - words: 1 -tableOfContents: [] -navigation: - prev: - title: Fragments - route: /mosaic/author/fragments - next: - title: Sidebar Configuration - route: /mosaic/author/sidebars -sidebarData: - - id: /mosaic/author/index - kind: data - fullPath: /mosaic/author/index.mdx - name: Author - priority: 999 - data: - level: 2 - link: /mosaic/author/index - - id: /mosaic/author/markdown-syntax - kind: data - fullPath: /mosaic/author/markdown-syntax.mdx - name: Markdown Syntax - priority: 5 - data: - level: 2 - link: /mosaic/author/markdown-syntax - - id: /mosaic/author/frontmatter - kind: data - fullPath: /mosaic/author/frontmatter.mdx - name: Frontmatter - priority: 4 - data: - level: 2 - link: /mosaic/author/frontmatter - - id: /mosaic/author/aliases - kind: data - fullPath: /mosaic/author/aliases.mdx - name: Aliases - priority: 3 - data: - level: 2 - link: /mosaic/author/aliases - - id: /mosaic/author/refs - kind: data - fullPath: /mosaic/author/refs.mdx - name: Refs - priority: 3 - data: - level: 2 - link: /mosaic/author/refs - - id: /mosaic/author/tags - kind: data - fullPath: /mosaic/author/tags.mdx - name: Tags - priority: 3 - data: - level: 2 - link: /mosaic/author/tags - - id: /mosaic/author/fragments - kind: data - fullPath: /mosaic/author/fragments.mdx - name: Fragments - priority: 2 - data: - level: 2 - link: /mosaic/author/fragments - - id: /mosaic/author/ui-components - kind: data - fullPath: /mosaic/author/ui-components.mdx - name: UI Components - priority: 2 - data: - level: 2 - link: /mosaic/author/ui-components - - id: /mosaic/author/sidebars - kind: data - fullPath: /mosaic/author/sidebars.mdx - name: Sidebar Configuration - data: - level: 2 - link: /mosaic/author/sidebars ---- -# {meta.title} - -Todo... diff --git a/packages/site/snapshots/latest/mosaic/configure/admin/index b/packages/site/snapshots/latest/mosaic/configure/admin/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/admin/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/admin/index.mdx b/packages/site/snapshots/latest/mosaic/configure/admin/index.mdx deleted file mode 100644 index 89e49758..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/admin/index.mdx +++ /dev/null @@ -1,434 +0,0 @@ ---- -title: Admin -layout: DetailTechnical -sidebar: - label: Admin - groupLabel: Admin - priority: 3 -lastModified: 1700475661339 -fullPath: /mosaic/configure/admin/index.mdx -route: /mosaic/configure/admin/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Admin - path: /mosaic/configure/admin/index - id: /mosaic/configure/admin/index.mdx -readingTime: - text: 1 min read - minutes: 0.625 - time: 37500 - words: 125 -tableOfContents: - - depth: 2 - level: 0 - id: endpoints - text: Endpoints -navigation: - prev: - title: Custom Components - route: /mosaic/configure/theme/custom-components - group: Theming Your Site - next: - title: Sources - route: /mosaic/configure/sources/index - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -There are several admin urls exposed by Mosaic that provide an insight into how the filesystem has been configured and a way to remotely manage sources. - -## Endpoints - -| Endpoint | Method | Description | Params | -| -------------------------- | ------ | -------------------------------------------- | ---------------------- | -| `/_mosaic_/config` | GET | Returns the JSON from the Mosaic config file | n/a | -| `/_mosaic_/content/dump` | GET | Returns the entire mosaic filesystem as JSON | n/a | -| `/_mosaic_/sources/list` | GET | Returns a collection of active sources | n/a | -| `/_mosaic_/sources/add` | POST | Adds the source | definition & isPreview | -| `/_mosaic_/source/stop` | PUT | Stops the source with the provided name | name | -| `/_mosaic_/source/restart` | PUT | Restarts the source with the provided name | name | diff --git a/packages/site/snapshots/latest/mosaic/configure/admin/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/admin/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/admin/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/index b/packages/site/snapshots/latest/mosaic/configure/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/index.mdx b/packages/site/snapshots/latest/mosaic/configure/index.mdx deleted file mode 100644 index cd876b81..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/index.mdx +++ /dev/null @@ -1,412 +0,0 @@ ---- -title: Configure -layout: DetailTechnical -sidebar: - label: Configure - groupLabel: Configure - priority: 4 -lastModified: 1700475661339 -fullPath: /mosaic/configure/index.mdx -route: /mosaic/configure/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx -readingTime: - text: 1 min read - minutes: 0.19 - time: 11400 - words: 38 -tableOfContents: [] -navigation: - next: - title: Modes of operation - route: /mosaic/configure/modes/index - group: Modes of operation -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Mosaic is a tool which retrieves, formats and combines documentation pages from any number of different external sources (such as GitHub repositories, local disks or REST endpoints), into a single filesystem for you to use in your websites. diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight deleted file mode 120000 index cd722d86..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight +++ /dev/null @@ -1 +0,0 @@ -detail-highlight.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight.mdx deleted file mode 100644 index d7bdb00f..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-highlight.mdx +++ /dev/null @@ -1,444 +0,0 @@ ---- -title: Detail Highlight -layout: DetailTechnical -description: Detail Highlight layout example -lastModified: 1700475661340 -fullPath: /mosaic/configure/layouts/detail-highlight.mdx -route: /mosaic/configure/layouts/detail-highlight -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Detail Highlight - groupLabel: Detail Highlight -readingTime: - text: 1 min read - minutes: 0.215 - time: 12900 - words: 43 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry -navigation: - prev: - title: Layouts - route: /mosaic/configure/layouts/index - group: Layouts - next: - title: Detail Overview - route: /mosaic/configure/layouts/detail-overview - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Detail Highlight - -Initialize with `layout: DetailHighlight` in your page's frontmatter. - -This layout is used to promote, share insights, and statistics for a line of business. - -This layout should be used for pages with only one level of nesting, therefore, pagination is not eligible for this -layout. - -## Page geometry - -

    - - - - - - - - - - - -

    diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview deleted file mode 120000 index 62bd5bc1..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview +++ /dev/null @@ -1 +0,0 @@ -detail-overview.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview.mdx deleted file mode 100644 index 5dbf26e4..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-overview.mdx +++ /dev/null @@ -1,535 +0,0 @@ ---- -title: Detail Overview -layout: DetailTechnical -description: Detail Overview layout example -lastModified: 1700475661340 -fullPath: /mosaic/configure/layouts/detail-overview.mdx -route: /mosaic/configure/layouts/detail-overview -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Detail Overview - groupLabel: Detail Overview -readingTime: - text: 3 min read - minutes: 2.865 - time: 171900 - words: 573 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry - - depth: 2 - level: 0 - id: other-layouts - text: Other Layouts - - depth: 2 - level: 0 - id: filler-content - text: Filler content - - depth: 2 - level: 0 - id: a-sub-heading - text: A sub heading - - depth: 3 - level: 1 - id: third-level-heading - text: Third-level heading - - depth: 2 - level: 0 - id: id-sint-deserunt-laborum-mollit-id-excepteur - text: Id sint deserunt laborum mollit id excepteur - - depth: 2 - level: 0 - id: cillum-amet-irure-ut-tempor-tempor-culpa-dolore-sint - text: Cillum amet irure ut tempor tempor culpa dolore sint. -navigation: - prev: - title: Detail Highlight - route: /mosaic/configure/layouts/detail-highlight - group: Layouts - next: - title: Detail Technical - route: /mosaic/configure/layouts/detail-technical - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Detail Overview - -Initialize with `layout: DetailOverview` in your page's frontmatter. - -This layout is used to present an overview of expected documentation, statisitics, and ability to -navigate to more documents. - -Avoid making this page too long. If it gets too long, we recommend the [Detail Technical](./detail-technical) template. - -## Page geometry - -

    - - - - - - - - - - - -

    - -## Other Layouts - -* [Detail Highlight](/developer/site/style-guide/layouts/detail-highlight) -* [Detail Technical](/developer/site/style-guide/layouts/detail-technical) -* [Landing](/developer/site/style-guide/layouts/landing) -* [Product Discover](/developer/site/style-guide/layouts/product-discover) -* [Product Preview](/developer/site/style-guide/layouts/product-preview) - -*** - -## Filler content - -Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua. -Officia officia deserunt consequat ullamco irure. Excepteur deserunt esse occaecat ex aute. Duis do -do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. Non irure magna amet -ullamco culpa esse dolore nostrud. Id ea id ipsum incididunt do velit aliquip fugiat do non -consequat. - -## A sub heading - -Deserunt sunt pariatur mollit dolor eiusmod. Anim sunt officia cillum anim. Laborum ullamco -consectetur elit dolore quis laborum. Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo. -Cupidatat cillum ea consequat anim. Duis voluptate nulla veniam labore quis tempor. - -Commodo reprehenderit excepteur amet aliquip cillum veniam ad. Ullamco proident deserunt laboris -duis laborum consequat laboris est eu enim nulla. Mollit velit consectetur ea aliqua consectetur -mollit eu ex deserunt. Aute excepteur exercitation esse proident excepteur Lorem. Quis cillum -occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat. - -### Third-level heading - -Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. Consectetur est voluptate -excepteur non dolore consequat fugiat deserunt. Est nostrud est ea irure reprehenderit commodo -nostrud nulla tempor ipsum tempor sit id exercitation. Sunt reprehenderit officia anim id quis -pariatur velit cillum incididunt officia sunt. Ullamco ipsum cillum minim deserunt eiusmod nostrud -irure et nulla laborum ipsum ipsum incididunt. Voluptate reprehenderit in occaecat ipsum nulla -excepteur excepteur mollit laboris id ad laborum do. Qui in laborum nostrud quis occaecat proident -ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation -exercitation excepteur ea ex. Proident elit incididunt incididunt ad adipisicing quis deserunt sint -laboris deserunt ipsum culpa est. Id do ex duis Lorem exercitation amet reprehenderit. Voluptate qui -tempor qui sit minim sit qui ea id dolor excepteur. Laborum elit excepteur enim sunt consequat -officia cillum. Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim -duis. Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. Eu dolore sit non incididunt. -Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea. -Commodo et fugiat velit dolore consectetur. - -Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim -est. Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim -velit laboris. Pariatur elit amet nostrud tempor nostrud ea. Exercitation do aliquip nisi amet id. -Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui. - -## Id sint deserunt laborum mollit id excepteur - -mollit excepteur labore labore dolor. Sit cupidatat nostrud ad consequat amet excepteur id sunt -labore adipisicing non irure. Fugiat exercitation laborum officia minim duis dolor do officia Lorem -cillum excepteur. Sint elit mollit duis sit ad commodo. - -## Cillum amet irure ut tempor tempor culpa dolore sint. - -Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. Consectetur enim id -sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. Veniam proident dolore irure -incididunt deserunt pariatur quis. Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod -dolor eiusmod ullamco. Fugiat fugiat eiusmod occaecat nulla consequat pariatur. - -Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. Non culpa magna -nisi enim eu nulla esse laborum amet ipsum. Eu consectetur labore do id occaecat adipisicing. diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical deleted file mode 120000 index 8bfca112..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical +++ /dev/null @@ -1 +0,0 @@ -detail-technical.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical.mdx deleted file mode 100644 index 6c78141c..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/detail-technical.mdx +++ /dev/null @@ -1,539 +0,0 @@ ---- -title: Detail Technical -layout: DetailTechnical -description: Detail Technical layout example -lastModified: 1700475661340 -fullPath: /mosaic/configure/layouts/detail-technical.mdx -route: /mosaic/configure/layouts/detail-technical -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Detail Technical - groupLabel: Detail Technical -readingTime: - text: 3 min read - minutes: 2.855 - time: 171300 - words: 571 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry - - depth: 2 - level: 0 - id: other-layouts - text: Other Layouts - - depth: 2 - level: 0 - id: filler-content - text: Filler content - - depth: 2 - level: 0 - id: a-sub-heading - text: A sub heading - - depth: 3 - level: 1 - id: third-level-heading - text: Third-level heading - - depth: 2 - level: 0 - id: id-sint-deserunt-laborum-mollit-id-excepteur - text: Id sint deserunt laborum mollit id excepteur - - depth: 2 - level: 0 - id: cillum-amet-irure-ut-tempor-tempor-culpa-dolore-sint - text: Cillum amet irure ut tempor tempor culpa dolore sint. -navigation: - prev: - title: Detail Overview - route: /mosaic/configure/layouts/detail-overview - group: Layouts - next: - title: Landing Layout - route: /mosaic/configure/layouts/landing - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Detail Technical - -Initialize with `layout: DetailTechnical` in your page's frontmatter. - -This layout is used for longer, technical, detailed content about the product. - -This layout shows less marketing-type visuals and more visual of diagrams, screenshots, and code -snippets. - -This page can be short or very lengthy. - -## Page geometry - -

    - - - - - - - - - - - - - -

    - -## Other Layouts - -* [Detail Highlight](/developer/site/style-guide/layouts/detail-highlight) -* [Detail Overview](/developer/site/style-guide/layouts/detail-overview) -* [Landing](/developer/site/style-guide/layouts/landing) -* [Product Discover](/developer/site/style-guide/layouts/product-discover) -* [Product Preview](/developer/site/style-guide/layouts/product-preview) - -*** - -## Filler content - -Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua. -Officia officia deserunt consequat ullamco irure. Excepteur deserunt esse occaecat ex aute. Duis do -do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. Non irure magna amet -ullamco culpa esse dolore nostrud. Id ea id ipsum incididunt do velit aliquip fugiat do non -consequat. - -## A sub heading - -Deserunt sunt pariatur mollit dolor eiusmod. Anim sunt officia cillum anim. Laborum ullamco -consectetur elit dolore quis laborum. Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo. -Cupidatat cillum ea consequat anim. Duis voluptate nulla veniam labore quis tempor. - -Commodo reprehenderit excepteur amet aliquip cillum veniam ad. Ullamco proident deserunt laboris -duis laborum consequat laboris est eu enim nulla. Mollit velit consectetur ea aliqua consectetur -mollit eu ex deserunt. Aute excepteur exercitation esse proident excepteur Lorem. Quis cillum -occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat. - -### Third-level heading - -Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. Consectetur est voluptate -excepteur non dolore consequat fugiat deserunt. Est nostrud est ea irure reprehenderit commodo -nostrud nulla tempor ipsum tempor sit id exercitation. Sunt reprehenderit officia anim id quis -pariatur velit cillum incididunt officia sunt. Ullamco ipsum cillum minim deserunt eiusmod nostrud -irure et nulla laborum ipsum ipsum incididunt. Voluptate reprehenderit in occaecat ipsum nulla -excepteur excepteur mollit laboris id ad laborum do. Qui in laborum nostrud quis occaecat proident -ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation -exercitation excepteur ea ex. Proident elit incididunt incididunt ad adipisicing quis deserunt sint -laboris deserunt ipsum culpa est. Id do ex duis Lorem exercitation amet reprehenderit. Voluptate qui -tempor qui sit minim sit qui ea id dolor excepteur. Laborum elit excepteur enim sunt consequat -officia cillum. Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim -duis. Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. Eu dolore sit non incididunt. -Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea. -Commodo et fugiat velit dolore consectetur. - -Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim -est. Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim -velit laboris. Pariatur elit amet nostrud tempor nostrud ea. Exercitation do aliquip nisi amet id. -Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui. - -## Id sint deserunt laborum mollit id excepteur - -mollit excepteur labore labore dolor. Sit cupidatat nostrud ad consequat amet excepteur id sunt -labore adipisicing non irure. Fugiat exercitation laborum officia minim duis dolor do officia Lorem -cillum excepteur. Sint elit mollit duis sit ad commodo. - -## Cillum amet irure ut tempor tempor culpa dolore sint. - -Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. Consectetur enim id -sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. Veniam proident dolore irure -incididunt deserunt pariatur quis. Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod -dolor eiusmod ullamco. Fugiat fugiat eiusmod occaecat nulla consequat pariatur. - -Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. Non culpa magna -nisi enim eu nulla esse laborum amet ipsum. Eu consectetur labore do id occaecat adipisicing. diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/index b/packages/site/snapshots/latest/mosaic/configure/layouts/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/index.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/index.mdx deleted file mode 100644 index 0f87bfbc..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/index.mdx +++ /dev/null @@ -1,419 +0,0 @@ ---- -title: Layouts -layout: DetailTechnical -sidebar: - label: Layouts - groupLabel: Layouts - priority: 2 -lastModified: 1700475661341 -fullPath: /mosaic/configure/layouts/index.mdx -route: /mosaic/configure/layouts/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -readingTime: - text: 1 min read - minutes: 0.005 - time: 300 - words: 1 -tableOfContents: [] -navigation: - prev: - title: HTTP Source - route: /mosaic/configure/sources/http-source - group: Sources - next: - title: Detail Highlight - route: /mosaic/configure/layouts/detail-highlight - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Todo... diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/landing b/packages/site/snapshots/latest/mosaic/configure/layouts/landing deleted file mode 120000 index 53483750..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/landing +++ /dev/null @@ -1 +0,0 @@ -landing.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/landing.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/landing.mdx deleted file mode 100644 index f85047e6..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/landing.mdx +++ /dev/null @@ -1,447 +0,0 @@ ---- -title: Landing Layout -layout: DetailTechnical -description: Landing layout example -lastModified: 1700475661341 -fullPath: /mosaic/configure/layouts/landing.mdx -route: /mosaic/configure/layouts/landing -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Landing Layout - groupLabel: Landing Layout -readingTime: - text: 1 min read - minutes: 0.325 - time: 19500 - words: 65 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry -navigation: - prev: - title: Detail Technical - route: /mosaic/configure/layouts/detail-technical - group: Layouts - next: - title: Product Discover Layout - route: /mosaic/configure/layouts/product-discover - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Landing - -Initialize with `layout: Landing` in your page's frontmatter. - -Use this layout as a landing page to show large branded visuals, and high-level content about the -line of business. - -Set the tone and voice for your LOB’s experience. - -Use components that support your content with places to insert visuals, share any stats or an -introduction of LOB’s story. - -Use heading styles to show the grouping of content of a section. - -## Page geometry - -

    - - - - - - - - - -

    diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover b/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover deleted file mode 120000 index 508e3923..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover +++ /dev/null @@ -1 +0,0 @@ -product-discover.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover.mdx deleted file mode 100644 index 16e348ab..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/product-discover.mdx +++ /dev/null @@ -1,443 +0,0 @@ ---- -title: Product Discover Layout -layout: DetailTechnical -description: Product Discover layout -lastModified: 1700475661341 -fullPath: /mosaic/configure/layouts/product-discover.mdx -route: /mosaic/configure/layouts/product-discover -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Product Discover Layout - groupLabel: Product Discover Layout -readingTime: - text: 1 min read - minutes: 0.15 - time: 9000 - words: 30 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry -navigation: - prev: - title: Landing Layout - route: /mosaic/configure/layouts/landing - group: Layouts - next: - title: Product Preview Layout - route: /mosaic/configure/layouts/product-preview - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Product Discover - -Initialize with `layout: ProductDiscover` in your page's frontmatter. - -Use this layout to introduce a product feature with a description and large visual. - -This layout is use for marketing and discovery content. - -## Page geometry - -

    - - - - - - - - - - - -

    diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview b/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview deleted file mode 120000 index 4509da9b..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview +++ /dev/null @@ -1 +0,0 @@ -product-preview.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview.mdx b/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview.mdx deleted file mode 100644 index cfccd70b..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/product-preview.mdx +++ /dev/null @@ -1,441 +0,0 @@ ---- -title: Product Preview Layout -layout: DetailTechnical -description: Product Preview layout -lastModified: 1700475661341 -fullPath: /mosaic/configure/layouts/product-preview.mdx -route: /mosaic/configure/layouts/product-preview -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Layouts - path: /mosaic/configure/layouts/index - id: /mosaic/configure/layouts/index.mdx -sidebar: - label: Product Preview Layout - groupLabel: Product Preview Layout -readingTime: - text: 1 min read - minutes: 0.175 - time: 10500 - words: 35 -tableOfContents: - - depth: 2 - level: 0 - id: page-geometry - text: Page geometry -navigation: - prev: - title: Product Discover Layout - route: /mosaic/configure/layouts/product-discover - group: Layouts - next: - title: Plugins - route: /mosaic/configure/plugins/index - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Layout: Product Preview - -Initialize with `layout: ProductPreview` in your page's frontmatter. - -This layout has been used to introduce a product and showcase their suite of product offerings. - -Use heading styles to show the grouping of content of a section. - -## Page geometry - -

    - - - - - - - - - -

    diff --git a/packages/site/snapshots/latest/mosaic/configure/layouts/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/layouts/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/layouts/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/active b/packages/site/snapshots/latest/mosaic/configure/modes/active deleted file mode 120000 index 81b52f1d..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/active +++ /dev/null @@ -1 +0,0 @@ -active.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/active.mdx b/packages/site/snapshots/latest/mosaic/configure/modes/active.mdx deleted file mode 100644 index 821dea01..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/active.mdx +++ /dev/null @@ -1,464 +0,0 @@ ---- -title: Active mode -mode: active -layout: DetailTechnical -lastModified: 1700475661341 -fullPath: /mosaic/configure/modes/active.mdx -route: /mosaic/configure/modes/active -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Modes of operation - path: /mosaic/configure/modes/index - id: /mosaic/configure/modes/index.mdx -sidebar: - label: Active mode - groupLabel: Active mode -readingTime: - text: 1 min read - minutes: 0.975 - time: 58500 - words: 195 -tableOfContents: - - depth: 2 - level: 0 - id: configuring-your-content-sources - text: Configuring your content sources - - depth: 2 - level: 0 - id: pull-your-local-content - text: Pull your local content - - depth: 2 - level: 0 - id: pull-your-remote-content - text: Pull your remote content -navigation: - prev: - title: Modes of operation - route: /mosaic/configure/modes/index - group: Modes of operation - next: - title: Snapshot file mode - route: /mosaic/configure/modes/snapshot-file - group: Modes of operation -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -In `active` mode content can be *pulled* from heterogeneous data sources and normalized via plugins, to the configured components/theme. -As your content changes, the site will *re-pull* the content and update your site in real-time. - -The standard generated site comes with 2 sources to demonstrate, how 'active' mode work. - -* a local source, which loads content from `./docs` -* a remote source, which loads content from a [sample Github repository](https://github.com/jpmorganchase/mosaic/tree/main/docs) - -## Configuring your content sources - -All content is composed together within a *namespace*. - -A *namespace* is the scope for aggregated content, represented by the root path. -e.g Our sample docs are aggregated into a *namespace* called `mosaic` and served by the user journey `http://localhost:3000/mosaic` - -Mosaic doc sources are defined by a file called `mosaic.config.mjs` - -Here is how that might look for a standard site. - -## Pull your local content - -To tryout local content creation, add a file called`./docs/index.mdx` - -The load `http://localhost:3000/local` - -Each directory should contain an `index.mdx` which is the default page, when a page is loaded without a path - -Now create other pages and subdirectories and explore how Mosaic, builds your user-journeys from your fileset. - -## Pull your remote content - -To tryout remote content creation, your standard site comes pre-configured to load our Mosaic sample docs. - -Edit the `mosaic.config.mjs` and change your `repoUrl` and `branch` to pull content from other repos. diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/index b/packages/site/snapshots/latest/mosaic/configure/modes/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/index.mdx b/packages/site/snapshots/latest/mosaic/configure/modes/index.mdx deleted file mode 100644 index 762f64bc..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/index.mdx +++ /dev/null @@ -1,469 +0,0 @@ ---- -title: Modes of operation -layout: DetailTechnical -sidebar: - label: Modes of operation - groupLabel: Modes of operation - priority: 4 -data: - modes: - - active - - snapshot-file - - snapshot-s3 -lastModified: 1700475661342 -fullPath: /mosaic/configure/modes/index.mdx -route: /mosaic/configure/modes/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Modes of operation - path: /mosaic/configure/modes/index - id: /mosaic/configure/modes/index.mdx -readingTime: - text: 1 min read - minutes: 0.485 - time: 29100 - words: 97 -tableOfContents: - - depth: 2 - level: 0 - id: active-updates - text: Active updates - - depth: 2 - level: 0 - id: static-content - text: Static content - - depth: 3 - level: 1 - id: file-based-snapshots - text: File based snapshots - - depth: 3 - level: 1 - id: s3-based-snapshots - text: S3 based snapshots -navigation: - prev: - title: Configure - route: /mosaic/configure/index - next: - title: Active mode - route: /mosaic/configure/modes/active - group: Modes of operation -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Mosaic can operate in 3 different modes - -* `active` -* `snapshot-file` -* `snapshot-s3` - -## Active updates - -In *active* mode, content updates in real-time. - -*active* mode content is pulled at configured intervals in real-time, as defined by `mosaic.config.mjs`. - -Read the [active](./active) configuration docs. - -## Static content - -Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself. - -In a snapshot mode, the snapshot does update itself. - -### File based snapshots - -In `snapshot-file` mode, immutable snapshots of content are loaded at startup from the local file-system. - -Read the [snapshot-file](./snapshot-file) configuration docs. - -### S3 based snapshots - -In `snapshot-s3` mode, snapshots of content are loaded at startup from a remote S3 bucket. - -Read the [snapshot-s3](./snapshot-s3) configuration docs. diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/modes/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file b/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file deleted file mode 120000 index a3dea6db..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file +++ /dev/null @@ -1 +0,0 @@ -snapshot-file.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file.mdx b/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file.mdx deleted file mode 100644 index 99e86bfd..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-file.mdx +++ /dev/null @@ -1,441 +0,0 @@ ---- -title: Snapshot file mode -mode: snapshot-file -layout: DetailTechnical -lastModified: 1700475661342 -fullPath: /mosaic/configure/modes/snapshot-file.mdx -route: /mosaic/configure/modes/snapshot-file -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Modes of operation - path: /mosaic/configure/modes/index - id: /mosaic/configure/modes/index.mdx -sidebar: - label: Snapshot file mode - groupLabel: Snapshot file mode -readingTime: - text: 1 min read - minutes: 0.32 - time: 19200 - words: 64 -tableOfContents: - - depth: 2 - level: 0 - id: generating-a-snapshot - text: Generating a snapshot -navigation: - prev: - title: Active mode - route: /mosaic/configure/modes/active - group: Modes of operation - next: - title: Snapshot AWS/S3 mode - route: /mosaic/configure/modes/snapshot-s3 - group: Modes of operation -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -In `snapshot-file` mode a local immutable snapshot can be loaded by the site. Typically, the snapshot and the site are -deployed together and upon startup the site can load the snapshot from the local file-system. - -To use `snapshot-file` mode - -``` -export MOSAIC_MODE="snapshot-file" -export MOSAIC_SNAPSHOT_DIR="./snapshot/latest" -``` - -## Generating a snapshot - -To generate a snapshot, run - -``` -yarn gen:snapshot -``` - -Commit the snapshot to your Git repo and push the site+snapshot to your Git repo, within the same branch. diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3 b/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3 deleted file mode 120000 index 561e1f22..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3 +++ /dev/null @@ -1 +0,0 @@ -snapshot-s3.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3.mdx b/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3.mdx deleted file mode 100644 index 70dbfc09..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/modes/snapshot-s3.mdx +++ /dev/null @@ -1,453 +0,0 @@ ---- -title: Snapshot AWS/S3 mode -mode: snapshot-s3 -layout: DetailTechnical -lastModified: 1700475661342 -fullPath: /mosaic/configure/modes/snapshot-s3.mdx -route: /mosaic/configure/modes/snapshot-s3 -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Modes of operation - path: /mosaic/configure/modes/index - id: /mosaic/configure/modes/index.mdx -sidebar: - label: Snapshot AWS/S3 mode - groupLabel: Snapshot AWS/S3 mode -readingTime: - text: 1 min read - minutes: 0.335 - time: 20100 - words: 67 -tableOfContents: - - depth: 2 - level: 0 - id: generating-a-snapshot - text: Generating a snapshot - - depth: 2 - level: 0 - id: uploading-a-snapshot-to-s3 - text: Uploading a snapshot to S3 -navigation: - prev: - title: Snapshot file mode - route: /mosaic/configure/modes/snapshot-file - group: Modes of operation - next: - title: Theming Your Site - route: /mosaic/configure/theme/index - group: Theming Your Site -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -In `snapshot-s3` mode a snapshot can be loaded from a pre-configured AWS S3 bucket. - -To use `snapshot-s3` mode - -``` -> export MOSAIC_MODE="snapshot-s3" -> MOSAIC_S3_BUCKET="" -> MOSAIC_S3_REGION="" -> MOSAIC_S3_ACCESS_KEY_ID="" -> MOSAIC_S3_SECRET_ACCESS_KEY="" -``` - -## Generating a snapshot - -To generate a snapshot, run - -``` -yarn gen:snapshot -``` - -## Uploading a snapshot to S3 - -To upload a snapshot to S3, define the required environment variables and run - -``` -yarn mosaic upload -S -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin deleted file mode 120000 index 755da683..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin +++ /dev/null @@ -1 +0,0 @@ -alias-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin.mdx deleted file mode 100644 index 21fe2c71..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/alias-plugin.mdx +++ /dev/null @@ -1,432 +0,0 @@ ---- -title: $AliasPlugin -layout: DetailOverview -lastModified: 1700475661342 -fullPath: /mosaic/configure/plugins/alias-plugin.mdx -route: /mosaic/configure/plugins/alias-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: $AliasPlugin - groupLabel: $AliasPlugin -readingTime: - text: 1 min read - minutes: 0.415 - time: 24900 - words: 83 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority -navigation: - prev: - title: shouldUpdateNamespaceSources - route: /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - group: Lifecycle Events - next: - title: BreadcrumbsPlugin - route: /mosaic/configure/plugins/breadcrumbs-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `$AliasPlugin` is what powers the [aliases](../../author/aliases) feature of Mosaic. - -It does this by scrapes `aliases` from page metadata and also applies all aliases stored in `config.data.aliases` - -Other plugins can use `setAliases` to apply new aliases, as long as they call it before this plugin has reaches the `$beforeSend` lifecycle event. - -This plugin is added to the plugins collection by Mosaic itself so users do *not* need to include it in their own mosaic config file. - -## Priority - -This plugin runs with a priority of -1 so it runs *after* most other plugins. diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin deleted file mode 120000 index 99617880..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin +++ /dev/null @@ -1 +0,0 @@ -breadcrumbs-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin.mdx deleted file mode 100644 index ddfcd365..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/breadcrumbs-plugin.mdx +++ /dev/null @@ -1,468 +0,0 @@ ---- -title: BreadcrumbsPlugin -layout: DetailOverview -lastModified: 1718016109334 -fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx -route: /mosaic/configure/plugins/breadcrumbs-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: BreadcrumbsPlugin - groupLabel: BreadcrumbsPlugin -readingTime: - text: 1 min read - minutes: 0.96 - time: 57600 - words: 192 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: $AliasPlugin - route: /mosaic/configure/plugins/alias-plugin - group: Plugins - next: - title: BrokenLinksPlugin - route: /mosaic/configure/plugins/broken-links-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `BreadcrumbsPlugin` is responsible for generating the data needed to show breadcrumbs navigation on pages. It then appends this data to a `breadcrumbs` property in the page metadata. - -Should a page already have a `breadcrumbs` property in it's metadata then it is respected and not overwritten. - -If a page has a `sidebar.groupLabel` property in it's metadata then this is used as the label for the breadcrumb, otherwise the page `title` is used. - -When the `BreadcrumbsPlugin` is traversing up directories, it needs to know what page in the directory represents the *breadcrumb* for that directory. It is recommended to use the `index` page for this but the page to use is a configurable option of the breadcrumbs plugin. - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| ------------- | ------------------------------------------------ | -| indexPageName | The page name to use for "directory" breadcrumbs | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the breadcrumbs plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/BreadcrumbsPlugin', - options: { - indexPageName: 'index.mdx' - } - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin deleted file mode 120000 index e3661617..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin +++ /dev/null @@ -1 +0,0 @@ -broken-links-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin.mdx deleted file mode 100644 index 2414b391..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/broken-links-plugin.mdx +++ /dev/null @@ -1,501 +0,0 @@ ---- -title: BrokenLinksPlugin -layout: DetailOverview -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx -route: /mosaic/configure/plugins/broken-links-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: BrokenLinksPlugin - groupLabel: BrokenLinksPlugin -readingTime: - text: 2 min read - minutes: 1.405 - time: 84300 - words: 281 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic - - depth: 2 - level: 0 - id: example-output - text: Example Output -navigation: - prev: - title: BreadcrumbsPlugin - route: /mosaic/configure/plugins/breadcrumbs-plugin - group: Plugins - next: - title: $CodeModPlugin - route: /mosaic/configure/plugins/codemod-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `BrokenLinksPlugin` will identify any broken links in pages Mosaic has pulled into it's filesystem by making use of the [check-links](https://www.npmjs.com/package/check-links) package. - -It can identify broken links between the pages themselves and external links that pages link out to. - -What this plugin is really checking is "liveness" of a link. - -* alive if the URL is reachable (2XX status code) -* dead if the URL is not reachable -* invalid if the URL was parsed as invalid or used an unsupported protocol - - - Links may be "alive", but the **content** of the linked page may not be what you want so continue - to check links show what you expect. - - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| ------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| baseUrl | This is used to calculate the full url for links between pages. It should be the url Mosaic is running on | -| proxyEndpoint | If you are behind a corporate proxy, external link checking will not work unless you specify the proxy endpoint using this option | - -## Adding to Mosaic - -This plugin is **not** included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/BrokenLinksPlugin', - priority: -1, - // Exclude this plugin in builds - runTimeOnly: true, - options: { - baseUrl: process.env.MOSAIC_ACTIVE_MODE_URL || 'http://localhost:8080', - proxyEndpoint: 'http://some-proxy-url' - } - } - // other plugins -]; -``` - - - This plugin needs to be a `runtimeOnly` plugin because it needs Mosaic to be running in order to - make requests to all of the page links. - - -## Example Output - -When a link is found to be broken, you will see the following output in the console: - -``` -@jpmorganchase/mosaic-site:serve: 8080 [Mosaic] Broken links found in /local/docs/publish-site-to-vercel.mdx -@jpmorganchase/mosaic-site:serve: 8080 Link to https://nextjs.org/davie is dead { -@jpmorganchase/mosaic-site:serve: 8080 type: 'link', -@jpmorganchase/mosaic-site:serve: 8080 title: null, -@jpmorganchase/mosaic-site:serve: 8080 url: 'https://nextjs.org/davie', -@jpmorganchase/mosaic-site:serve: 8080 children: [ { type: 'text', value: 'Next.Js', position: [Object] } ], -@jpmorganchase/mosaic-site:serve: 8080 position: { -@jpmorganchase/mosaic-site:serve: 8080 start: { line: 4, column: 20, offset: 36 }, -@jpmorganchase/mosaic-site:serve: 8080 end: { line: 4, column: 55, offset: 71 } -@jpmorganchase/mosaic-site:serve: 8080 } -@jpmorganchase/mosaic-site:serve: 8080 } -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin deleted file mode 120000 index e17d51ac..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin +++ /dev/null @@ -1 +0,0 @@ -codemod-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin.mdx deleted file mode 100644 index 998a50a3..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/codemod-plugin.mdx +++ /dev/null @@ -1,422 +0,0 @@ ---- -title: $CodeModPlugin -layout: DetailOverview -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/codemod-plugin.mdx -route: /mosaic/configure/plugins/codemod-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: $CodeModPlugin - groupLabel: $CodeModPlugin -readingTime: - text: 1 min read - minutes: 0.005 - time: 300 - words: 1 -tableOfContents: - - depth: 2 - level: 0 - id: todo - text: Todo -navigation: - prev: - title: BrokenLinksPlugin - route: /mosaic/configure/plugins/broken-links-plugin - group: Plugins - next: - title: LazyPagePlugin - route: /mosaic/configure/plugins/lazy-page-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -## Todo diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/index b/packages/site/snapshots/latest/mosaic/configure/plugins/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/index.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/index.mdx deleted file mode 100644 index 066ea83e..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/index.mdx +++ /dev/null @@ -1,523 +0,0 @@ ---- -title: Plugins -layout: DetailTechnical -sidebar: - label: Plugins - groupLabel: Plugins - priority: 1 -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/index.mdx -route: /mosaic/configure/plugins/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -readingTime: - text: 2 min read - minutes: 1.92 - time: 115200 - words: 384 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 2 - level: 0 - id: default-plugins - text: Default Plugins - - depth: 2 - level: 0 - id: plugin-errors - text: Plugin errors - - depth: 2 - level: 0 - id: multiple-instances - text: Multiple Instances -navigation: - prev: - title: Product Preview Layout - route: /mosaic/configure/layouts/product-preview - group: Layouts - next: - title: Lifecycle Events - route: /mosaic/configure/plugins/lifecycle/index - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Mosaic Plugins are [lifecycle-based](./lifecycle/index) hooks that are called on *every* source at different stages. You will never need to invoke a lifecycle method directly as their execution is managed by a plugin runner. - -Plugins enable Mosaic to have a lightweight and flexible, modular architecture by encapsulating features and functionality as plugins. - -## Installation - -`yarn add @jpmorganchase/mosaic-plugins` - -## Configuration - -Plugins are added to the `plugins` collection of the mosaic config file. Like [sources](../sources/index), plugins have an options property that can be used to provide plugin specific configuration. - -| Property | Description | Required | -| --------------- | -------------------------------------------------------------------------- | -------- | -| modulePath | The path to the installed plugin module | Yes | -| disabled | Exclude this plugin completely. Defaults to false | No | -| runtimeOnly | Exclude this plugin when generating a snapshot. Defaults to false | No | -| previewDisabled | Exclude this plugin for "preview" sources | No | -| allowMultiple | Allow multiple instances of this plugin to run. | No | -| priority | The importance of this plugin. Plugins with the highest priority run first | No | -| options | Collection of other configuration values | No | - -```js - plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin', - options: {}, - priority: 1 - }, - { - modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin', - options: {} - }, - { - modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin', - options: {} - } -], -``` - - - There is no need to import the plugin module directly. As long as the plugin is installed, Mosaic - will be able to import it using the built-in plugin loader. - - -## Default Plugins - -The following plugins are always included by Mosaic, regardless of whether they are present in the plugins collection of the Mosaic config file: - -1. [$TagPlugin](./tag-plugin) -2. [$AliasPlugin](./alias-plugin) -3. [$CodeModPlugin](./codemod-plugin) -4. [$RefPlugin](./ref-plugin) - -## Plugin errors - -Should a plugin fail, the failure will **not** cause a source to close or for any other plugin to not run. - -Instead plugin errors are tracked by Mosaic and can be viewed in the `pluginErrors` property available on each source listed by the list sources [admin API](../admin/index). - -Plugin errors will be split by lifecycle event and only the lifecycle events used by the loaded plugins used will be shown. - -## Multiple Instances - -By default, Mosaic will only run one instance of a plugin. - -It may be the case that you wish to run the same plugin twice with a slightly different config. To do this, you must have 2 instances listed in the plugins collection and they **both** must set the `allowMultiple` option to `true`. - -For example, the config below runs the [SidebarPlugin](./sidebar-plugin) twice: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin', - options: { rootDirGlob: 'products/product-a' }, - allowMultiple: true - }, - { - modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin', - options: { rootDirGlob: '*/!(product-a)/*' }, - allowMultiple: true - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin deleted file mode 120000 index 6825614c..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin +++ /dev/null @@ -1 +0,0 @@ -lazy-page-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin.mdx deleted file mode 100644 index fec60d8e..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lazy-page-plugin.mdx +++ /dev/null @@ -1,479 +0,0 @@ ---- -title: LazyPagePlugin -layout: DetailOverview -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx -route: /mosaic/configure/plugins/lazy-page-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: LazyPagePlugin - groupLabel: LazyPagePlugin -readingTime: - text: 1 min read - minutes: 0.895 - time: 53700 - words: 179 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: $CodeModPlugin - route: /mosaic/configure/plugins/codemod-plugin - group: Plugins - next: - title: PagesWithoutFileExtPlugin - route: /mosaic/configure/plugins/pages-wthout-extensions-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `LazyPagePlugin` attempts to reduce the size of the Mosaic filesystem in memory by moving page metadata and content to disk. - -It then adds a hook, so that when a page is requested the data is loaded from disk and combined with what is already in the Mosaic filesystem. - - - It must be the very last to run so that it can strip off metadata and content after other plugins - have finished with them. - - -## Priority - -This plugin runs with a priority of -2. Needs to be the last to run for biggest impact. - -## Options - -| Property | Description | -| -------- | ------------------------------------------------------------------------------ | -| cacheDir | The directory to store the cache. Defaults to `.mosaic-lazy-page-plugin-cache` | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/LazyPagePlugin', - // This plugin must be the very last to run, so it can strip off metadata and content after the other - // plugins are done with them - priority: -2, - // Exclude this plugin in builds - runTimeOnly: true, - options: { - cacheDir: '.tmp/.pull-docs-last-page-plugin-cache' - } - } - // other plugins -]; -``` - - - This plugin needs to be a `runtimeOnly` plugin because the goal is to reduce the in-memory - filesystem size. - diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source deleted file mode 120000 index 9cc158a6..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source +++ /dev/null @@ -1 +0,0 @@ -after-source.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source.mdx deleted file mode 100644 index 3db161db..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-source.mdx +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: $afterSource -layout: DetailOverview -sidebar: - label: $afterSource - groupLabel: $afterSource - priority: 5 -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx -route: /mosaic/configure/plugins/lifecycle/after-source -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 2 min read - minutes: 1.015 - time: 60900 - words: 203 -tableOfContents: - - depth: 2 - level: 0 - id: helpers - text: Helpers - - depth: 2 - level: 0 - id: example---log-out-all-page-routes - text: Example - Log out all page routes -navigation: - prev: - title: Lifecycle Events - route: /mosaic/configure/plugins/lifecycle/index - group: Lifecycle Events - next: - title: $beforeSend - route: /mosaic/configure/plugins/lifecycle/before-send - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The first lifecycle event to trigger after receiving pages from a source and runs in a child process. -The pages can safely be mutated and will be reflected in the final filesystem that gets generated. -It **must** return a collection of pages. - -The `$afterSource` lifecycle event is called with: - -* pages - the collection of pages emitted by the source -* helpers - an object with useful methods -* options - the options specified for the plugin in the mosaic config file - -## Helpers - -The helpers provided with this lifecycle event are listed in the table below. - -| Property | Description | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| serialiser | A matching `Serialiser` for serialising/deserialising pages when reading/writing to the filesystem | -| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin | -| pageExtensions | A collection of pageExtensions the source is using | -| ignorePages | A collection of page globs that are to be ignored for this source | -| namespace | The namespace of the source running the plugin | - -## Example - Log out all page routes - -``` -async function $afterSource(pages, { config, ignorePages, pageExtensions }) { - for (const page of pages) { - console.log(page.route); - } - return pages; -} -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update deleted file mode 120000 index 6dbe358d..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update +++ /dev/null @@ -1 +0,0 @@ -after-update.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update.mdx deleted file mode 100644 index 34350b23..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/after-update.mdx +++ /dev/null @@ -1,450 +0,0 @@ ---- -title: afterUpdate -layout: DetailOverview -sidebar: - label: afterUpdate - groupLabel: afterUpdate - priority: 3 -lastModified: 1700475661343 -fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx -route: /mosaic/configure/plugins/lifecycle/after-update -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 2 min read - minutes: 1.395 - time: 83700 - words: 279 -tableOfContents: - - depth: 2 - level: 0 - id: helpers - text: Helpers -navigation: - prev: - title: $beforeSend - route: /mosaic/configure/plugins/lifecycle/before-send - group: Lifecycle Events - next: - title: shouldClearCache - route: /mosaic/configure/plugins/lifecycle/should-clear-cache - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The third lifecycle event to trigger overall and the first to trigger inside the main Mosaic process. - -Calls after the filesystem and symlinks have been reconstructed due to a change to the current source pages. Pages will *not* be cached when read at this stage, to allow for reading content and writing a new copy of it without the cached version taking effect. -This method is safe to use with lazy loading, as the filesystem should return the full page when read. - -The `afterUpdate` lifecycle event is called with: - -* mutableFilesystem - Mutable filesystem instance with all of this source's pages inside (and symlinks re-applied) -* helpers - an object with useful methods -* options - the options specified for the plugin in the mosaic config file - -## Helpers - -The helpers provided with this lifecycle event are listed in the table below. - -| Property | Description | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| serialiser | A matching `Serialiser` for serialising/deserialising pages when reading/writing to the filesystem | -| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. Shared only with this source. | -| globalConfig | An immutable object for reading data from other lifecycle phases of all plugins. Shared across all sources. | -| sharedFilesystem | Mutable filesystem instance independent of any sources. Useful for global pages, like sitemaps | -| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) | -| pageExtensions | A collection of pageExtensions the source is using | -| ignorePages | A collection of page globs that are to be ignored for this source | -| namespace | The namespace of the source running the plugin | diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send deleted file mode 120000 index 2ecba4c5..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send +++ /dev/null @@ -1 +0,0 @@ -before-send.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send.mdx deleted file mode 100644 index 768b0b6b..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/before-send.mdx +++ /dev/null @@ -1,446 +0,0 @@ ---- -title: $beforeSend -layout: DetailOverview -sidebar: - label: $beforeSend - groupLabel: $beforeSend - priority: 4 -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx -route: /mosaic/configure/plugins/lifecycle/before-send -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 1 min read - minutes: 0.95 - time: 57000 - words: 190 -tableOfContents: - - depth: 2 - level: 0 - id: helpers - text: Helpers -navigation: - prev: - title: $afterSource - route: /mosaic/configure/plugins/lifecycle/after-source - group: Lifecycle Events - next: - title: afterUpdate - route: /mosaic/configure/plugins/lifecycle/after-update - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The second lifecycle event to trigger and does so after a filesystem has been built up from the source pages. - -It is the last lifecycle event to run in a source child process before the filesystem is sent to the main Mosaic process and should **not** return a value. - -The `$beforeSend` lifecycle event is called with: - -* mutableFilesystem - Mutable virtual filesystem instance with all of this source's pages inside (and symlinks applied) -* helpers - an object with useful methods -* options - the options specified for the plugin in the mosaic config file - -## Helpers - -The helpers provided with this lifecycle event are listed in the table below. - -| Property | Description | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| serialiser | A matching `Serialiser` for serialising/deserialising pages when reading/writing to the filesystem | -| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin | -| pageExtensions | A collection of pageExtensions the source is using | -| ignorePages | A collection of page globs that are to be ignored for this source | -| namespace | The namespace of the source running the plugin | diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index.mdx deleted file mode 100644 index 3dcd628d..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/index.mdx +++ /dev/null @@ -1,438 +0,0 @@ ---- -title: Lifecycle Events -layout: DetailTechnical -sidebar: - label: Lifecycle Events - groupLabel: Lifecycle Events - priority: 1 -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/lifecycle/index.mdx -route: /mosaic/configure/plugins/lifecycle/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 1 min read - minutes: 0.235 - time: 14100 - words: 47 -tableOfContents: [] -navigation: - prev: - title: Plugins - route: /mosaic/configure/plugins/index - group: Plugins - next: - title: $afterSource - route: /mosaic/configure/plugins/lifecycle/after-source - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# Plugin lifecycle - -The plugin lifecycle is triggered when a source emits content. - -Each Mosaic source has its own worker thread and plugin lifecycle events that start with a `$` will execute inside the worker thread. -All other lifecycle events will execute in the main Mosaic process. - -The 5 lifecycle events are: - -1. [$afterSource](./after-source) -2. [$beforeSend](./before-send) -3. [afterUpdate](./after-update) -4. [shouldClearCache](./should-clear-cache) -5. [shouldUpdateNamespaceSources](./should-update-namespace-sources) - - - Plugin methods that trigger inside the main thread should be asynchronous and highly optimised to - avoid holding up the main thread. - diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/shared-config.json deleted file mode 120000 index 286ad094..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache deleted file mode 120000 index 0ffe51a1..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache +++ /dev/null @@ -1 +0,0 @@ -should-clear-cache.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache.mdx deleted file mode 100644 index e52441d1..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-clear-cache.mdx +++ /dev/null @@ -1,452 +0,0 @@ ---- -title: shouldClearCache -layout: DetailOverview -sidebar: - label: shouldClearCache - groupLabel: shouldClearCache - priority: 2 -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx -route: /mosaic/configure/plugins/lifecycle/should-clear-cache -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 2 min read - minutes: 1.025 - time: 61500 - words: 205 -tableOfContents: - - depth: 2 - level: 0 - id: helpers - text: Helpers -navigation: - prev: - title: afterUpdate - route: /mosaic/configure/plugins/lifecycle/after-update - group: Lifecycle Events - next: - title: shouldUpdateNamespaceSources - route: /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - group: Lifecycle Events -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The fourth lifecycle event to trigger overall and the second to trigger inside the main Mosaic process. - -It is called every time *any* source emits new pages and should return a boolean to indicate if **other** sources should clear their cache in response to the source updating. - - - Only sources that have already run `afterUpdate` will call this lifecycle hook since there is no - cache to clear if they haven't reached that stage in the lifecycle. - - -The `shouldClearCache` lifecycle event is called with: - -* updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem -* helpers - an object with useful methods -* options - the options specified for the plugin in the mosaic config file - -## Helpers - -The helpers provided with this lifecycle event are listed in the table below. - -| Property | Description | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| serialiser | A matching `Serialiser` for serialising/deserialising pages when reading/writing to the filesystem | -| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. Shared only with this source. | -| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) | -| pageExtensions | A collection of pageExtensions the source is using | -| ignorePages | A collection of page globs that are to be ignored for this source | -| namespace | The namespace of the source running the plugin | diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources deleted file mode 120000 index 599a4b01..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources +++ /dev/null @@ -1 +0,0 @@ -should-update-namespace-sources.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx deleted file mode 100644 index bec412a7..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx +++ /dev/null @@ -1,447 +0,0 @@ ---- -title: shouldUpdateNamespaceSources -layout: DetailOverview -sidebar: - label: shouldUpdateNamespaceSources - groupLabel: shouldUpdateNamespaceSources - priority: 1 -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx -route: /mosaic/configure/plugins/lifecycle/should-update-namespace-sources -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx - - label: Lifecycle Events - path: /mosaic/configure/plugins/lifecycle/index - id: /mosaic/configure/plugins/lifecycle/index.mdx -readingTime: - text: 2 min read - minutes: 1.02 - time: 61200 - words: 204 -tableOfContents: - - depth: 2 - level: 0 - id: helpers - text: Helpers -navigation: - prev: - title: shouldClearCache - route: /mosaic/configure/plugins/lifecycle/should-clear-cache - group: Lifecycle Events - next: - title: $AliasPlugin - route: /mosaic/configure/plugins/alias-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The fifth lifecycle event to trigger overall and the third to trigger inside the main Mosaic process. - -It is called every time *any* source emits new pages and should return a boolean to indicate if **other sources that share the same [source namespace](../../sources/index#source-namespace)** should re-run `afterUpdate`. - -The `shouldUpdateNamespaceSources` lifecycle event is called with: - -* updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem -* helpers - an object with useful methods -* options - the options specified for the plugin in the mosaic config file - -## Helpers - -The helpers provided with this lifecycle event are listed in the table below. - -| Property | Description | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| serialiser | A matching `Serialiser` for serialising/deserialising pages when reading/writing to the filesystem | -| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. Shared only with this source. | -| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) | -| pageExtensions | A collection of pageExtensions the source is using | -| ignorePages | A collection of page globs that are to be ignored for this source | -| namespace | The namespace of the source running the plugin | diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin deleted file mode 120000 index d241b7b1..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin +++ /dev/null @@ -1 +0,0 @@ -pages-wthout-extensions-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx deleted file mode 100644 index 9153a936..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx +++ /dev/null @@ -1,454 +0,0 @@ ---- -title: PagesWithoutFileExtPlugin -layout: DetailOverview -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx -route: /mosaic/configure/plugins/pages-wthout-extensions-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: PagesWithoutFileExtPlugin - groupLabel: PagesWithoutFileExtPlugin -readingTime: - text: 1 min read - minutes: 0.57 - time: 34200 - words: 114 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: LazyPagePlugin - route: /mosaic/configure/plugins/lazy-page-plugin - group: Plugins - next: - title: PublicAssetsPlugin - route: /mosaic/configure/plugins/public-assets-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `PagesWithoutFileExtPlugin` plugin creates [aliases](../../author/aliases) without the file extension for every page in the Mosaic filesystem. -This allows pages to be retrieved from the filesystem without specifying the extension e.g., `.mdx`. - -The plugin also modifies the `route` metadata property of a page to point to the shorter alias. - -## Priority - -This plugin runs with a priority of 1. It must run after the [$AliasPlugin](./alias-plugin). - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin', - options: {}, - priority: 1 - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin deleted file mode 120000 index d9bc7c86..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin +++ /dev/null @@ -1 +0,0 @@ -public-assets-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin.mdx deleted file mode 100644 index 3eb491e6..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/public-assets-plugin.mdx +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: PublicAssetsPlugin -layout: DetailOverview -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx -route: /mosaic/configure/plugins/public-assets-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: PublicAssetsPlugin - groupLabel: PublicAssetsPlugin -readingTime: - text: 1 min read - minutes: 0.61 - time: 36600 - words: 122 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: PagesWithoutFileExtPlugin - route: /mosaic/configure/plugins/pages-wthout-extensions-plugin - group: Plugins - next: - title: ReadingTimePlugin - route: /mosaic/configure/plugins/reading-time-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `PublicAssetsPlugin` is responsible for finding "assets" in the Mosaic filesystem and copying them to another directory. - -Typical usecase is for copying `sitemap.xml` and `search-data.json` to the public directory of a Next.js site as these are considered [static assets](https://nextjs.org/docs/pages/building-your-application/optimizing/static-assets) for Next.js. - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| --------- | ----------------------------------------------------------- | -| outputDir | The directory to copy the assets to. Defaults to `./public` | -| assets | A collection of filenames to copy to the outputDir | - -## Adding to Mosaic - -This plugin is **not** included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/PublicAssetsPlugin', - priority: -1, - options: { - outputDir: './public', - assets: ['sitemap.xml', 'search-data.json'] - } - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin deleted file mode 120000 index 4f67de68..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin +++ /dev/null @@ -1 +0,0 @@ -reading-time-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin.mdx deleted file mode 100644 index 88a7d560..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/reading-time-plugin.mdx +++ /dev/null @@ -1,450 +0,0 @@ ---- -title: ReadingTimePlugin -layout: DetailOverview -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx -route: /mosaic/configure/plugins/reading-time-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: ReadingTimePlugin - groupLabel: ReadingTimePlugin -readingTime: - text: 1 min read - minutes: 0.43 - time: 25800 - words: 86 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: PublicAssetsPlugin - route: /mosaic/configure/plugins/public-assets-plugin - group: Plugins - next: - title: $RefPlugin - route: /mosaic/configure/plugins/ref-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `ReadingTimePlugin` generates an estimation of how long a page written in MDX will take to read and adds the `readingTime` property to the metadata of a page. - -## Priority - -This plugin runs with no special priority. - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin', - options: {} - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin deleted file mode 120000 index 1c71c184..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin +++ /dev/null @@ -1 +0,0 @@ -ref-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin.mdx deleted file mode 100644 index 75501b07..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/ref-plugin.mdx +++ /dev/null @@ -1,430 +0,0 @@ ---- -title: $RefPlugin -layout: DetailOverview -lastModified: 1700475661344 -fullPath: /mosaic/configure/plugins/ref-plugin.mdx -route: /mosaic/configure/plugins/ref-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: $RefPlugin - groupLabel: $RefPlugin -readingTime: - text: 1 min read - minutes: 0.27 - time: 16200 - words: 54 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority -navigation: - prev: - title: ReadingTimePlugin - route: /mosaic/configure/plugins/reading-time-plugin - group: Plugins - next: - title: SearchIndexPlugin - route: /mosaic/configure/plugins/search-index-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `$RefPlugin` powers the [refs](../../author/refs) feature of Mosaic. - -The plugin scrapes `$ref` properties from page metadata and also applies all refs stored in `config.data.refs`. - -Other plugins can use `config.setRef` to apply new refs, as long as they call it before this plugin has reaches `$beforeSend`. - -## Priority - -This plugin runs with a priority of -1 so it runs *after* most other plugins. diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin deleted file mode 120000 index 28126584..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin +++ /dev/null @@ -1 +0,0 @@ -search-index-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin.mdx deleted file mode 100644 index 726a6c52..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/search-index-plugin.mdx +++ /dev/null @@ -1,516 +0,0 @@ ---- -title: SearchIndexPlugin -layout: DetailOverview -lastModified: 1700475661345 -fullPath: /mosaic/configure/plugins/search-index-plugin.mdx -route: /mosaic/configure/plugins/search-index-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: SearchIndexPlugin - groupLabel: SearchIndexPlugin -readingTime: - text: 2 min read - minutes: 1.45 - time: 87000 - words: 290 -tableOfContents: - - depth: 3 - level: 1 - id: full-search-index - text: Full Search Index - - depth: 3 - level: 1 - id: condensed-search-data - text: Condensed Search Data - - depth: 3 - level: 1 - id: search-configuration - text: Search Configuration - - depth: 3 - level: 1 - id: search-relevancy-configuration - text: Search relevancy configuration - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: $RefPlugin - route: /mosaic/configure/plugins/ref-plugin - group: Plugins - next: - title: SharedConfigPlugin - route: /mosaic/configure/plugins/shared-config-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `SearchIndexPlugin` is responsible for generating the search index and configuration information for [Fuse.js](https://www.fusejs.io/) which is the matching engine powering the client-side search functionality of Mosaic sites. - -It outputs 3 files: - -* Full Search Index - `search-data.json` -* Condensed Search Index - `search-data-condensed.json` -* Search Configuration - `search-config.json` - -### Full Search Index - -On a Mosaic site, the full index is fetched after a page has loaded, thus removing the chance of a huge index slowing down first-load. - -Practically, the full index should load in the background before a user searches for something, but should a search be initiated before that (e.g., slow-internet) then the condensed version of the search index is available. - -### Condensed Search Data - -Search Index plugin creates a "condensed" version of the search index that only includes the `title` and `route` for each page. This is the "Minimum Viable Index" to provide somewhat useable search results client-side while the main search index is loaded in the background. - -### Search Configuration - -Any [options](https://www.fusejs.io/api/options.html) that need to be passed to Fuse.js. - -### Search relevancy configuration - -| Property | Description | -| ---------------- | ----------------------------------------------------- | -| includeScore | https://www.fusejs.io/api/options.html#includescore | -| includeMatches | https://www.fusejs.io/api/options.html#includematches | -| maxPatternLength | TODO | -| ignoreLocation | https://www.fusejs.io/api/options.html#ignorelocation | -| threshold | https://www.fusejs.io/api/options.html#threshold | -| keys | https://www.fusejs.io/api/options.html#keys | - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| ------------- | --------------------------------------------------- | -| maxLineLength | TODO | -| maxLineCount | TODO | -| keys | https://www.fusejs.io/api/options.html#keys | -| relevancy | [search relevancy](#search-relevancy-configuration) | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/SearchIndexPlugin', - previewDisabled: true, - options: { maxLineLength: 240, maxLineCount: 240 } - } - // other plugins -]; -``` - - - It's usually a good idea to mark this plugin as disabled for preview sources otherwise the pages - from the preview will appear in search results. - diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin deleted file mode 120000 index f4a9d793..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin +++ /dev/null @@ -1 +0,0 @@ -shared-config-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin.mdx deleted file mode 100644 index 2ea66083..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config-plugin.mdx +++ /dev/null @@ -1,484 +0,0 @@ ---- -title: SharedConfigPlugin -layout: DetailOverview -lastModified: 1700475661345 -fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx -route: /mosaic/configure/plugins/shared-config-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: SharedConfigPlugin - groupLabel: SharedConfigPlugin -readingTime: - text: 2 min read - minutes: 1.275 - time: 76500 - words: 255 -tableOfContents: - - depth: 3 - level: 1 - id: namespace-shared-configs - text: Namespace Shared Configs - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: SearchIndexPlugin - route: /mosaic/configure/plugins/search-index-plugin - group: Plugins - next: - title: SidebarPlugin - route: /mosaic/configure/plugins/sidebar-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `SharedConfigPlugin` crawls the page hierarchy to find the closest `sharedConfig` metadata from any parent index's page metadata. It then exports a JSON file into each directory with the merged config for that level. - -Shared config is typically the place where the following is configured for a Mosaic site: - -* App Header configuration including site name and main navigation -* Footer information -* Help links for the left sidebar area - -### Namespace Shared Configs - -Consider 2 sources the share the same [namespace](../sources/index#source-namespace) "product-docs": - -* Source A - multiple product directories and main product index page. The index page specifies `sharedConfig` metadata. -* Source B - pages relevant to a single product. Index page does *not* have any `sharedConfig` metadata. - -Let's also assume that the pages from Source B would also naturally "fit" within the pages of Source B (e.g. inside a products directory). - -In this scenario, the `SharedConfigPlugin` will attempt to copy the shared config file from Source A into the root directory of Source B allowing the Source B pages to use the Source A `sharedConfig` as though it were a product sourced directly from Source A. - -## Priority - -This plugin runs with a priority of 3. - -## Options - -| Property | Description | -| -------- | ---------------------------------------------- | -| filename | the name of the JSON file output by the plugin | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/SharedConfigPlugin', - options: { - filename: 'shared-config.json' - }, - priority: 3 - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin deleted file mode 120000 index f59cca65..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin +++ /dev/null @@ -1 +0,0 @@ -sidebar-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin.mdx deleted file mode 100644 index d5a5bb53..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/sidebar-plugin.mdx +++ /dev/null @@ -1,477 +0,0 @@ ---- -title: SidebarPlugin -layout: DetailOverview -lastModified: 1700475661345 -fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx -route: /mosaic/configure/plugins/sidebar-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: SidebarPlugin - groupLabel: SidebarPlugin -readingTime: - text: 2 min read - minutes: 1.03 - time: 61800 - words: 206 -tableOfContents: - - depth: 3 - level: 1 - id: configuration - text: Configuration - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: SharedConfigPlugin - route: /mosaic/configure/plugins/shared-config-plugin - group: Plugins - next: - title: SiteMapPlugin - route: /mosaic/configure/plugins/site-map-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `SidebarPlugin` generates the necessary page metadata needed for the vertical navigation shown on some Mosaic pages. - -The output from the plugin is added to a `sidebarData` metadata property of the page. - -### Configuration - -The `rootDirGlob` is used to determine the "root" directories of the sidebar. So for example: - -* `*/*/*` - generate sidebar data for the pages that are 3 directories deep in the filesystem hierarchy -* `*/!(product-a)/*` - same as above but ignore the product-a directory -* `products/product-b` - generate a sidebar just for product-b in the products directory - -To rearrange pages in the sidebar or to apply a different label to a page you can [configure the sidebar](../../author/sidebars) using page frontmatter. - -## Priority - -This plugin runs with a priority of 3. - -## Options - -| Property | Description | -| ----------- | ----------------------------------------------------------------------------- | -| filename | filename of the sidebar json, linked to each related page via ref | -| rootDirGlob | Glob pattern for matching directories which should be the root of the sidebar | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin', - options: { rootDirGlob: '*/*/*' } - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin deleted file mode 120000 index b8d84f06..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin +++ /dev/null @@ -1 +0,0 @@ -site-map-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin.mdx deleted file mode 100644 index df9892ba..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/site-map-plugin.mdx +++ /dev/null @@ -1,479 +0,0 @@ ---- -title: SiteMapPlugin -layout: DetailOverview -lastModified: 1707351262295 -fullPath: /mosaic/configure/plugins/site-map-plugin.mdx -route: /mosaic/configure/plugins/site-map-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: SiteMapPlugin - groupLabel: SiteMapPlugin -readingTime: - text: 1 min read - minutes: 0.8 - time: 48000 - words: 160 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic - - depth: 2 - level: 0 - id: visualiser - text: Visualiser -navigation: - prev: - title: SidebarPlugin - route: /mosaic/configure/plugins/sidebar-plugin - group: Plugins - next: - title: $TagPlugin - route: /mosaic/configure/plugins/tag-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `SiteMapPlugin` generates a [sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview) using the pages in the Mosaic filesystem that adheres to the [sitemaps XML schema](https://www.sitemaps.org/protocol.html). - -The output of the plugin is a file is named `/sitemap.xml`. - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| -------- | --------------------------------------------------------------------------------------------------- | -| siteUrl | The site URL. Used as the prefix for loc entries in the sitemap as these must start with a protocol | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/SiteMapPlugin', - previewDisabled: true, - options: { siteUrl: process.env.SITE_URL || 'http://localhost:3000' } - } - // other plugins -]; -``` - -## Visualiser - -To visualise your sitemap you can combine this plugin with the `Sitemap` component provided by `@jpmorganchase/mosaic-sitemap-component`. - -Rendering the `Sitemap` component will render a tree view of your sitemap. - -``` - -``` - -Have a look at this site's pages, [here](/mosaic/sitemap). diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin deleted file mode 120000 index 5df823e3..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin +++ /dev/null @@ -1 +0,0 @@ -tag-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin.mdx deleted file mode 100644 index 7c764156..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/tag-plugin.mdx +++ /dev/null @@ -1,495 +0,0 @@ ---- -title: $TagPlugin -layout: DetailOverview -lastModified: 1700475661345 -fullPath: /mosaic/configure/plugins/tag-plugin.mdx -route: /mosaic/configure/plugins/tag-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: $TagPlugin - groupLabel: $TagPlugin -readingTime: - text: 2 min read - minutes: 1.555 - time: 93300 - words: 311 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: example-use-case---products-page - text: Example use case - Products Page -navigation: - prev: - title: SiteMapPlugin - route: /mosaic/configure/plugins/site-map-plugin - group: Plugins - next: - title: TableOfContentsPlugin - route: /mosaic/configure/plugins/toc-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `$TagPlugin` powers the tags feature of Mosaic. - -This plugin scrapes `$tag` from page metadata and also applies all aliases stored in `config.data.tags`. - -Tags ultimately resolve down into [refs](../../author/refs), but are different from normal refs, in that they are applied to the -union filesystem (all merged filesystems), not to the individual source filesystem that they were defined on. This can be thought of as a *global ref*. - -Other plugins can use `config.setData()` and modify the `tags` property, to apply new global refs, as long as -they do so before this plugin has reaches `$beforeSend`. - -## Priority - -This plugin runs with no special priority but it must run before both the `$AliasPlugin` and the `$RefPlugin`. - -## Example use case - Products Page - -Let's assume there is a products page on your site and each product is shown as a tile. The information for each product tile is sourced from multiple Mosaic sources. How can tags be used to reference the product data needed for each tile on the products page? - -The product page should add a `$tag` metadata prop to its frontmatter: - -```yml ---- -title: Products -description: Product index -layout: ProductPreview -data: - items: - $tag: product#/data ---- -``` - -The tag shown in the example above is saying populate `data.items` of the Products index page with the `data` metadata property of pages tagged with `product`. - -A tagged product page needs to have a `tags` property which is a collection of tags and one of these needs to be `product`. This will allow the `$TagPlugin` to correctly associate the product page to the product index page. It will also need a `data` property because thats the property our product index page wants to use for the tiles. - -```yml ---- -title: Product A -description: My Product description -layout: ProductDiscover -tags: - - product -data: - name: - $ref: '#/title' - date: 2023/02/07 - action: Product Overview - description: - $ref: '#/description' - link: /products/a/index ---- -``` - -```yml ---- -title: Product B -description: My Product description -layout: ProductDiscover -tags: - - product -data: - name: - $ref: '#/title' - date: 2023/02/07 - action: Product Overview - description: - $ref: '#/description' - link: /products/b/index ---- -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin b/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin deleted file mode 120000 index 68497db9..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin +++ /dev/null @@ -1 +0,0 @@ -toc-plugin.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin.mdx b/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin.mdx deleted file mode 100644 index 6913599e..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/plugins/toc-plugin.mdx +++ /dev/null @@ -1,473 +0,0 @@ ---- -title: TableOfContentsPlugin -layout: DetailOverview -lastModified: 1700475661345 -fullPath: /mosaic/configure/plugins/toc-plugin.mdx -route: /mosaic/configure/plugins/toc-plugin -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Plugins - path: /mosaic/configure/plugins/index - id: /mosaic/configure/plugins/index.mdx -sidebar: - label: TableOfContentsPlugin - groupLabel: TableOfContentsPlugin -readingTime: - text: 1 min read - minutes: 0.93 - time: 55800 - words: 186 -tableOfContents: - - depth: 2 - level: 0 - id: priority - text: Priority - - depth: 2 - level: 0 - id: options - text: Options - - depth: 2 - level: 0 - id: adding-to-mosaic - text: Adding to Mosaic -navigation: - prev: - title: $TagPlugin - route: /mosaic/configure/plugins/tag-plugin - group: Plugins -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The `TableOfContentsPlugin` generates a Table of Contents for each page in the Mosaic filesystem using the headings on the page. - -Heading ranks are used to determine which page headings should be included in the Table of Contents: - -| Heading Element (markdown syntax) | Rank | -| --------------------------------- | ---- | -| h1 (#) | 1 | -| h2 (##) | 2 | -| h3 (###) | 3 | -| h4 (####) | 4 | -| h5 (#####) | 5 | -| h6 (######) | 6 | - -The plugin output is added to a `tableOfContents` metadata property of a page. - -## Priority - -This plugin runs with no special priority. - -## Options - -| Property | Description | -| -------- | ----------------------------- | -| minRank | The minimum page heading rank | -| maxRank | The maximum page heading rank | - -## Adding to Mosaic - -This plugin is included in the mosaic config shipped by the Mosaic standard generator. So if you use the below import in your `mosaic.config.mjs` file then the plugin is included already: - -```js -import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js'; -``` - -To add it yourself, add the following to the `plugins` collection: - -```js -plugins: [ - { - modulePath: '@jpmorganchase/mosaic-plugins/TableOfContentsPlugin', - options: { - minRank: 2, - maxRank: 3 - } - } - // other plugins -]; -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sidebar.json b/packages/site/snapshots/latest/mosaic/configure/sidebar.json deleted file mode 100644 index 37b8856c..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/configure/index","kind":"data","fullPath":"/mosaic/configure/index.mdx","name":"Configure","priority":999,"data":{"level":2,"link":"/mosaic/configure/index"}},{"id":"/mosaic/configure/modes","kind":"group","childNodes":[{"id":"/mosaic/configure/modes/index","kind":"data","fullPath":"/mosaic/configure/modes/index.mdx","name":"Modes of operation","priority":999,"data":{"level":3,"link":"/mosaic/configure/modes/index"}},{"id":"/mosaic/configure/modes/active","kind":"data","fullPath":"/mosaic/configure/modes/active.mdx","name":"Active mode","data":{"level":3,"link":"/mosaic/configure/modes/active"}},{"id":"/mosaic/configure/modes/snapshot-file","kind":"data","fullPath":"/mosaic/configure/modes/snapshot-file.mdx","name":"Snapshot file mode","data":{"level":3,"link":"/mosaic/configure/modes/snapshot-file"}},{"id":"/mosaic/configure/modes/snapshot-s3","kind":"data","fullPath":"/mosaic/configure/modes/snapshot-s3.mdx","name":"Snapshot AWS/S3 mode","data":{"level":3,"link":"/mosaic/configure/modes/snapshot-s3"}}],"name":"Modes of operation","priority":4},{"id":"/mosaic/configure/theme","kind":"group","childNodes":[{"id":"/mosaic/configure/theme/index","kind":"data","fullPath":"/mosaic/configure/theme/index.mdx","name":"Theming Your Site","priority":999,"data":{"level":3,"link":"/mosaic/configure/theme/index"}},{"id":"/mosaic/configure/theme/custom-css","kind":"data","fullPath":"/mosaic/configure/theme/custom-css.mdx","name":"Custom CSS","priority":3,"data":{"level":3,"link":"/mosaic/configure/theme/custom-css"}},{"id":"/mosaic/configure/theme/custom-components","kind":"data","fullPath":"/mosaic/configure/theme/custom-components.mdx","name":"Custom Components","priority":2,"data":{"level":3,"link":"/mosaic/configure/theme/custom-components"}}],"name":"Theming Your Site","priority":4},{"id":"/mosaic/configure/admin","kind":"group","childNodes":[{"id":"/mosaic/configure/admin/index","kind":"data","fullPath":"/mosaic/configure/admin/index.mdx","name":"Admin","priority":999,"data":{"level":3,"link":"/mosaic/configure/admin/index"}}],"name":"Admin","priority":3},{"id":"/mosaic/configure/sources","kind":"group","childNodes":[{"id":"/mosaic/configure/sources/index","kind":"data","fullPath":"/mosaic/configure/sources/index.mdx","name":"Sources","priority":999,"data":{"level":3,"link":"/mosaic/configure/sources/index"}},{"id":"/mosaic/configure/sources/source-figma","kind":"data","fullPath":"/mosaic/configure/sources/source-figma.mdx","name":"Figma","priority":5,"data":{"level":3,"link":"/mosaic/configure/sources/source-figma"}},{"id":"/mosaic/configure/sources/source-readme","kind":"data","fullPath":"/mosaic/configure/sources/source-readme.mdx","name":"Readme Files","priority":5,"data":{"level":3,"link":"/mosaic/configure/sources/source-readme"}},{"id":"/mosaic/configure/sources/source-storybook","kind":"data","fullPath":"/mosaic/configure/sources/source-storybook.mdx","name":"Storybook","priority":5,"data":{"level":3,"link":"/mosaic/configure/sources/source-storybook"}},{"id":"/mosaic/configure/sources/schedules","kind":"data","fullPath":"/mosaic/configure/sources/schedules.mdx","name":"Schedules","priority":4,"data":{"level":3,"link":"/mosaic/configure/sources/schedules"}},{"id":"/mosaic/configure/sources/local-folder-source","kind":"data","fullPath":"/mosaic/configure/sources/local-folder-source.mdx","name":"Local Folder Source","priority":3,"data":{"level":3,"link":"/mosaic/configure/sources/local-folder-source"}},{"id":"/mosaic/configure/sources/git-repo-source","kind":"data","fullPath":"/mosaic/configure/sources/git-repo-source.mdx","name":"Git Repo Source","priority":2,"data":{"level":3,"link":"/mosaic/configure/sources/git-repo-source"}},{"id":"/mosaic/configure/sources/http-source","kind":"data","fullPath":"/mosaic/configure/sources/http-source.mdx","name":"HTTP Source","priority":1,"data":{"level":3,"link":"/mosaic/configure/sources/http-source"}}],"name":"Sources","priority":3},{"id":"/mosaic/configure/layouts","kind":"group","childNodes":[{"id":"/mosaic/configure/layouts/index","kind":"data","fullPath":"/mosaic/configure/layouts/index.mdx","name":"Layouts","priority":999,"data":{"level":3,"link":"/mosaic/configure/layouts/index"}},{"id":"/mosaic/configure/layouts/detail-highlight","kind":"data","fullPath":"/mosaic/configure/layouts/detail-highlight.mdx","name":"Detail Highlight","data":{"level":3,"link":"/mosaic/configure/layouts/detail-highlight"}},{"id":"/mosaic/configure/layouts/detail-overview","kind":"data","fullPath":"/mosaic/configure/layouts/detail-overview.mdx","name":"Detail Overview","data":{"level":3,"link":"/mosaic/configure/layouts/detail-overview"}},{"id":"/mosaic/configure/layouts/detail-technical","kind":"data","fullPath":"/mosaic/configure/layouts/detail-technical.mdx","name":"Detail Technical","data":{"level":3,"link":"/mosaic/configure/layouts/detail-technical"}},{"id":"/mosaic/configure/layouts/landing","kind":"data","fullPath":"/mosaic/configure/layouts/landing.mdx","name":"Landing Layout","data":{"level":3,"link":"/mosaic/configure/layouts/landing"}},{"id":"/mosaic/configure/layouts/product-discover","kind":"data","fullPath":"/mosaic/configure/layouts/product-discover.mdx","name":"Product Discover Layout","data":{"level":3,"link":"/mosaic/configure/layouts/product-discover"}},{"id":"/mosaic/configure/layouts/product-preview","kind":"data","fullPath":"/mosaic/configure/layouts/product-preview.mdx","name":"Product Preview Layout","data":{"level":3,"link":"/mosaic/configure/layouts/product-preview"}}],"name":"Layouts","priority":2},{"id":"/mosaic/configure/plugins","kind":"group","childNodes":[{"id":"/mosaic/configure/plugins/index","kind":"data","fullPath":"/mosaic/configure/plugins/index.mdx","name":"Plugins","priority":999,"data":{"level":3,"link":"/mosaic/configure/plugins/index"}},{"id":"/mosaic/configure/plugins/lifecycle","kind":"group","childNodes":[{"id":"/mosaic/configure/plugins/lifecycle/index","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/index.mdx","name":"Lifecycle Events","priority":999,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/index"}},{"id":"/mosaic/configure/plugins/lifecycle/after-source","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/after-source.mdx","name":"$afterSource","priority":5,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/after-source"}},{"id":"/mosaic/configure/plugins/lifecycle/before-send","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/before-send.mdx","name":"$beforeSend","priority":4,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/before-send"}},{"id":"/mosaic/configure/plugins/lifecycle/after-update","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/after-update.mdx","name":"afterUpdate","priority":3,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/after-update"}},{"id":"/mosaic/configure/plugins/lifecycle/should-clear-cache","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/should-clear-cache.mdx","name":"shouldClearCache","priority":2,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/should-clear-cache"}},{"id":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources","kind":"data","fullPath":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx","name":"shouldUpdateNamespaceSources","priority":1,"data":{"level":4,"link":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources"}}],"name":"Lifecycle Events","priority":1},{"id":"/mosaic/configure/plugins/alias-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/alias-plugin.mdx","name":"$AliasPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/alias-plugin"}},{"id":"/mosaic/configure/plugins/breadcrumbs-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/breadcrumbs-plugin.mdx","name":"BreadcrumbsPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/breadcrumbs-plugin"}},{"id":"/mosaic/configure/plugins/broken-links-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/broken-links-plugin.mdx","name":"BrokenLinksPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/broken-links-plugin"}},{"id":"/mosaic/configure/plugins/codemod-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/codemod-plugin.mdx","name":"$CodeModPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/codemod-plugin"}},{"id":"/mosaic/configure/plugins/lazy-page-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/lazy-page-plugin.mdx","name":"LazyPagePlugin","data":{"level":3,"link":"/mosaic/configure/plugins/lazy-page-plugin"}},{"id":"/mosaic/configure/plugins/pages-wthout-extensions-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx","name":"PagesWithoutFileExtPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/pages-wthout-extensions-plugin"}},{"id":"/mosaic/configure/plugins/public-assets-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/public-assets-plugin.mdx","name":"PublicAssetsPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/public-assets-plugin"}},{"id":"/mosaic/configure/plugins/reading-time-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/reading-time-plugin.mdx","name":"ReadingTimePlugin","data":{"level":3,"link":"/mosaic/configure/plugins/reading-time-plugin"}},{"id":"/mosaic/configure/plugins/ref-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/ref-plugin.mdx","name":"$RefPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/ref-plugin"}},{"id":"/mosaic/configure/plugins/search-index-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/search-index-plugin.mdx","name":"SearchIndexPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/search-index-plugin"}},{"id":"/mosaic/configure/plugins/shared-config-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/shared-config-plugin.mdx","name":"SharedConfigPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/shared-config-plugin"}},{"id":"/mosaic/configure/plugins/sidebar-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/sidebar-plugin.mdx","name":"SidebarPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/sidebar-plugin"}},{"id":"/mosaic/configure/plugins/site-map-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/site-map-plugin.mdx","name":"SiteMapPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/site-map-plugin"}},{"id":"/mosaic/configure/plugins/tag-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/tag-plugin.mdx","name":"$TagPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/tag-plugin"}},{"id":"/mosaic/configure/plugins/toc-plugin","kind":"data","fullPath":"/mosaic/configure/plugins/toc-plugin.mdx","name":"TableOfContentsPlugin","data":{"level":3,"link":"/mosaic/configure/plugins/toc-plugin"}}],"name":"Plugins","priority":1}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source b/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source deleted file mode 120000 index c1952397..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source +++ /dev/null @@ -1 +0,0 @@ -git-repo-source.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source.mdx deleted file mode 100644 index 30dcd028..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/git-repo-source.mdx +++ /dev/null @@ -1,492 +0,0 @@ ---- -title: Git Repo Source -layout: DetailTechnical -sidebar: - label: Git Repo Source - groupLabel: Git Repo Source - priority: 2 -lastModified: 1700475661345 -fullPath: /mosaic/configure/sources/git-repo-source.mdx -route: /mosaic/configure/sources/git-repo-source -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 2 min read - minutes: 1.31 - time: 78600 - words: 262 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: credentials-and-access-tokens - text: Credentials and Access tokens - - depth: 3 - level: 1 - id: example - text: Example - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-git-repo-source-definition - text: Example Git Repo Source Definition -navigation: - prev: - title: Local Folder Source - route: /mosaic/configure/sources/local-folder-source - group: Sources - next: - title: HTTP Source - route: /mosaic/configure/sources/http-source - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The Git Repo Source is used to pull content from a remote git repository e.g. github. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-git-repo` - -## Credentials and Access tokens - -To successfully clone the git repo, the source definition must include credentials that have sufficient permissions to clone the repository. - -We recommend storing a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) in an environment variable and using the environment variable in the source definition. - -This keeps credentials out of code where they may be accidentally exposed to third parties. - -### Example - -``` -export MOSAIC_DOCS_CLONE_CREDENTIALS=":", -``` - -## Configuration - -| Property | Description | Required | -| ------------------- | -------------------------------------------------------------------------------- | -------- | -| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-git-repo) | Yes | -| namespace | The scope for this source. | Yes | -| disabled | When true, content from this source is not used | No | -| options.credentials | Collection of URLS to make requests | Yes | -| options.prefixDir | The root path used in the content URL | Yes | -| options.subfolder | The name of the folder within the cloned repo containing the docs | Yes | -| options.repo | The repo URL | Yes | -| options.branch | The branch or tag to clone | Yes | -| options.extensions | Collection of file extensions that the source will look for inside the subfolder | Yes | -| options.remote | The name of the git remote to use. Defaults to origin. | Yes | - -### Example Git Repo Source Definition - -``` - - { - modulePath: '@jpmorganchase/mosaic-source-git-repo', - namespace: 'mosaic', - options: { - credentials: process.env.MOSAIC_DOCS_CLONE_CREDENTIALS, - prefixDir: 'mosaic', - subfolder: 'docs', - repo: 'https://github.com/jpmorganchase/mosaic.git', - branch: 'main', - extensions: ['.mdx'], - remote: 'origin' - } - } - -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/http-source b/packages/site/snapshots/latest/mosaic/configure/sources/http-source deleted file mode 120000 index 5ff76548..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/http-source +++ /dev/null @@ -1 +0,0 @@ -http-source.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/http-source.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/http-source.mdx deleted file mode 100644 index 772b5598..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/http-source.mdx +++ /dev/null @@ -1,467 +0,0 @@ ---- -title: HTTP Source -layout: DetailTechnical -sidebar: - label: HTTP Source - groupLabel: HTTP Source - priority: 1 -lastModified: 1700475661346 -fullPath: /mosaic/configure/sources/http-source.mdx -route: /mosaic/configure/sources/http-source -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 1 min read - minutes: 0.92 - time: 55200 - words: 184 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-http-source-definition - text: Example HTTP Source Definition -navigation: - prev: - title: Git Repo Source - route: /mosaic/configure/sources/git-repo-source - group: Sources - next: - title: Layouts - route: /mosaic/configure/layouts/index - group: Layouts -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The HTTP Source is used to pull content over HTTP. - -Multiple endpoints can be specified and the source will combine and transform the response from each into a single collection of pages. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-http` - -## Configuration - -| Property | Description | Required | -| ------------------------------------------ | ----------------------------------------------------------------------------- | -------- | -| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-http) | Yes | -| namespace | The scope for this source | Yes | -| disabled | When true, content from this source is not used | No | -| options.endpoints | Collection of URLS to make requests | Yes | -| options.prefixDir | The root path used in the content URL | Yes | -| options.transformResponseToPagesModulePath | The path of the module used to transform endpoint responses into Mosaic pages | Yes | -| options.checkIntervalMins | Number of minutes to wait between requests. Defaults to 5 minutes | No | -| options.initialDelayMs | Number of milliseconds to wait for making initial request. Defaults to 1000 | No | - -### Example HTTP Source Definition - -``` - { - modulePath: '@jpmorganchase/mosaic-source-http', - namespace: 'my-namespace', - options: { - prefixDir: 'docs', - endpoints: [ - 'https://api.data.com/blah', - 'https://api.data.com/hello' - ], - transformResponseToPagesModulePath: '@scope/transformer-package' - } - } -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/index b/packages/site/snapshots/latest/mosaic/configure/sources/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/index.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/index.mdx deleted file mode 100644 index d794a4b8..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/index.mdx +++ /dev/null @@ -1,536 +0,0 @@ ---- -title: Sources -layout: DetailTechnical -sidebar: - label: Sources - groupLabel: Sources - priority: 3 -lastModified: 1700475661346 -fullPath: /mosaic/configure/sources/index.mdx -route: /mosaic/configure/sources/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 3 min read - minutes: 2.395 - time: 143700 - words: 479 -tableOfContents: - - depth: 2 - level: 0 - id: source-definitions - text: Source Definitions - - depth: 3 - level: 1 - id: example-local-folder-source-definition - text: Example Local Folder Source Definition - - depth: 2 - level: 0 - id: source-namespace - text: Source Namespace - - depth: 2 - level: 0 - id: source-schedules - text: Source Schedules - - depth: 2 - level: 0 - id: source-types - text: Source Types - - depth: 2 - level: 0 - id: watching-for-updates - text: Watching for Updates - - depth: 2 - level: 0 - id: source-worker-thread - text: Source Worker Thread - - depth: 3 - level: 1 - id: gotchas - text: Gotchas -navigation: - prev: - title: Admin - route: /mosaic/configure/admin/index - group: Admin - next: - title: Figma Source - route: /mosaic/configure/sources/source-figma - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Sources are what Mosaic uses to pull content from disparate locations and merge into a single virtual filesystem that can be used by a Mosaic Site. - -Depending on the [mode](../modes/index) used, sources can update periodically ensuring that new content is made available automatically. - -## Source Definitions - -Source Definitions are specified in the `sources` collection of a mosaic config file. - -Each source uses a [zod schema](https://zod.dev/?id=introduction) to validate the provided JSON to ensure that all required information for the source to pull content has been provided. - -A source definition at a minimum needs to provide the module path of the source and the [namespace](#source-namespace) that it will use. A namespace is not unique across sources though it is common that each source has a different namespace. - -Lastly, the options field can be used as a bucket for configuration values needed to configure the source e.g. credentials. - - - Users are free to add any property as a source option but please read the [gotchas](#gotchas) - first regarding the allowed *values*. - - -### Example Local Folder Source Definition - -``` - /** - * Demonstrates a local file-system source, in this case a relative path to where the - * site was generated. - * Access from your browser as http://localhost:3000/local - */ - { - modulePath: '@jpmorganchase/mosaic-source-local-folder', - namespace: 'local', // each site has it's own namespace, think of this as your content's uid - options: { - rootDir: '../../docs', // relative path to content - prefixDir: 'local', // root path used for namespace - extensions: ['.mdx'] // extensions of content which should be pulled - } - } -``` - -## Source Namespace - -A Source Namespace is a scoping mechanism for Mosaic sources used to filter the content loaded by Mosaic. By default all sources specified in the mosaic config file are loaded. - -``` -sources: [ - { - namespace: 'my-namespace', - modulePath: '@jpmorganchase/mosaic-source-local-folder' - } -]; -``` - -The following command will ensure mosaic only loads sources with the `local` scope. - -``` -yarn mosaic serve -c ''./mosaic.config.mjs' -p 8080 --scope "local" -``` - -## Source Schedules - -Source schedules define how often sources pull in content that exists remotely and if a failed source is retried. More information can be found [here](./schedules) - -## Source Types - -Out of the box, Mosaic provides 3 source "types": - -* [Local Folder](./local-folder-source) -* [Git Repo Source](./git-repo-source) -* [HTTP Source](./http-source) - -Sources must expose an observable interface so it is possible to compose sources together e.g. the Git Repo source uses the Local Folder source internally to watch the cloned folder for changes. - -## Watching for Updates - -When running in [active mode](../modes/active), Mosaic will watch for any changes to the source content and if a change is detected, will initiate a pull of that new content. - -How often to check for updates and how updates are triggered are a matter for the source to handle. Mosaic simply responds when a source emits new content. - -## Source Worker Thread - -Sources are executed inside their own worker thread to ensure that the main thread is not overloaded. It is here that a local virtual filesystem for the source is created and where several of the [Plugin Lifecycle](../plugins/index#Plugin-lifecycle) events are triggered. - -### Gotchas - -A service worker thread uses [postMessage](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/postMessage) to communicate with the main thread and vice-versa. - -This is important because it limits what values can be provided in the source definition to those that can be processed by the [Structured Clone Algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm). diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source b/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source deleted file mode 120000 index 74b1ab13..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source +++ /dev/null @@ -1 +0,0 @@ -local-folder-source.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source.mdx deleted file mode 100644 index 00052ee3..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/local-folder-source.mdx +++ /dev/null @@ -1,466 +0,0 @@ ---- -title: Local Folder Source -layout: DetailTechnical -sidebar: - label: Local Folder Source - groupLabel: Local Folder Source - priority: 3 -lastModified: 1700475661346 -fullPath: /mosaic/configure/sources/local-folder-source.mdx -route: /mosaic/configure/sources/local-folder-source -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 2 min read - minutes: 1.18 - time: 70800 - words: 236 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-local-folder-source-definition - text: Example Local Folder Source Definition -navigation: - prev: - title: Source Schedules - route: /mosaic/configure/sources/schedules - group: Sources - next: - title: Git Repo Source - route: /mosaic/configure/sources/git-repo-source - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The Local Folder Source is used to pull content from a folder located on the same machine as Mosaic is running. - -It is common to use this source when running mosaic locally. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-local-folder` - -## Configuration - -| Property | Description | Required | -| ------------------ | ------------------------------------------------------------------------------ | -------- | -| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-local-folder) | Yes | -| namespace | The scope for this source | Yes | -| disabled | When true, content from this source is not used | No | -| options.rootDir | The top level directory content will be pulled from | Yes | -| options.prefixDir | The root path used in the content URL | Yes | -| options.extensions | Collection of file extensions that the source will look for inside the rootDir | Yes | - -### Example Local Folder Source Definition - -``` -{ - modulePath: '@jpmorganchase/mosaic-source-local-folder', - namespace: 'local', // each site has it's own namespace, think of this as your content's uid - options: { - rootDir: '../../docs', // relative path to content - prefixDir: 'local', // root path used for namespace - extensions: ['.mdx'] // extensions of content which should be pulled - } -} -``` - -This source will look for content with the ".mdx" extension in a "docs" directory 2 levels up from the Mosaic working directory. That content is included in the "local" namespace and available from a route that is prefixed with "local". - -So if you had a file, `docs/app/index.mdx` then you would be able to view it at `http://localhost:3000/local/app/index`. diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/schedules b/packages/site/snapshots/latest/mosaic/configure/sources/schedules deleted file mode 120000 index 033c1704..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/schedules +++ /dev/null @@ -1 +0,0 @@ -schedules.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/schedules.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/schedules.mdx deleted file mode 100644 index c92a53df..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/schedules.mdx +++ /dev/null @@ -1,536 +0,0 @@ ---- -title: Source Schedules -layout: DetailTechnical -sidebar: - label: Schedules - groupLabel: Schedules - priority: 4 -lastModified: 1700475661346 -fullPath: /mosaic/configure/sources/schedules.mdx -route: /mosaic/configure/sources/schedules -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 3 min read - minutes: 2.27 - time: 136200 - words: 454 -tableOfContents: - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 2 - level: 0 - id: global-schedule - text: Global Schedule - - depth: 3 - level: 1 - id: example - text: Example - - depth: 2 - level: 0 - id: retry-strategy - text: Retry Strategy -navigation: - prev: - title: Storybook Source - route: /mosaic/configure/sources/source-storybook - group: Sources - next: - title: Local Folder Source - route: /mosaic/configure/sources/local-folder-source - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -A source schedule defines how often a source initiates a content pull and what to do when there is a failure. - -A schedule can be specified for each source in the source definition, but should a source not provide a schedule it will inherit the "global" schedule. - -## Configuration - -| Property | Description | Required | Default | -| ----------------- | -------------------------------------------------------------------------------------- | -------- | ------- | -| checkIntervalMins | The length of time in minutes before triggering a content refresh | Yes | 30 mins | -| initialDelayMs | Startup delay for the source. | Yes | 1000 ms | -| retryEnabled | When true, failures will trigger another content pull | No | true | -| retryDelayMins | The interval between retries. This will rise exponentially on every failure. | No | 5 | -| maxRetries | Maximum number of retry attempts | No | 100 | -| resetOnSuccess | If true, when a source recovers and emits pages it's retry counter is returned to zero | No | true | - -## Global Schedule - -The global schedule applies to all sources that do **not** provide their own schedule. It can be configured as a top-level property of the Mosaic config file. - -```json - schedule: { - checkIntervalMins: 60, - initialDelayMs: 1000, - retryDelayMins: 15, - maxRetries: 20 - } -``` - -### Example - -Given the config file below: - -```json - schedule: { - checkIntervalMins: 30, - initialDelayMs: 1000, - retryDelayMins: 5, - maxRetries: 10 - }, - sources: [ - { - modulePath: '@jpmorganchase/mosaic-source-git-repo', - namespace: 'sourceA', - options: { - credentials: 'credentials', - prefixDir: 'sourceA', - subfolder: 'docs', - repo: 'source-a-repo-url', - branch: 'develop', - extensions: ['.mdx'], - remote: 'origin' - } - }, - { - modulePath: '@jpmorganchase/mosaic-source-git-repo', - namespace: 'sourceB', - schedule:{ - checkIntervalMins: 60, - initialDelayMs: 5000, - retryDelayMins: 30, - maxRetries: 50 - } - options: { - credentials: 'credentials', - prefixDir: 'sourceB', - subfolder: 'docs', - repo: 'source-b-repo-url', - branch: 'develop', - extensions: ['.mdx'], - remote: 'origin' - } - } - ] -``` - -Source A will inherit the global schedule so it will: - -* Start after a 1 second delay -* Pull content every 30 minutes -* Retry a failed content pull after an initial 5 minute delay -* Retry 10 times and if still unsuccessful, closing - -Source B has its own schedule so it will: - -* Start after a 5 second delay -* Pull content every 60 minutes -* Retry a failed content pull after an initial 30 minute delay -* Retry 50 times and if still unsuccessful, closing - -## Retry Strategy - -The retry strategy that Mosaic employs is [Exponential Backoff](https://en.wikipedia.org/wiki/Exponential_backoff). This is a common strategy for networking applications that aims to prevent retries from causing more harm than good. - -For example, given a source schedule that has a 1 minute retry delay and will retry a maximum of 3 times then the total time spent retrying is 7 minutes: - -* 1 minute delay then 1st retry -* 2 minute delay then 2nd retry -* 4 minute delay then 3rd (and final) retry - -Total delay: 1 + 2 + 4 = 7 minutes - -As you can see, the delay between retries is growing exponentially giving the content source more time to recover after each retry. diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/sources/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-figma b/packages/site/snapshots/latest/mosaic/configure/sources/source-figma deleted file mode 120000 index cd147e32..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-figma +++ /dev/null @@ -1 +0,0 @@ -source-figma.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-figma.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/source-figma.mdx deleted file mode 100644 index 44b16450..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-figma.mdx +++ /dev/null @@ -1,502 +0,0 @@ ---- -title: Figma Source -layout: DetailTechnical -sidebar: - label: Figma - groupLabel: Figma - priority: 5 -lastModified: 1709310919280 -fullPath: /mosaic/configure/sources/source-figma.mdx -route: /mosaic/configure/sources/source-figma -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 2 min read - minutes: 1.64 - time: 98400 - words: 328 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-figma-source-definition - text: Example Figma Source Definition -navigation: - prev: - title: Sources - route: /mosaic/configure/sources/index - group: Sources - next: - title: Readme Source - route: /mosaic/configure/sources/source-readme - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The Figma source is used to pull individual design patterns from Figma projects. -The source subscribes to Figma project groups, then extracts from project files, tagged patterns. - -A Figma pattern tag is defined within a Figma project's `sharedPluginData`. - -For each retrieved/tagged pattern, a page is created in the Mosaic file-system. -Additional Mosaic metadata can be added, to each created page, using `meta` -For instance we could add metadata which defines which product owns a particular pattern and then -group patterns based on owner. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-figma` - -## Configuration - -The Figma source is an [`HttpSource`](./https-source) and shares the same base configuration. -The `transformResponseToPagesModulePath` prop has a default transformer which creates a page for each matching Story. - -| Property | Description | Required | -| ---------- | --------------------------------- | -------- | -| prefixDir | path to store figma patterns | Yes | -| figmaToken | figma access token | Yes | -| projects | array of projects to subscribe to | Yes | -| endpoints | figma endpoints | Yes | - -Each project is configured from the `projects` array. - -| Property | Description | Required | -| ------------- | --------------------------------------------- | -------- | -| id | numerical id of the subscribed project group | Yes | -| meta | metadata to add to each of the projects pages | Yes | -| patternPrefix | prefix to add to all pages created | Yes | - -`endpoints` defined the Figma REST API endpoints. - -| Property | Description | Required | -| ----------------- | --------------------------------------------------------- | -------- | -| getProject | url to return a list of projects within the project group | Yes | -| getFile | url to return a project file | Yes | -| generateThumbnail | url to generate a thumbnail for the shared Figma node | Yes | - -### Example Figma Source Definition - -``` -sources: [ - { - modulePath: '@jpmorganchase/mosaic-source-figma', - namespace: 'some-namespace', - options: { - proxyEndpoint: 'http://path/to/optional/proxy', - prefixDir: '/some/path/to/where/you/store/pattern/pages', - figmaToken: process.env.FIGMA_TOKEN, - projects: [{ - id: 99999, - patternPrefix: 'yourPrefix', - meta: { - tags: [ 'some-tag'], - data: { - owner: 'some-owner' - } - } - }], - endpoints: { - getFile: 'https://api.figma.com/v1/files/:file_id?plugin_data=shared', - getProject: 'https://api.figma.com/v1/projects/:project_id/files', - generateThumbnail: 'https://api.figma.com/v1/images/:project_id?ids=:node_id' - } - } - } -] -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-readme b/packages/site/snapshots/latest/mosaic/configure/sources/source-readme deleted file mode 120000 index 57b27b52..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-readme +++ /dev/null @@ -1 +0,0 @@ -source-readme.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-readme.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/source-readme.mdx deleted file mode 100644 index 6ec1d741..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-readme.mdx +++ /dev/null @@ -1,488 +0,0 @@ ---- -title: Readme Source -layout: DetailTechnical -sidebar: - label: Readme Files - groupLabel: Readme Files - priority: 5 -lastModified: 1709310919280 -fullPath: /mosaic/configure/sources/source-readme.mdx -route: /mosaic/configure/sources/source-readme -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 2 min read - minutes: 1.26 - time: 75600 - words: 252 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-readme-source-definition - text: Example Readme Source Definition -navigation: - prev: - title: Figma Source - route: /mosaic/configure/sources/source-figma - group: Sources - next: - title: Storybook Source - route: /mosaic/configure/sources/source-storybook - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The Readme source is used to pull individual `Readme.md` text files from repositories. -This is a lighter weight version of a Git repository resource, which just pulls a single file, -rather the whole contents of the repo. - -For each retrieved readme, a page is created in the Mosaic file-system. -Additional Mosaic metadata can be added, to each created page, using `meta` -For instance we could add metadata which defines which product owns a particular `Readme.md` and then -group this page, with others, based on owner. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-readme` - -## Configuration - -The Readme source is an [`HttpSource`](./https-source) and shares the same base configuration. - -| Property | Description | Required | -| ----------- | --------------------- | -------- | -| accessToken | request access token | Yes | -| prefixDir | path to store pages | Yes | -| readme | array of readme files | Yes | - -Each readme is configured from the `readme` array. - -| Property | Description | Required | -| --------------- | ---------------------------- | -------- | -| contentTemplate | template for content of page | No | -| name | page name used in route | Yes | -| readmeUrl | url of readme | Yes | -| meta | metadata for page | Yes | - -### Example Readme Source Definition - -``` - sources: [ - { - modulePath: '@jpmorganchase/mosaic-source-readme', - namespace: 'your-namespace', - schedule: { checkIntervalMins: 0.25, initialDelayMs: 0 }, - options: { - prefixDir: '/salt/community-index/readme', - accessToken: 'Bearer your-access-token', - readme: [ - { - name: 'your-mosaic-page-name', - readmeUrl: 'https://some/repo/url/readme.md', - contentTemplate: `a template which replaces ::content:: with the content`, - meta: { - layout: 'DetailTechnical', - title: 'Your Page Title', - tags: ['your-tag-if-required'], - description: 'A description for your readme' - } - }] - } - }] -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook b/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook deleted file mode 120000 index e5aa5e4b..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook +++ /dev/null @@ -1 +0,0 @@ -source-storybook.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook.mdx b/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook.mdx deleted file mode 100644 index e11fb9d8..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/sources/source-storybook.mdx +++ /dev/null @@ -1,498 +0,0 @@ ---- -title: Storybook Source -layout: DetailTechnical -sidebar: - label: Storybook - groupLabel: Storybook - priority: 5 -lastModified: 1709310919280 -fullPath: /mosaic/configure/sources/source-storybook.mdx -route: /mosaic/configure/sources/source-storybook -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Sources - path: /mosaic/configure/sources/index - id: /mosaic/configure/sources/index.mdx -readingTime: - text: 2 min read - minutes: 1.57 - time: 94200 - words: 314 -tableOfContents: - - depth: 2 - level: 0 - id: installation - text: Installation - - depth: 2 - level: 0 - id: configuration - text: Configuration - - depth: 3 - level: 1 - id: example-local-folder-source-definition - text: Example Local Folder Source Definition -navigation: - prev: - title: Readme Source - route: /mosaic/configure/sources/source-readme - group: Sources - next: - title: Source Schedules - route: /mosaic/configure/sources/schedules - group: Sources -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -The Storybook source is used to pull individual stories from Storybook, based on tags. - -The Mosaic source will filter your Storybook's stories, based on `kind` or `tags`. - -For each matching story, a page is created in the Mosaic file-system. - -* additional Mosaic tags can be added to each page using `additionalTags` -* additional Mosaic metadata can be added to each page using `additionalData` - -This information can be used to create a dynamic index of stories from Storybook. - -## Installation - -`yarn add @jpmorganchase/mosaic-source-storybook` - -## Configuration - -The Storybook source is an [`HttpSource`](./https-source) and shares the same base configuration. -The `transformResponseToPagesModulePath` prop has a default transformer which creates a page for each matching Story. - -The `stories` option is an array of Storybook urls that are used as Sources. -Each story is matched on `kind` using the `filter` Regexp (or by `filterTags`). - -If specified, `additionalTags` and `additionalData` can be added to any matching pages. - -| Property | Description | Required | -| --------------- | ---------------------- | -------- | -| options.stories | array of story configs | Yes | - -`stories` is an array of Storybooks that you want to pull stories from - -| Property | Description | Required | -| -------------- | ---------------------------------------- | -------- | -| storyUrlPrefix | prefix url of the storybook deployment | Yes | -| description | description of the storybook stories | Yes | -| storiesUrl | url of the storybook's `stories.json` | No | -| filter | RegExp filter to match on | No | -| filterTags | Array of Storybook tags to match on | No | -| meta | additional data to add to matching pages | No | - -### Example Local Folder Source Definition - -``` -sources: [ - { - modulePath: '@jpmorganchase/mosaic-source-storybook', - namespace: 'salt', - options: { - prefixDir: '/salt/internal/community-index/story-navigation', - stories: [ - { - storiesUrl: 'https://storybook.saltdesignsystem.com/stories.json', - storyUrlPrefix: 'https://storybook.saltdesignsystem.com', - description: 'Navigation patterns created in the Salt Labs', - meta: { // can be any additional metadata you want added to the page's meta.data - tags: ['some-tag'], - data: { - owner: 'Salt', - source: 'STORYBOOK' - } - }, - filter: /Lab\/Tabs/ // this is a Regexp that matches on Storybook kind - } - ] - } - } -] -``` diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/custom-components b/packages/site/snapshots/latest/mosaic/configure/theme/custom-components deleted file mode 120000 index 498658a9..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/custom-components +++ /dev/null @@ -1 +0,0 @@ -custom-components.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/custom-components.mdx b/packages/site/snapshots/latest/mosaic/configure/theme/custom-components.mdx deleted file mode 100644 index c6a1a44e..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/custom-components.mdx +++ /dev/null @@ -1,574 +0,0 @@ ---- -title: Custom Components -layout: DetailTechnical -sidebar: - label: Custom Components - groupLabel: Custom Components - priority: 2 -lastModified: 1700475661346 -fullPath: /mosaic/configure/theme/custom-components.mdx -route: /mosaic/configure/theme/custom-components -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Theming Your Site - path: /mosaic/configure/theme/index - id: /mosaic/configure/theme/index.mdx -readingTime: - text: 2 min read - minutes: 1.86 - time: 111600 - words: 372 -tableOfContents: - - depth: 2 - level: 0 - id: create-components-folder - text: Create Components Folder - - depth: 2 - level: 0 - id: create-card-component - text: Create Card Component - - depth: 3 - level: 1 - id: card-component-indextsx - text: 'Card Component: index.tsx' - - depth: 3 - level: 1 - id: card-component-cardmodulecss - text: 'Card Component: card.module.css' - - depth: 2 - level: 0 - id: import-custom-card-component - text: Import Custom Card Component - - depth: 2 - level: 0 - id: use-your-custom-card-component - text: Use Your Custom Card Component -navigation: - prev: - title: Custom CSS - route: /mosaic/configure/theme/custom-css - group: Theming Your Site - next: - title: Admin - route: /mosaic/configure/admin/index - group: Admin -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Learn how to add your own custom components to your Mosaic site. - -## Create Components Folder - -To start, create a `components` folder under `src` where you'll store your custom components. - -``` -src/ -└── components/ -``` - -In this tutorial, we will create a custom `Card` component. - -## Create Card Component - -Inside the `components` folder, create a `card` folder, which will contain your React `Card` component. The `card` folder should include `index.tsx` and `card.module.css` files as shown in the structure below: - -``` -├── src/ -│ ├── components/ -│ │ └── card/ -│ │ ├── index.tsx -│ │ └── card.module.css -``` - -### Card Component: index.tsx - -Create your `Card` component within the `index.tsx` file: - -```tsx -import React from 'react'; -import styles from './card.module.css'; - -type CardProps = { - title: string; - content: string; -}; - -export const Card: React.FC = ({ title, content }) => { - return ( -
    -

    {title}

    -

    {content}

    -
    - ); -}; -``` - -### Card Component: card.module.css - -Define your component styles in the `card.module.css` file: - -```css -.card { - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - padding: 16px; - transition: box-shadow 0.2s ease-in-out; -} - -.card:hover { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); -} - -.card h2 { - color: #333; - font-size: 24px; - margin-bottom: 8px; -} - -.card p { - color: #666; - font-size: 16px; - line-height: 1.5; -} -``` - -In this example, we use a CSS file, but you can use whichever styling approach you prefer, such as [vanilla extract](https://vanilla-extract.style/). - -To export your `Card` component, create an `index.ts` file in the `components` folder: - -```ts -export * from './card'; -``` - -Your final folder structure should look like this: - -``` -├── src/ -│ ├── components/ -│ │ ├── card/ -│ │ │ ├── index.tsx -│ │ │ └── card.module.css -│ │ ├── index.ts -``` - -## Import Custom Card Component - -To use your custom `Card` component, import it into your site's `_app.tsx` file. Add the following line to your imports: - -```tsx -import * as myComponents from '../components'; -``` - -Replace this line: - -```tsx -const components = mosaicComponents; -``` - -with: - -```tsx -const components = { - ...mosaicComponents, - ...myComponents -}; -``` - -This will add your custom components to the site, and any custom components in `myComponents` will override the corresponding ones in `mosaicComponents`. The spread operator (`...`) merges both `mosaicComponents` and `myComponents` objects, giving priority to `myComponents` when there is a naming conflict. - -## Use Your Custom Card Component - -Now you're ready to use your custom `Card` component. Build and run your site, and add the `Card` component to an MDX file in your `docs` folder or another source: - -```mdx - -``` - -You can create and add more custom components to your Mosaic site by following the same process. diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/custom-css b/packages/site/snapshots/latest/mosaic/configure/theme/custom-css deleted file mode 120000 index b773cc37..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/custom-css +++ /dev/null @@ -1 +0,0 @@ -custom-css.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/custom-css.mdx b/packages/site/snapshots/latest/mosaic/configure/theme/custom-css.mdx deleted file mode 100644 index f50f921b..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/custom-css.mdx +++ /dev/null @@ -1,526 +0,0 @@ ---- -title: Custom CSS -layout: DetailTechnical -sidebar: - label: Custom CSS - groupLabel: Custom CSS - priority: 3 -lastModified: 1700475661346 -fullPath: /mosaic/configure/theme/custom-css.mdx -route: /mosaic/configure/theme/custom-css -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Theming Your Site - path: /mosaic/configure/theme/index - id: /mosaic/configure/theme/index.mdx -readingTime: - text: 2 min read - minutes: 1.885 - time: 113100 - words: 377 -tableOfContents: - - depth: 2 - level: 0 - id: create-a-css-folder - text: Create a CSS folder - - depth: 2 - level: 0 - id: create-your-theme - text: Create your theme - - depth: 2 - level: 0 - id: import-your-custom-css-into-your-site - text: Import your custom CSS into your site -navigation: - prev: - title: Theming Your Site - route: /mosaic/configure/theme/index - group: Theming Your Site - next: - title: Custom Components - route: /mosaic/configure/theme/custom-components - group: Theming Your Site -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -You can customize the look and feel of your Mosaic site by creating cusotm CSS files. Here is a step-by-step guide to help you create your own CSS theme. - -## Create a CSS folder - -To get started, create a folder named "css" in the "src" folder of your Mosaic project. - -``` -src/ -└── css/ -``` - -## Create your theme - -Inside the "css" folder, create a folder named "global". This is where you will add your custom styles. - -``` -src/ -└── css/ - ├── global/ - ├── index.css -``` - -Create an "index.css" file inside the "css" folder. This file will import your custom styles. - -```css -@import './global/'; -``` - -Inside your global folder, create a separate CSS file for each part of your site that you want to customize. For instance, if you want to change the text styling, create a "text.css" file inside the "global" folder. Here is an example of how your "text.css" file could look like: - -```css -h1 { - /* Set custom font size and weight */ - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -h2 { - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -h3 { - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -h4 { - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -h5 { - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -h6 { - font-size: /* insert value */ ; - font-weight: /* insert value */ ; -} - -p { - font-size: /* insert value */ ; - line-height: /* insert value */ ; -} -``` - -You can add as many CSS files as you need, depending on how much you want to customize your site. - -Create an "index.css" file inside the "global" folder. This file will import your custom styles, in this example we are importing our "text.css" file. - -```css -@import './text.css'; -``` - -Your "css" folder should now look like this: - -``` -src/ -└── css/ - ├── global/ - │ ├── text.css - │ ├── index.css - ├── index.css -``` - -## Import your custom CSS into your site - -To apply your custom styles to your Mosaic site, open your "\_app.tsx" file and add the following line to the bottom of your imports: - -```javascript -import '../css/index.css'; -``` - -Congratulations! You have successfully applied your custom CSS styles to your site. This example demonstrated how to create text styles, but you can use the same approach to customize other aspects of your site as well. diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/index b/packages/site/snapshots/latest/mosaic/configure/theme/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/index.mdx b/packages/site/snapshots/latest/mosaic/configure/theme/index.mdx deleted file mode 100644 index c2f44852..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/index.mdx +++ /dev/null @@ -1,439 +0,0 @@ ---- -title: Theming Your Site -layout: DetailTechnical -sidebar: - label: Theming Your Site - groupLabel: Theming Your Site - priority: 4 -lastModified: 1700475661346 -fullPath: /mosaic/configure/theme/index.mdx -route: /mosaic/configure/theme/index -breadcrumbs: - - label: Configure - path: /mosaic/configure/index - id: /mosaic/configure/index.mdx - - label: Theming Your Site - path: /mosaic/configure/theme/index - id: /mosaic/configure/theme/index.mdx -readingTime: - text: 1 min read - minutes: 0.42 - time: 25200 - words: 84 -tableOfContents: - - depth: 2 - level: 0 - id: customize-the-css - text: Customize the CSS - - depth: 2 - level: 0 - id: import-custom-components - text: Import Custom Components -navigation: - prev: - title: Snapshot AWS/S3 mode - route: /mosaic/configure/modes/snapshot-s3 - group: Modes of operation - next: - title: Custom CSS - route: /mosaic/configure/theme/custom-css - group: Theming Your Site -sidebarData: - - id: /mosaic/configure/index - kind: data - fullPath: /mosaic/configure/index.mdx - name: Configure - priority: 999 - data: - level: 2 - link: /mosaic/configure/index - - id: /mosaic/configure/modes - kind: group - childNodes: - - id: /mosaic/configure/modes/index - kind: data - fullPath: /mosaic/configure/modes/index.mdx - name: Modes of operation - priority: 999 - data: - level: 3 - link: /mosaic/configure/modes/index - - id: /mosaic/configure/modes/active - kind: data - fullPath: /mosaic/configure/modes/active.mdx - name: Active mode - data: - level: 3 - link: /mosaic/configure/modes/active - - id: /mosaic/configure/modes/snapshot-file - kind: data - fullPath: /mosaic/configure/modes/snapshot-file.mdx - name: Snapshot file mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-file - - id: /mosaic/configure/modes/snapshot-s3 - kind: data - fullPath: /mosaic/configure/modes/snapshot-s3.mdx - name: Snapshot AWS/S3 mode - data: - level: 3 - link: /mosaic/configure/modes/snapshot-s3 - name: Modes of operation - priority: 4 - - id: /mosaic/configure/theme - kind: group - childNodes: - - id: /mosaic/configure/theme/index - kind: data - fullPath: /mosaic/configure/theme/index.mdx - name: Theming Your Site - priority: 999 - data: - level: 3 - link: /mosaic/configure/theme/index - - id: /mosaic/configure/theme/custom-css - kind: data - fullPath: /mosaic/configure/theme/custom-css.mdx - name: Custom CSS - priority: 3 - data: - level: 3 - link: /mosaic/configure/theme/custom-css - - id: /mosaic/configure/theme/custom-components - kind: data - fullPath: /mosaic/configure/theme/custom-components.mdx - name: Custom Components - priority: 2 - data: - level: 3 - link: /mosaic/configure/theme/custom-components - name: Theming Your Site - priority: 4 - - id: /mosaic/configure/admin - kind: group - childNodes: - - id: /mosaic/configure/admin/index - kind: data - fullPath: /mosaic/configure/admin/index.mdx - name: Admin - priority: 999 - data: - level: 3 - link: /mosaic/configure/admin/index - name: Admin - priority: 3 - - id: /mosaic/configure/sources - kind: group - childNodes: - - id: /mosaic/configure/sources/index - kind: data - fullPath: /mosaic/configure/sources/index.mdx - name: Sources - priority: 999 - data: - level: 3 - link: /mosaic/configure/sources/index - - id: /mosaic/configure/sources/source-figma - kind: data - fullPath: /mosaic/configure/sources/source-figma.mdx - name: Figma - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-figma - - id: /mosaic/configure/sources/source-readme - kind: data - fullPath: /mosaic/configure/sources/source-readme.mdx - name: Readme Files - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-readme - - id: /mosaic/configure/sources/source-storybook - kind: data - fullPath: /mosaic/configure/sources/source-storybook.mdx - name: Storybook - priority: 5 - data: - level: 3 - link: /mosaic/configure/sources/source-storybook - - id: /mosaic/configure/sources/schedules - kind: data - fullPath: /mosaic/configure/sources/schedules.mdx - name: Schedules - priority: 4 - data: - level: 3 - link: /mosaic/configure/sources/schedules - - id: /mosaic/configure/sources/local-folder-source - kind: data - fullPath: /mosaic/configure/sources/local-folder-source.mdx - name: Local Folder Source - priority: 3 - data: - level: 3 - link: /mosaic/configure/sources/local-folder-source - - id: /mosaic/configure/sources/git-repo-source - kind: data - fullPath: /mosaic/configure/sources/git-repo-source.mdx - name: Git Repo Source - priority: 2 - data: - level: 3 - link: /mosaic/configure/sources/git-repo-source - - id: /mosaic/configure/sources/http-source - kind: data - fullPath: /mosaic/configure/sources/http-source.mdx - name: HTTP Source - priority: 1 - data: - level: 3 - link: /mosaic/configure/sources/http-source - name: Sources - priority: 3 - - id: /mosaic/configure/layouts - kind: group - childNodes: - - id: /mosaic/configure/layouts/index - kind: data - fullPath: /mosaic/configure/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/configure/layouts/index - - id: /mosaic/configure/layouts/detail-highlight - kind: data - fullPath: /mosaic/configure/layouts/detail-highlight.mdx - name: Detail Highlight - data: - level: 3 - link: /mosaic/configure/layouts/detail-highlight - - id: /mosaic/configure/layouts/detail-overview - kind: data - fullPath: /mosaic/configure/layouts/detail-overview.mdx - name: Detail Overview - data: - level: 3 - link: /mosaic/configure/layouts/detail-overview - - id: /mosaic/configure/layouts/detail-technical - kind: data - fullPath: /mosaic/configure/layouts/detail-technical.mdx - name: Detail Technical - data: - level: 3 - link: /mosaic/configure/layouts/detail-technical - - id: /mosaic/configure/layouts/landing - kind: data - fullPath: /mosaic/configure/layouts/landing.mdx - name: Landing Layout - data: - level: 3 - link: /mosaic/configure/layouts/landing - - id: /mosaic/configure/layouts/product-discover - kind: data - fullPath: /mosaic/configure/layouts/product-discover.mdx - name: Product Discover Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-discover - - id: /mosaic/configure/layouts/product-preview - kind: data - fullPath: /mosaic/configure/layouts/product-preview.mdx - name: Product Preview Layout - data: - level: 3 - link: /mosaic/configure/layouts/product-preview - name: Layouts - priority: 2 - - id: /mosaic/configure/plugins - kind: group - childNodes: - - id: /mosaic/configure/plugins/index - kind: data - fullPath: /mosaic/configure/plugins/index.mdx - name: Plugins - priority: 999 - data: - level: 3 - link: /mosaic/configure/plugins/index - - id: /mosaic/configure/plugins/lifecycle - kind: group - childNodes: - - id: /mosaic/configure/plugins/lifecycle/index - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/index.mdx - name: Lifecycle Events - priority: 999 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/index - - id: /mosaic/configure/plugins/lifecycle/after-source - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-source.mdx - name: $afterSource - priority: 5 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-source - - id: /mosaic/configure/plugins/lifecycle/before-send - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/before-send.mdx - name: $beforeSend - priority: 4 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/before-send - - id: /mosaic/configure/plugins/lifecycle/after-update - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/after-update.mdx - name: afterUpdate - priority: 3 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/after-update - - id: /mosaic/configure/plugins/lifecycle/should-clear-cache - kind: data - fullPath: /mosaic/configure/plugins/lifecycle/should-clear-cache.mdx - name: shouldClearCache - priority: 2 - data: - level: 4 - link: /mosaic/configure/plugins/lifecycle/should-clear-cache - - id: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - kind: data - fullPath: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources.mdx - name: shouldUpdateNamespaceSources - priority: 1 - data: - level: 4 - link: >- - /mosaic/configure/plugins/lifecycle/should-update-namespace-sources - name: Lifecycle Events - priority: 1 - - id: /mosaic/configure/plugins/alias-plugin - kind: data - fullPath: /mosaic/configure/plugins/alias-plugin.mdx - name: $AliasPlugin - data: - level: 3 - link: /mosaic/configure/plugins/alias-plugin - - id: /mosaic/configure/plugins/breadcrumbs-plugin - kind: data - fullPath: /mosaic/configure/plugins/breadcrumbs-plugin.mdx - name: BreadcrumbsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/breadcrumbs-plugin - - id: /mosaic/configure/plugins/broken-links-plugin - kind: data - fullPath: /mosaic/configure/plugins/broken-links-plugin.mdx - name: BrokenLinksPlugin - data: - level: 3 - link: /mosaic/configure/plugins/broken-links-plugin - - id: /mosaic/configure/plugins/codemod-plugin - kind: data - fullPath: /mosaic/configure/plugins/codemod-plugin.mdx - name: $CodeModPlugin - data: - level: 3 - link: /mosaic/configure/plugins/codemod-plugin - - id: /mosaic/configure/plugins/lazy-page-plugin - kind: data - fullPath: /mosaic/configure/plugins/lazy-page-plugin.mdx - name: LazyPagePlugin - data: - level: 3 - link: /mosaic/configure/plugins/lazy-page-plugin - - id: /mosaic/configure/plugins/pages-wthout-extensions-plugin - kind: data - fullPath: /mosaic/configure/plugins/pages-wthout-extensions-plugin.mdx - name: PagesWithoutFileExtPlugin - data: - level: 3 - link: /mosaic/configure/plugins/pages-wthout-extensions-plugin - - id: /mosaic/configure/plugins/public-assets-plugin - kind: data - fullPath: /mosaic/configure/plugins/public-assets-plugin.mdx - name: PublicAssetsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/public-assets-plugin - - id: /mosaic/configure/plugins/reading-time-plugin - kind: data - fullPath: /mosaic/configure/plugins/reading-time-plugin.mdx - name: ReadingTimePlugin - data: - level: 3 - link: /mosaic/configure/plugins/reading-time-plugin - - id: /mosaic/configure/plugins/ref-plugin - kind: data - fullPath: /mosaic/configure/plugins/ref-plugin.mdx - name: $RefPlugin - data: - level: 3 - link: /mosaic/configure/plugins/ref-plugin - - id: /mosaic/configure/plugins/search-index-plugin - kind: data - fullPath: /mosaic/configure/plugins/search-index-plugin.mdx - name: SearchIndexPlugin - data: - level: 3 - link: /mosaic/configure/plugins/search-index-plugin - - id: /mosaic/configure/plugins/shared-config-plugin - kind: data - fullPath: /mosaic/configure/plugins/shared-config-plugin.mdx - name: SharedConfigPlugin - data: - level: 3 - link: /mosaic/configure/plugins/shared-config-plugin - - id: /mosaic/configure/plugins/sidebar-plugin - kind: data - fullPath: /mosaic/configure/plugins/sidebar-plugin.mdx - name: SidebarPlugin - data: - level: 3 - link: /mosaic/configure/plugins/sidebar-plugin - - id: /mosaic/configure/plugins/site-map-plugin - kind: data - fullPath: /mosaic/configure/plugins/site-map-plugin.mdx - name: SiteMapPlugin - data: - level: 3 - link: /mosaic/configure/plugins/site-map-plugin - - id: /mosaic/configure/plugins/tag-plugin - kind: data - fullPath: /mosaic/configure/plugins/tag-plugin.mdx - name: $TagPlugin - data: - level: 3 - link: /mosaic/configure/plugins/tag-plugin - - id: /mosaic/configure/plugins/toc-plugin - kind: data - fullPath: /mosaic/configure/plugins/toc-plugin.mdx - name: TableOfContentsPlugin - data: - level: 3 - link: /mosaic/configure/plugins/toc-plugin - name: Plugins - priority: 1 ---- -# {meta.title} - -Create a unique look and feel for your Mosaic site by customizing the CSS theme and integrating your own UI components. - -## Customize the CSS - -Adapt various design elements of your Mosaic site to create a cohesive visual theme. Refer to our guide to learn more about crafting a custom CSS theme: - -* [CSS Theme Guide](./custom-css) - -## Import Custom Components - -Incorporate your own UI components, to tailor the look and functionality of your content. This tutorial will walk you through the process of adding custom components to your site: - -* [Adding Custom Components Tutorial](./custom-components) diff --git a/packages/site/snapshots/latest/mosaic/configure/theme/shared-config.json b/packages/site/snapshots/latest/mosaic/configure/theme/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/configure/theme/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/example/aliases b/packages/site/snapshots/latest/mosaic/example/aliases deleted file mode 120000 index 10bfd740..00000000 --- a/packages/site/snapshots/latest/mosaic/example/aliases +++ /dev/null @@ -1 +0,0 @@ -../author/aliases.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/content-fragment b/packages/site/snapshots/latest/mosaic/fragments/content-fragment deleted file mode 120000 index 5dec5e4d..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/content-fragment +++ /dev/null @@ -1 +0,0 @@ -content-fragment.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/content-fragment.mdx b/packages/site/snapshots/latest/mosaic/fragments/content-fragment.mdx deleted file mode 100644 index 20c4ccc7..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/content-fragment.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Content Fragment -sidebar: - label: Content Fragment - groupLabel: Content Fragment - exclude: true -lastModified: 1700475661347 -fullPath: /mosaic/fragments/content-fragment.mdx -route: /mosaic/fragments/content-fragment -breadcrumbs: - - label: Fragments - path: /mosaic/fragments/index - id: /mosaic/fragments/index.mdx -readingTime: - text: 1 min read - minutes: 0.065 - time: 3900 - words: 13 -tableOfContents: [] -sidebarData: - - id: /mosaic/fragments/index - kind: data - fullPath: /mosaic/fragments/index.mdx - name: Fragments - priority: 999 - data: - level: 2 - link: /mosaic/fragments/index ---- -#### Fragment Title - -This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`. diff --git a/packages/site/snapshots/latest/mosaic/fragments/index b/packages/site/snapshots/latest/mosaic/fragments/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/index.mdx b/packages/site/snapshots/latest/mosaic/fragments/index.mdx deleted file mode 100644 index b5372a66..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/index.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Fragments -layout: DetailTechnical -lastModified: 1700475661347 -fullPath: /mosaic/fragments/index.mdx -route: /mosaic/fragments/index -breadcrumbs: - - label: Fragments - path: /mosaic/fragments/index - id: /mosaic/fragments/index.mdx -sidebar: - label: Fragments - groupLabel: Fragments -readingTime: - text: 1 min read - minutes: 0.075 - time: 4500 - words: 15 -tableOfContents: [] -sidebarData: - - id: /mosaic/fragments/index - kind: data - fullPath: /mosaic/fragments/index.mdx - name: Fragments - priority: 999 - data: - level: 2 - link: /mosaic/fragments/index ---- -# {meta.title} - -This folder contains example fragments that are referenced and rendered in the Fragments docs page. diff --git a/packages/site/snapshots/latest/mosaic/fragments/shared-config.json b/packages/site/snapshots/latest/mosaic/fragments/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/sidebar.json b/packages/site/snapshots/latest/mosaic/fragments/sidebar.json deleted file mode 100644 index c899e5c7..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/fragments/index","kind":"data","fullPath":"/mosaic/fragments/index.mdx","name":"Fragments","priority":999,"data":{"level":2,"link":"/mosaic/fragments/index"}}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/tile-a b/packages/site/snapshots/latest/mosaic/fragments/tile-a deleted file mode 120000 index 7ba498d0..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/tile-a +++ /dev/null @@ -1 +0,0 @@ -tile-a.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/tile-a.mdx b/packages/site/snapshots/latest/mosaic/fragments/tile-a.mdx deleted file mode 100644 index 3486ccdf..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/tile-a.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Tile A -sidebar: - label: Tile A - groupLabel: Tile A - exclude: true -lastModified: 1700475661347 -fullPath: /mosaic/fragments/tile-a.mdx -route: /mosaic/fragments/tile-a -breadcrumbs: - - label: Fragments - path: /mosaic/fragments/index - id: /mosaic/fragments/index.mdx -readingTime: - text: 0 min read - minutes: 0 - time: 0 - words: 0 -tableOfContents: [] -sidebarData: - - id: /mosaic/fragments/index - kind: data - fullPath: /mosaic/fragments/index.mdx - name: Fragments - priority: 999 - data: - level: 2 - link: /mosaic/fragments/index ---- - diff --git a/packages/site/snapshots/latest/mosaic/fragments/tile-b b/packages/site/snapshots/latest/mosaic/fragments/tile-b deleted file mode 120000 index abc0a5ba..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/tile-b +++ /dev/null @@ -1 +0,0 @@ -tile-b.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/fragments/tile-b.mdx b/packages/site/snapshots/latest/mosaic/fragments/tile-b.mdx deleted file mode 100644 index a1f34f4d..00000000 --- a/packages/site/snapshots/latest/mosaic/fragments/tile-b.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Tile B -sidebar: - label: Tile B - groupLabel: Tile B - exclude: true -lastModified: 1700475661347 -fullPath: /mosaic/fragments/tile-b.mdx -route: /mosaic/fragments/tile-b -breadcrumbs: - - label: Fragments - path: /mosaic/fragments/index - id: /mosaic/fragments/index.mdx -readingTime: - text: 0 min read - minutes: 0 - time: 0 - words: 0 -tableOfContents: [] -sidebarData: - - id: /mosaic/fragments/index - kind: data - fullPath: /mosaic/fragments/index.mdx - name: Fragments - priority: 999 - data: - level: 2 - link: /mosaic/fragments/index ---- - diff --git a/packages/site/snapshots/latest/mosaic/getting-started/create-a-site b/packages/site/snapshots/latest/mosaic/getting-started/create-a-site deleted file mode 120000 index 625120be..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/create-a-site +++ /dev/null @@ -1 +0,0 @@ -create-a-site.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/getting-started/create-a-site.mdx b/packages/site/snapshots/latest/mosaic/getting-started/create-a-site.mdx deleted file mode 100644 index 1d880597..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/create-a-site.mdx +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Create a Site -layout: DetailTechnical -sidebar: - label: Create a Site - groupLabel: Create a Site - priority: 8 -lastModified: 1700475661347 -fullPath: /mosaic/getting-started/create-a-site.mdx -route: /mosaic/getting-started/create-a-site -breadcrumbs: - - label: Getting Started - path: /mosaic/getting-started/index - id: /mosaic/getting-started/index.mdx -readingTime: - text: 2 min read - minutes: 1.31 - time: 78600 - words: 262 -tableOfContents: - - depth: 2 - level: 0 - id: prerequisites - text: Prerequisites - - depth: 2 - level: 0 - id: step-1-generate-a-mosaic-site - text: 'Step 1: Generate a Mosaic site' - - depth: 2 - level: 0 - id: step-2-serve-the-site - text: 'Step 2: Serve the site' - - depth: 3 - level: 1 - id: set-up-git-credentials - text: Set up Git credentials - - depth: 3 - level: 1 - id: serve-command - text: Serve command - - depth: 2 - level: 0 - id: next-steps - text: 'Next Steps:' -navigation: - prev: - title: Getting Started - route: /mosaic/getting-started/index - next: - title: Publish a site to AWS - route: /mosaic/getting-started/publish-site-to-aws -sidebarData: - - id: /mosaic/getting-started/index - kind: data - fullPath: /mosaic/getting-started/index.mdx - name: Getting Started - priority: 1007 - data: - level: 2 - link: /mosaic/getting-started/index - - id: /mosaic/getting-started/create-a-site - kind: data - fullPath: /mosaic/getting-started/create-a-site.mdx - name: Create a Site - priority: 8 - data: - level: 2 - link: /mosaic/getting-started/create-a-site - - id: /mosaic/getting-started/publish-site-to-aws - kind: data - fullPath: /mosaic/getting-started/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/getting-started/publish-site-to-aws ---- -# {meta.title} - -In this guide you will learn how to generate and serve a Mosaic site. - -## Prerequisites - -To begin setting up a Mosaic site, you need to have the following software installed: - -1. Yarn v1 -2. Node.js v18 or higher - -## Step 1: Generate a Mosaic site - -Run the following command in your project directory to generate a new Mosaic site: - -```bash -npx @jpmorganchase/mosaic-create-site create -o my-sample-site -``` - -This command creates a new Mosaic site in the my-sample-site directory. - -Next, navigate to the site directory: - -```bash -cd my-sample-site -``` - -## Step 2: Serve the site - -The example site you have generated comes preconfigured with two [sources](../configure/sources/index): a remote repository and a local docs folder. Sources are used by Mosaic to pull content from disparate locations and merge them into a single virtual filesystem that can be used by a Mosaic site. - -### Set up Git credentials - -If you want the site to read from remote repositories, you need to set up an environment variable to store your Git credentials. Follow these steps: - -1. Open a terminal or command prompt. - -2. Replace `` and `` in the following commands with your actual Git username and personal access token. - -On Unix: - -```bash -export MOSAIC_DOCS_CLONE_CREDENTIALS=":" -``` - -On Windows: - -```bash -set MOSAIC_DOCS_CLONE_CREDENTIALS=":" -``` - -This sets the MOSAIC\_DOCS\_CLONE\_CREDENTIALS environment variable with your Git credentials. - -### Serve command - -Now you can serve your Mosaic site by running the following command: - -```bash -yarn serve -``` - -Access your Mosaic site from a browser using the following URLs: - -* To browse the content from your local source: http://localhost:3000/local -* To browse the content from the Mosaic Git repo source: http://localhost:3000/mosaic - -That's it! Your Mosaic site is now up and running. - -## Next Steps: - -1. [Deploy your Mosaic site to AWS or Vercel for production use.](../publish/index) -2. [Create more pages to expand your site's content.](../author/index) -3. [Configure your own sources in the mosaic.config.mjs file to pull content from different locations.](../configure/sources/index) -4. [Theme your site](../configure/theme/index) diff --git a/packages/site/snapshots/latest/mosaic/getting-started/index b/packages/site/snapshots/latest/mosaic/getting-started/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/getting-started/index.mdx b/packages/site/snapshots/latest/mosaic/getting-started/index.mdx deleted file mode 100644 index 0e5cd146..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/index.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Getting Started -layout: DetailTechnical -sidebar: - label: Getting Started - groupLabel: Getting Started - priority: 10 -lastModified: 1700475661347 -fullPath: /mosaic/getting-started/index.mdx -route: /mosaic/getting-started/index -breadcrumbs: - - label: Getting Started - path: /mosaic/getting-started/index - id: /mosaic/getting-started/index.mdx -readingTime: - text: 1 min read - minutes: 0.08 - time: 4800 - words: 16 -tableOfContents: [] -navigation: - next: - title: Create a Site - route: /mosaic/getting-started/create-a-site -sidebarData: - - id: /mosaic/getting-started/index - kind: data - fullPath: /mosaic/getting-started/index.mdx - name: Getting Started - priority: 1007 - data: - level: 2 - link: /mosaic/getting-started/index - - id: /mosaic/getting-started/create-a-site - kind: data - fullPath: /mosaic/getting-started/create-a-site.mdx - name: Create a Site - priority: 8 - data: - level: 2 - link: /mosaic/getting-started/create-a-site - - id: /mosaic/getting-started/publish-site-to-aws - kind: data - fullPath: /mosaic/getting-started/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/getting-started/publish-site-to-aws ---- -# Getting Started with Mosaic - -Follow our step-by-step guides to quickly create and deploy your first Mosaic site. - - - - - - diff --git a/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws b/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws deleted file mode 120000 index 01423528..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws +++ /dev/null @@ -1 +0,0 @@ -publish-site-to-aws.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws.mdx b/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws.mdx deleted file mode 100644 index 93bb8ddb..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/publish-site-to-aws.mdx +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: Publish a site to AWS -layout: DetailTechnical -lastModified: 1700475661347 -fullPath: /mosaic/getting-started/publish-site-to-aws.mdx -route: /mosaic/getting-started/publish-site-to-aws -breadcrumbs: - - label: Getting Started - path: /mosaic/getting-started/index - id: /mosaic/getting-started/index.mdx -sidebar: - label: Publish a site to AWS - groupLabel: Publish a site to AWS -readingTime: - text: 2 min read - minutes: 1.195 - time: 71700 - words: 239 -tableOfContents: - - depth: 2 - level: 0 - id: step-1-generate-a-mosaic-site - text: 'Step 1: Generate a Mosaic site' - - depth: 2 - level: 0 - id: step-2-create-a-github-repository - text: 'Step 2: Create a Github repository' - - depth: 2 - level: 0 - id: step-3-generate-a-snapshot-of-content - text: 'Step 3: Generate a snapshot of content' - - depth: 2 - level: 0 - id: step-4-configure-environment-for-s3 - text: 'Step 4: Configure environment for S3' - - depth: 2 - level: 0 - id: step-5-setup-aws - text: 'Step 5: Setup AWS' - - depth: 2 - level: 0 - id: step-7-configure-your-aws-app - text: 'Step 7: Configure your AWS app' - - depth: 2 - level: 0 - id: step-8-upload-your-snapshot - text: 'Step 8: Upload your snapshot' -navigation: - prev: - title: Create a Site - route: /mosaic/getting-started/create-a-site -sidebarData: - - id: /mosaic/getting-started/index - kind: data - fullPath: /mosaic/getting-started/index.mdx - name: Getting Started - priority: 1007 - data: - level: 2 - link: /mosaic/getting-started/index - - id: /mosaic/getting-started/create-a-site - kind: data - fullPath: /mosaic/getting-started/create-a-site.mdx - name: Create a Site - priority: 8 - data: - level: 2 - link: /mosaic/getting-started/create-a-site - - id: /mosaic/getting-started/publish-site-to-aws - kind: data - fullPath: /mosaic/getting-started/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/getting-started/publish-site-to-aws ---- -# {meta.title} - -Publish a site to AWS using S3 snapshots. - -## Step 1: Generate a Mosaic site - -If you have already created your Mosaic site, skip ahead to step 2. - -``` -> npx @jpmorganchase/mosaic-create-site -o my-sample-site -> cd my-sample-site -``` - -## Step 2: Create a Github repository - -``` -> git init -> git remote add origin git@github.com:username/my-sample-site.git -> git add . -> git commit -m "initial commit" -> git push origin main -``` - -## Step 3: Generate a snapshot of content - -Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself. - -``` -> yarn gen:snapshot -``` - -## Step 4: Configure environment for S3 - -``` -> export MOSAIC_MODE="snapshot-s3" -> export MOSAIC_S3_BUCKET="" -> export MOSAIC_S3_REGION="" -> export MOSAIC_S3_ACCESS_KEY_ID=""" -> export MOSAIC_S3_SECRET_ACCESS_KEY="" -> yarn mosaic upload -S ./snapshots/latest -``` - -## Step 5: Setup AWS - -Switch to the [AWS Amplify](https://aws.amazon.com/amplify/hosting/) console and deploy your app as a SSR application by following the [AWS docs](https://docs.amplify.aws/guides/hosting/nextjs/q/platform/js/). - -Setup an S3 bucket as per the [AWS S3 docs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html). - -## Step 7: Configure your AWS app - -Add the environment vars to the hosted app via your console - -``` -MOSAIC_MODE="snapshot-s3" -MOSAIC_S3_BUCKET="" -MOSAIC_S3_REGION="" -MOSAIC_S3_ACCESS_KEY_ID=""" -MOSAIC_S3_SECRET_ACCESS_KEY="" -``` - -Add the following build settings - -``` -version: 1 -frontend: - phases: - preBuild: - commands: - - yarn install - - env | grep -e MOSAIC >> .env.production - build: - commands: - - yarn run build - artifacts: - baseDirectory: .next - files: - - '**/*' - cache: - paths: - - node_modules/**/* -``` - -Ensure the Node is set to 16 - -## Step 8: Upload your snapshot - -Upload your snapshot to S3 storage. - -``` -> yarn mosaic upload -S ./snapshots/latest -``` diff --git a/packages/site/snapshots/latest/mosaic/getting-started/shared-config.json b/packages/site/snapshots/latest/mosaic/getting-started/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/getting-started/sidebar.json b/packages/site/snapshots/latest/mosaic/getting-started/sidebar.json deleted file mode 100644 index b61d17f0..00000000 --- a/packages/site/snapshots/latest/mosaic/getting-started/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/getting-started/index","kind":"data","fullPath":"/mosaic/getting-started/index.mdx","name":"Getting Started","priority":1007,"data":{"level":2,"link":"/mosaic/getting-started/index"}},{"id":"/mosaic/getting-started/create-a-site","kind":"data","fullPath":"/mosaic/getting-started/create-a-site.mdx","name":"Create a Site","priority":8,"data":{"level":2,"link":"/mosaic/getting-started/create-a-site"}},{"id":"/mosaic/getting-started/publish-site-to-aws","kind":"data","fullPath":"/mosaic/getting-started/publish-site-to-aws.mdx","name":"Publish a site to AWS","data":{"level":2,"link":"/mosaic/getting-started/publish-site-to-aws"}}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/index b/packages/site/snapshots/latest/mosaic/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/index.mdx b/packages/site/snapshots/latest/mosaic/index.mdx deleted file mode 100644 index ac20a4ba..00000000 --- a/packages/site/snapshots/latest/mosaic/index.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Mosaic -layout: Landing -sharedConfig: - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Getting Started - link: /mosaic/getting-started/index - - title: Configure - link: /mosaic/configure/index - - title: Author - link: /mosaic/author/index - - title: Publish - link: /mosaic/publish/index - footer: - description: Coming soon - title: Mosaic BETA - href: /mosaic -lastModified: 1700475661348 -fullPath: /mosaic/index.mdx -route: /mosaic/index -breadcrumbs: [] -sidebar: - label: Mosaic - groupLabel: Mosaic -readingTime: - text: 1 min read - minutes: 0.2 - time: 12000 - words: 40 -tableOfContents: [] ---- - - -True to its name, Mosaic brings together several concepts—including content, design and technical infrastructure—to deliver a unified website experience that is truly greater than the sum of its individual parts. - -With Mosaic, you can: - - - - Don't move your content where it does not belong. Compose content from remote data sources which - are pulled at runtime by our content aggregator. - - - - Visualize your content with your own theme, layouts and components or use the Mosaic Design - language. - - - - Extend the existing code and add your own content source types through our simple plugin - architecture. - - - - Publish your content through Server Side Rendering (SSR) or generate a snapshot of your content - and serve it as a Statically Generated Site (SGS). - - - -Creating a website has never been so easy! diff --git a/packages/site/snapshots/latest/mosaic/products/producta b/packages/site/snapshots/latest/mosaic/products/producta deleted file mode 120000 index 06983c4d..00000000 --- a/packages/site/snapshots/latest/mosaic/products/producta +++ /dev/null @@ -1 +0,0 @@ -producta.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/products/producta.mdx b/packages/site/snapshots/latest/mosaic/products/producta.mdx deleted file mode 100644 index 09708c01..00000000 --- a/packages/site/snapshots/latest/mosaic/products/producta.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Product A -description: Mosaic Product A -layout: ProductDiscover -tags: - - in-stock -data: - name: Product A -lastModified: 1700475661337 -fullPath: /mosaic/products/producta.mdx -route: /mosaic/products/producta -breadcrumbs: [] -sidebar: - label: Product A - groupLabel: Product A -readingTime: - text: 0 min read - minutes: 0 - time: 0 - words: 0 -navigation: - next: - title: Product B - route: /mosaic/products/productb -sidebarData: - - id: /mosaic/products/producta - kind: data - fullPath: /mosaic/products/producta.mdx - name: Product A - data: - level: 2 - link: /mosaic/products/producta - - id: /mosaic/products/productb - kind: data - fullPath: /mosaic/products/productb.mdx - name: Product B - data: - level: 2 - link: /mosaic/products/productb ---- - diff --git a/packages/site/snapshots/latest/mosaic/products/productb b/packages/site/snapshots/latest/mosaic/products/productb deleted file mode 120000 index 9f75125e..00000000 --- a/packages/site/snapshots/latest/mosaic/products/productb +++ /dev/null @@ -1 +0,0 @@ -productb.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/products/productb.mdx b/packages/site/snapshots/latest/mosaic/products/productb.mdx deleted file mode 100644 index 310986cb..00000000 --- a/packages/site/snapshots/latest/mosaic/products/productb.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Product B -description: Mosaic Product B -layout: ProductDiscover -tags: - - out-of-stock -data: - name: Product B -lastModified: 1700475661337 -fullPath: /mosaic/products/productb.mdx -route: /mosaic/products/productb -breadcrumbs: [] -sidebar: - label: Product B - groupLabel: Product B -readingTime: - text: 0 min read - minutes: 0 - time: 0 - words: 0 -navigation: - prev: - title: Product A - route: /mosaic/products/producta -sidebarData: - - id: /mosaic/products/producta - kind: data - fullPath: /mosaic/products/producta.mdx - name: Product A - data: - level: 2 - link: /mosaic/products/producta - - id: /mosaic/products/productb - kind: data - fullPath: /mosaic/products/productb.mdx - name: Product B - data: - level: 2 - link: /mosaic/products/productb ---- - diff --git a/packages/site/snapshots/latest/mosaic/products/sidebar.json b/packages/site/snapshots/latest/mosaic/products/sidebar.json deleted file mode 100644 index 9e3981a1..00000000 --- a/packages/site/snapshots/latest/mosaic/products/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/products/producta","kind":"data","fullPath":"/mosaic/products/producta.mdx","name":"Product A","data":{"level":2,"link":"/mosaic/products/producta"}},{"id":"/mosaic/products/productb","kind":"data","fullPath":"/mosaic/products/productb.mdx","name":"Product B","data":{"level":2,"link":"/mosaic/products/productb"}}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/publish/index b/packages/site/snapshots/latest/mosaic/publish/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/publish/index.mdx b/packages/site/snapshots/latest/mosaic/publish/index.mdx deleted file mode 100644 index 542f4904..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/index.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Publish -layout: DetailTechnical -sidebar: - label: Publish - groupLabel: Publish - priority: 2 -lastModified: 1700475661348 -fullPath: /mosaic/publish/index.mdx -route: /mosaic/publish/index -breadcrumbs: - - label: Publish - path: /mosaic/publish/index - id: /mosaic/publish/index.mdx -readingTime: - text: 1 min read - minutes: 0.755 - time: 45300 - words: 151 -tableOfContents: - - depth: 2 - level: 0 - id: create-your-first-site - text: Create your first site -navigation: - next: - title: Publish a site to AWS - route: /mosaic/publish/publish-site-to-aws -sidebarData: - - id: /mosaic/publish/index - kind: data - fullPath: /mosaic/publish/index.mdx - name: Publish - priority: 999 - data: - level: 2 - link: /mosaic/publish/index - - id: /mosaic/publish/publish-site-to-aws - kind: data - fullPath: /mosaic/publish/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/publish/publish-site-to-aws - - id: /mosaic/publish/publish-site-to-vercel - kind: data - fullPath: /mosaic/publish/publish-site-to-vercel.mdx - name: Publish a site to Vercel - data: - level: 2 - link: /mosaic/publish/publish-site-to-vercel ---- -# {meta.title} - -To create your first Mosaic site, we have created a command line generator that scaffolds a *standard* site. - -A *standard* site offers - -* an out the box, working site, which showcases local and remote content sources -* a minimal set of files that can be configured with your own components, themes, layouts, sources and plugins -* an update path that enables you to update Mosaic, independently of your own configuration - -## Create your first site - -Install the Mosaic create site script. - -``` -> yarn global add @jpmorganchase/mosaic-create-site -``` - -Create a directory for your site and run the `mosaic-create-site` script. - -``` -> mkdir mosaic-sample-site -> cd mosaic-sample-site -> mosaic-create-site -f . -``` - -Define the environment variable, which enables us to access your remote repo. - -``` -> export MOSAIC_DOCS_CLONE_CREDENTIALS="" -``` - -The `MOSAIC_DOCS_CLONE_CREDENTIALS` environment variable is composed of your git username and your PAT token. -Follow these [docs](https://docs.github.com/en/enterprise-server@3.4/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) to see how to create your own PAT token. - -Your site is ready to run. - -``` -> yarn serve -``` - -In your browser load `http://localhost:3000` - -Congratulations, you have created your first Mosaic site. diff --git a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws b/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws deleted file mode 120000 index 01423528..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws +++ /dev/null @@ -1 +0,0 @@ -publish-site-to-aws.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws.mdx b/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws.mdx deleted file mode 100644 index 544754a3..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-aws.mdx +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Publish a site to AWS -layout: DetailTechnical -lastModified: 1700475661348 -fullPath: /mosaic/publish/publish-site-to-aws.mdx -route: /mosaic/publish/publish-site-to-aws -breadcrumbs: - - label: Publish - path: /mosaic/publish/index - id: /mosaic/publish/index.mdx -sidebar: - label: Publish a site to AWS - groupLabel: Publish a site to AWS -readingTime: - text: 1 min read - minutes: 0.52 - time: 31200 - words: 104 -tableOfContents: [] -navigation: - prev: - title: Publish - route: /mosaic/publish/index - next: - title: Publish a site to Vercel - route: /mosaic/publish/publish-site-to-vercel -sidebarData: - - id: /mosaic/publish/index - kind: data - fullPath: /mosaic/publish/index.mdx - name: Publish - priority: 999 - data: - level: 2 - link: /mosaic/publish/index - - id: /mosaic/publish/publish-site-to-aws - kind: data - fullPath: /mosaic/publish/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/publish/publish-site-to-aws - - id: /mosaic/publish/publish-site-to-vercel - kind: data - fullPath: /mosaic/publish/publish-site-to-vercel.mdx - name: Publish a site to Vercel - data: - level: 2 - link: /mosaic/publish/publish-site-to-vercel ---- -# {meta.title} - -A Mosaic site is a [Next.Js](https://nextjs.org/) app. - -To publish a Next.Js App to AWS, deploy your app as a SSR application by following the [AWS docs](https://docs.amplify.aws/guides/hosting/nextjs/q/platform/js/). - -Once the basic app has been configured, add the Mosaic specifics. - -Add the environment vars to the hosted app via the Amplify console - -``` -MOSAIC_MODE="snapshot-s3" -MOSAIC_S3_BUCKET="" -MOSAIC_S3_REGION="" -MOSAIC_S3_ACCESS_KEY_ID=""" -MOSAIC_S3_SECRET_ACCESS_KEY="" -``` - -Add the following build settings - -``` -version: 1 -frontend: - phases: - preBuild: - commands: - - yarn install - - env | grep -e MOSAIC >> .env.production - build: - commands: - - yarn run build - artifacts: - baseDirectory: .next - files: - - '**/*' - cache: - paths: - - node_modules/**/* -``` - -Ensure the Node is set to 16 diff --git a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel b/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel deleted file mode 120000 index 11694f65..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel +++ /dev/null @@ -1 +0,0 @@ -publish-site-to-vercel.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel.mdx b/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel.mdx deleted file mode 100644 index cbf48a3c..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/publish-site-to-vercel.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Publish a site to Vercel -layout: DetailTechnical -lastModified: 1700475661348 -fullPath: /mosaic/publish/publish-site-to-vercel.mdx -route: /mosaic/publish/publish-site-to-vercel -breadcrumbs: - - label: Publish - path: /mosaic/publish/index - id: /mosaic/publish/index.mdx -sidebar: - label: Publish a site to Vercel - groupLabel: Publish a site to Vercel -readingTime: - text: 1 min read - minutes: 0.99 - time: 59400 - words: 198 -tableOfContents: - - depth: 2 - level: 0 - id: deployment - text: Deployment - - depth: 3 - level: 1 - id: 1-update-config-file - text: 1. Update Config File - - depth: 3 - level: 1 - id: 2-set-environment-variables - text: 2. Set Environment Variables - - depth: 3 - level: 1 - id: 3-run-build-and-deploy - text: 3. Run Build and Deploy - - depth: 2 - level: 0 - id: output-file-tracing - text: Output File Tracing -navigation: - prev: - title: Publish a site to AWS - route: /mosaic/publish/publish-site-to-aws -sidebarData: - - id: /mosaic/publish/index - kind: data - fullPath: /mosaic/publish/index.mdx - name: Publish - priority: 999 - data: - level: 2 - link: /mosaic/publish/index - - id: /mosaic/publish/publish-site-to-aws - kind: data - fullPath: /mosaic/publish/publish-site-to-aws.mdx - name: Publish a site to AWS - data: - level: 2 - link: /mosaic/publish/publish-site-to-aws - - id: /mosaic/publish/publish-site-to-vercel - kind: data - fullPath: /mosaic/publish/publish-site-to-vercel.mdx - name: Publish a site to Vercel - data: - level: 2 - link: /mosaic/publish/publish-site-to-vercel ---- -# {meta.title} - -A Mosaic site is a [Next.Js](https://nextjs.org/) app. - -To publish a Next.Js App to Vercel, refer to the [Vercel docs](https://nextjs.org/learn/basics/deploying-nextjs-app/deploy). - -## Deployment - -As the [vercel platform](https://vercel.com/) hosts static content you will need to deploy a mosaic snapshot. There is no option to run mosaic in [active mode](../configure/modes/active). - -### 1. Update Config File - -Add the following to the mosaic config file used by your site: - -``` - deployment: { mode: 'snapshot-file', platform: 'vercel' } -``` - -### 2. Set Environment Variables - -Set 2 [environment variables](https://vercel.com/docs/concepts/deployments/environments#environment-variables) in the vercel dashboard. - -| Variable Name | Value | -| ------------------- | ----------------- | -| MOSAIC\_MODE | snapshot-file | -| MOSAIC\_SNAPSHOT\_DIR | snapshots/latest. | - -### 3. Run Build and Deploy - -The `build` command used by vercel must run `yarn build` followed by `yarn deploy` - -The `deploy` command is needed to workaround an [output file tracing](#output-file-tracing) problem. - -Example: - -``` -yarn build && yarn deploy -``` - -## Output File Tracing - -[Output File Tracing](https://nextjs.org/docs/advanced-features/output-file-tracing) is a feature of Next.js that uses static analysis -to determine what files are needed to deploy a production version of an application. - -Due to the architecture of mosaic, snapshot files can be ignored by this process and therefore excluded from the build artifacts deployed by vercel. - -If you are deploying your site to the [vercel platform](https://vercel.com/) then the mosaic site has a `deploy` command that will update the nextjs output trace to include the snapshot files. diff --git a/packages/site/snapshots/latest/mosaic/publish/shared-config.json b/packages/site/snapshots/latest/mosaic/publish/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/publish/sidebar.json b/packages/site/snapshots/latest/mosaic/publish/sidebar.json deleted file mode 100644 index a6e2488d..00000000 --- a/packages/site/snapshots/latest/mosaic/publish/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/publish/index","kind":"data","fullPath":"/mosaic/publish/index.mdx","name":"Publish","priority":999,"data":{"level":2,"link":"/mosaic/publish/index"}},{"id":"/mosaic/publish/publish-site-to-aws","kind":"data","fullPath":"/mosaic/publish/publish-site-to-aws.mdx","name":"Publish a site to AWS","data":{"level":2,"link":"/mosaic/publish/publish-site-to-aws"}},{"id":"/mosaic/publish/publish-site-to-vercel","kind":"data","fullPath":"/mosaic/publish/publish-site-to-vercel.mdx","name":"Publish a site to Vercel","data":{"level":2,"link":"/mosaic/publish/publish-site-to-vercel"}}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/shared-config.json b/packages/site/snapshots/latest/mosaic/shared-config.json deleted file mode 100644 index 0cb2e712..00000000 --- a/packages/site/snapshots/latest/mosaic/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -{"config":{"header":{"homeLink":"/mosaic/index","title":"Mosaic (BETA)","logo":"/img/favicon.png","searchNamespace":"mosaic","menu":[{"title":"Getting Started","link":"/mosaic/getting-started/index"},{"title":"Configure","link":"/mosaic/configure/index"},{"title":"Author","link":"/mosaic/author/index"},{"title":"Publish","link":"/mosaic/publish/index"}]},"footer":{"description":"Coming soon","title":"Mosaic BETA","href":"/mosaic"}}} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/sitemap b/packages/site/snapshots/latest/mosaic/sitemap deleted file mode 120000 index 03737440..00000000 --- a/packages/site/snapshots/latest/mosaic/sitemap +++ /dev/null @@ -1 +0,0 @@ -sitemap.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/sitemap.mdx b/packages/site/snapshots/latest/mosaic/sitemap.mdx deleted file mode 100644 index 2b468224..00000000 --- a/packages/site/snapshots/latest/mosaic/sitemap.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Sitemap -description: Mosaic namespaces sitemap -layout: ProductDiscover -lastModified: 1707351262296 -fullPath: /mosaic/sitemap.mdx -route: /mosaic/sitemap -breadcrumbs: [] -sidebar: - label: Sitemap - groupLabel: Sitemap -readingTime: - text: 1 min read - minutes: 0.005 - time: 300 - words: 1 -tableOfContents: [] ---- -# Sitemap - - diff --git a/packages/site/snapshots/latest/mosaic/test/aliases/index b/packages/site/snapshots/latest/mosaic/test/aliases/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/test/aliases/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/aliases/index.mdx b/packages/site/snapshots/latest/mosaic/test/aliases/index.mdx deleted file mode 100644 index c1659f1f..00000000 --- a/packages/site/snapshots/latest/mosaic/test/aliases/index.mdx +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Aliases Test -layout: FullWidth -lastModified: 1700475661348 -fullPath: /mosaic/test/aliases/index.mdx -route: /mosaic/test/aliases/index -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Aliases Test - path: /mosaic/test/aliases/index - id: /mosaic/test/aliases/index.mdx -sidebar: - label: Aliases Test - groupLabel: Aliases Test -readingTime: - text: 1 min read - minutes: 0.035 - time: 2100 - words: 7 -tableOfContents: [] -navigation: - prev: - title: Refs Data - route: /mosaic/test/refs/data - group: Refs Test - next: - title: Tags Test - route: /mosaic/test/tags/index - group: Tags Test -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -# {meta.title} - -This page is the alias test page. diff --git a/packages/site/snapshots/latest/mosaic/test/aliases/shared-config.json b/packages/site/snapshots/latest/mosaic/test/aliases/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/test/aliases/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/example b/packages/site/snapshots/latest/mosaic/test/example deleted file mode 120000 index 7e447f1a..00000000 --- a/packages/site/snapshots/latest/mosaic/test/example +++ /dev/null @@ -1 +0,0 @@ -aliases/index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/index b/packages/site/snapshots/latest/mosaic/test/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/test/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/index.mdx b/packages/site/snapshots/latest/mosaic/test/index.mdx deleted file mode 100644 index 89437097..00000000 --- a/packages/site/snapshots/latest/mosaic/test/index.mdx +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: Test -layout: DetailTechnical -sidebar: - label: Test - groupLabel: Test - priority: 3 -lastModified: 1700475661349 -fullPath: /mosaic/test/index.mdx -route: /mosaic/test/index -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx -readingTime: - text: 1 min read - minutes: 0.02 - time: 1200 - words: 4 -tableOfContents: [] -navigation: - next: - title: Layouts - route: /mosaic/test/layouts/index - group: Layouts -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -# {meta.title} - -Pages for e2e testing. diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight b/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight deleted file mode 120000 index cd722d86..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight +++ /dev/null @@ -1 +0,0 @@ -detail-highlight.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight.mdx deleted file mode 100644 index 35dc73f4..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-highlight.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Detail Highlight Test Page -layout: DetailHighlight -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Detail Highlight Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Layouts - route: /mosaic/test/layouts/index - group: Layouts - next: - title: Detail Overview Test Page - route: /mosaic/test/layouts/detail-overview - group: Layouts -lastModified: 1700475661349 -fullPath: /mosaic/test/layouts/detail-highlight.mdx -route: /mosaic/test/layouts/detail-highlight -sharedConfig: *ref_0 -sidebar: - label: Detail Highlight Test Page - groupLabel: Detail Highlight Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: detail-highlight-test-page - text: Detail Highlight Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview b/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview deleted file mode 120000 index 62bd5bc1..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview +++ /dev/null @@ -1 +0,0 @@ -detail-overview.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview.mdx deleted file mode 100644 index 1320bf51..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-overview.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Detail Overview Test Page -layout: DetailOverview -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Detail Overview Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Detail Highlight Test Page - route: /mosaic/test/layouts/detail-highlight - group: Layouts - next: - title: Detail Technical Test Page - route: /mosaic/test/layouts/detail-technical - group: Layouts -lastModified: 1700475661349 -fullPath: /mosaic/test/layouts/detail-overview.mdx -route: /mosaic/test/layouts/detail-overview -sharedConfig: *ref_0 -sidebar: - label: Detail Overview Test Page - groupLabel: Detail Overview Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: detail-overview-test-page - text: Detail Overview Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical b/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical deleted file mode 120000 index 8bfca112..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical +++ /dev/null @@ -1 +0,0 @@ -detail-technical.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical.mdx deleted file mode 100644 index 37129e8f..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/detail-technical.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Detail Technical Test Page -layout: DetailTechnical -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Detail Technical Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Detail Overview Test Page - route: /mosaic/test/layouts/detail-overview - group: Layouts - next: - title: Edit Layout - route: /mosaic/test/layouts/edit - group: Layouts -lastModified: 1700475661349 -fullPath: /mosaic/test/layouts/detail-technical.mdx -route: /mosaic/test/layouts/detail-technical -sharedConfig: *ref_0 -sidebar: - label: Detail Technical Test Page - groupLabel: Detail Technical Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: detail-technical-test-page - text: Detail Technical Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/edit b/packages/site/snapshots/latest/mosaic/test/layouts/edit deleted file mode 120000 index 5175875d..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/edit +++ /dev/null @@ -1 +0,0 @@ -edit.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/edit.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/edit.mdx deleted file mode 100644 index 6d0919e7..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/edit.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Edit Layout -layout: Edit -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Edit Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Detail Technical Test Page - route: /mosaic/test/layouts/detail-technical - group: Layouts - next: - title: Full Width Layout - route: /mosaic/test/layouts/full-width - group: Layouts -lastModified: 1700475661349 -fullPath: /mosaic/test/layouts/edit.mdx -route: /mosaic/test/layouts/edit -sharedConfig: *ref_0 -sidebar: - label: Edit Layout - groupLabel: Edit Layout -readingTime: - text: 1 min read - minutes: 0.345 - time: 20700 - words: 69 -tableOfContents: - - depth: 2 - level: 0 - id: edit-layout - text: Edit Layout -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/full-width b/packages/site/snapshots/latest/mosaic/test/layouts/full-width deleted file mode 120000 index 868f9aa5..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/full-width +++ /dev/null @@ -1 +0,0 @@ -full-width.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/full-width.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/full-width.mdx deleted file mode 100644 index f5840e09..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/full-width.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Full Width Layout -layout: FullWidth -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Full Width Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Edit Layout - route: /mosaic/test/layouts/edit - group: Layouts - next: - title: Landing Layout Test Page - route: /mosaic/test/layouts/landing - group: Layouts -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/full-width.mdx -route: /mosaic/test/layouts/full-width -sharedConfig: *ref_0 -sidebar: - label: Full Width Layout - groupLabel: Full Width Layout -readingTime: - text: 1 min read - minutes: 0.345 - time: 20700 - words: 69 -tableOfContents: - - depth: 2 - level: 0 - id: full-width-layout - text: Full Width Layout -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/index b/packages/site/snapshots/latest/mosaic/test/layouts/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/index.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/index.mdx deleted file mode 100644 index bcf5fa9b..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/index.mdx +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Layouts -layout: DetailTechnical -sidebar: - label: Layouts - groupLabel: Layouts - priority: 3 -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/index.mdx -route: /mosaic/test/layouts/index -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Layouts - path: /mosaic/test/layouts/index - id: /mosaic/test/layouts/index.mdx -readingTime: - text: 1 min read - minutes: 0.03 - time: 1800 - words: 6 -tableOfContents: [] -navigation: - prev: - title: Test - route: /mosaic/test/index - next: - title: Detail Highlight Test Page - route: /mosaic/test/layouts/detail-highlight - group: Layouts -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -# {meta.title} - -Pages for e2e testing of layouts. diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/landing b/packages/site/snapshots/latest/mosaic/test/layouts/landing deleted file mode 120000 index 53483750..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/landing +++ /dev/null @@ -1 +0,0 @@ -landing.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/landing.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/landing.mdx deleted file mode 100644 index a818e8e7..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/landing.mdx +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: Landing Layout Test Page -layout: Landing -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Landing Layout Footer - href: /mosaic -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/landing.mdx -route: /mosaic/test/layouts/landing -sharedConfig: *ref_0 -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Layouts - path: /mosaic/test/layouts/index - id: /mosaic/test/layouts/index.mdx -sidebar: - label: Landing Layout Test Page - groupLabel: Landing Layout Test Page -readingTime: - text: 2 min read - minutes: 1.705 - time: 102300 - words: 341 -tableOfContents: - - depth: 2 - level: 0 - id: landing-layout-test-page - text: Landing Layout Test Page -navigation: - prev: - title: Full Width Layout - route: /mosaic/test/layouts/full-width - group: Layouts - next: - title: Newsletter Test Page - route: /mosaic/test/layouts/newsletter - group: Layouts -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/newsletter b/packages/site/snapshots/latest/mosaic/test/layouts/newsletter deleted file mode 120000 index f099cfe0..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/newsletter +++ /dev/null @@ -1 +0,0 @@ -newsletter.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/newsletter.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/newsletter.mdx deleted file mode 100644 index c45dfe1b..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/newsletter.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Newsletter Test Page -layout: Newsletter -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Newsletter Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Landing Layout Test Page - route: /mosaic/test/layouts/landing - group: Layouts - next: - title: Product Discover Test Page - route: /mosaic/test/layouts/product-discover - group: Layouts -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/newsletter.mdx -route: /mosaic/test/layouts/newsletter -sharedConfig: *ref_0 -sidebar: - label: Newsletter Test Page - groupLabel: Newsletter Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: newsletter-test-page - text: Newsletter Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/product-discover b/packages/site/snapshots/latest/mosaic/test/layouts/product-discover deleted file mode 120000 index 508e3923..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/product-discover +++ /dev/null @@ -1 +0,0 @@ -product-discover.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/product-discover.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/product-discover.mdx deleted file mode 100644 index 1870ac8b..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/product-discover.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Product Discover Test Page -layout: ProductDiscover -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Product Discover Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -navigation: - prev: - title: Newsletter Test Page - route: /mosaic/test/layouts/newsletter - group: Layouts - next: - title: Product Preview Test Page - route: /mosaic/test/layouts/product-preview - group: Layouts -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/product-discover.mdx -route: /mosaic/test/layouts/product-discover -sharedConfig: *ref_0 -sidebar: - label: Product Discover Test Page - groupLabel: Product Discover Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: product-discover-test-page - text: Product Discover Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/product-preview b/packages/site/snapshots/latest/mosaic/test/layouts/product-preview deleted file mode 120000 index 4509da9b..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/product-preview +++ /dev/null @@ -1 +0,0 @@ -product-preview.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/product-preview.mdx b/packages/site/snapshots/latest/mosaic/test/layouts/product-preview.mdx deleted file mode 100644 index 94f37afc..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/product-preview.mdx +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Product Preview Test Page -layout: ProductDiscover -frameOverrides: &ref_0 - header: - homeLink: /mosaic/index - title: Mosaic (BETA) - logo: /img/favicon.png - searchNamespace: mosaic - menu: - - title: Docs - link: /mosaic/docs/index - - title: Quick Start - link: /mosaic/quick-start/index - footer: - description: Footer Content - title: Product Preview Layout Footer - href: /mosaic -breadcrumbs: - - label: Breadcrumb 1 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 2 - path: /mosaic/index.mdx - id: /mosaic/index.mdx - - label: Breadcrumb 3 - path: /mosaic/index.mdx - id: /mosaic/index.mdx -lastModified: 1700475661350 -fullPath: /mosaic/test/layouts/product-preview.mdx -route: /mosaic/test/layouts/product-preview -sharedConfig: *ref_0 -sidebar: - label: Product Preview Test Page - groupLabel: Product Preview Test Page -readingTime: - text: 2 min read - minutes: 1.725 - time: 103500 - words: 345 -tableOfContents: - - depth: 2 - level: 0 - id: product-preview-test-page - text: Product Preview Test Page - - depth: 2 - level: 0 - id: heading-1 - text: Heading 1 - - depth: 2 - level: 0 - id: heading-2 - text: Heading 2 - - depth: 3 - level: 1 - id: heading-3 - text: Heading 3 - - depth: 2 - level: 0 - id: heading-4 - text: Heading 4 -navigation: - prev: - title: Product Discover Test Page - route: /mosaic/test/layouts/product-discover - group: Layouts - next: - title: Refs Test - route: /mosaic/test/refs/index - group: Refs Test -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -## {meta.title} - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 1 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -### Heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum - -## Heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum diff --git a/packages/site/snapshots/latest/mosaic/test/layouts/shared-config.json b/packages/site/snapshots/latest/mosaic/test/layouts/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/test/layouts/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/refs/data b/packages/site/snapshots/latest/mosaic/test/refs/data deleted file mode 120000 index 98533d4e..00000000 --- a/packages/site/snapshots/latest/mosaic/test/refs/data +++ /dev/null @@ -1 +0,0 @@ -data.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/refs/data.mdx b/packages/site/snapshots/latest/mosaic/test/refs/data.mdx deleted file mode 100644 index 1144c9b8..00000000 --- a/packages/site/snapshots/latest/mosaic/test/refs/data.mdx +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Refs Data -data: - randomValue: 100 -lastModified: 1700475661351 -fullPath: /mosaic/test/refs/data.mdx -route: /mosaic/test/refs/data -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Refs Test - path: /mosaic/test/refs/index - id: /mosaic/test/refs/index.mdx -sidebar: - label: Refs Data - groupLabel: Refs Data -readingTime: - text: 0 min read - minutes: 0 - time: 0 - words: 0 -navigation: - prev: - title: Refs Test - route: /mosaic/test/refs/index - group: Refs Test - next: - title: Aliases Test - route: /mosaic/test/aliases/index - group: Aliases Test -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- - diff --git a/packages/site/snapshots/latest/mosaic/test/refs/index b/packages/site/snapshots/latest/mosaic/test/refs/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/test/refs/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/refs/index.mdx b/packages/site/snapshots/latest/mosaic/test/refs/index.mdx deleted file mode 100644 index caf994b3..00000000 --- a/packages/site/snapshots/latest/mosaic/test/refs/index.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Refs Test -layout: FullWidth -sidebar: - label: Refs Test - groupLabel: Refs Test - priority: 3 -data: - other: 100 - sidebarPriority: 3 -lastModified: 1700475661351 -fullPath: /mosaic/test/refs/index.mdx -route: /mosaic/test/refs/index -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Refs Test - path: /mosaic/test/refs/index - id: /mosaic/test/refs/index.mdx -readingTime: - text: 1 min read - minutes: 0.05 - time: 3000 - words: 10 -tableOfContents: [] -navigation: - prev: - title: Product Preview Test Page - route: /mosaic/test/layouts/product-preview - group: Layouts - next: - title: Refs Data - route: /mosaic/test/refs/data - group: Refs Test -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -# {meta.title} - -The sidebar priority is {meta.data.sidebarPriority}. - -The other page data is {meta.data.other}. diff --git a/packages/site/snapshots/latest/mosaic/test/refs/shared-config.json b/packages/site/snapshots/latest/mosaic/test/refs/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/test/refs/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/shared-config.json b/packages/site/snapshots/latest/mosaic/test/shared-config.json deleted file mode 120000 index 11f2745e..00000000 --- a/packages/site/snapshots/latest/mosaic/test/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/sidebar.json b/packages/site/snapshots/latest/mosaic/test/sidebar.json deleted file mode 100644 index 1d07dd2f..00000000 --- a/packages/site/snapshots/latest/mosaic/test/sidebar.json +++ /dev/null @@ -1 +0,0 @@ -{"pages":[{"id":"/mosaic/test/index","kind":"data","fullPath":"/mosaic/test/index.mdx","name":"Test","priority":999,"data":{"level":2,"link":"/mosaic/test/index"}},{"id":"/mosaic/test/layouts","kind":"group","childNodes":[{"id":"/mosaic/test/layouts/index","kind":"data","fullPath":"/mosaic/test/layouts/index.mdx","name":"Layouts","priority":999,"data":{"level":3,"link":"/mosaic/test/layouts/index"}},{"id":"/mosaic/test/layouts/detail-highlight","kind":"data","fullPath":"/mosaic/test/layouts/detail-highlight.mdx","name":"Detail Highlight Test Page","data":{"level":3,"link":"/mosaic/test/layouts/detail-highlight"}},{"id":"/mosaic/test/layouts/detail-overview","kind":"data","fullPath":"/mosaic/test/layouts/detail-overview.mdx","name":"Detail Overview Test Page","data":{"level":3,"link":"/mosaic/test/layouts/detail-overview"}},{"id":"/mosaic/test/layouts/detail-technical","kind":"data","fullPath":"/mosaic/test/layouts/detail-technical.mdx","name":"Detail Technical Test Page","data":{"level":3,"link":"/mosaic/test/layouts/detail-technical"}},{"id":"/mosaic/test/layouts/edit","kind":"data","fullPath":"/mosaic/test/layouts/edit.mdx","name":"Edit Layout","data":{"level":3,"link":"/mosaic/test/layouts/edit"}},{"id":"/mosaic/test/layouts/full-width","kind":"data","fullPath":"/mosaic/test/layouts/full-width.mdx","name":"Full Width Layout","data":{"level":3,"link":"/mosaic/test/layouts/full-width"}},{"id":"/mosaic/test/layouts/landing","kind":"data","fullPath":"/mosaic/test/layouts/landing.mdx","name":"Landing Layout Test Page","data":{"level":3,"link":"/mosaic/test/layouts/landing"}},{"id":"/mosaic/test/layouts/newsletter","kind":"data","fullPath":"/mosaic/test/layouts/newsletter.mdx","name":"Newsletter Test Page","data":{"level":3,"link":"/mosaic/test/layouts/newsletter"}},{"id":"/mosaic/test/layouts/product-discover","kind":"data","fullPath":"/mosaic/test/layouts/product-discover.mdx","name":"Product Discover Test Page","data":{"level":3,"link":"/mosaic/test/layouts/product-discover"}},{"id":"/mosaic/test/layouts/product-preview","kind":"data","fullPath":"/mosaic/test/layouts/product-preview.mdx","name":"Product Preview Test Page","data":{"level":3,"link":"/mosaic/test/layouts/product-preview"}}],"name":"Layouts","priority":3},{"id":"/mosaic/test/refs","kind":"group","childNodes":[{"id":"/mosaic/test/refs/index","kind":"data","fullPath":"/mosaic/test/refs/index.mdx","name":"Refs Test","priority":999,"data":{"level":3,"link":"/mosaic/test/refs/index"}},{"id":"/mosaic/test/refs/data","kind":"data","fullPath":"/mosaic/test/refs/data.mdx","name":"Refs Data","data":{"level":3,"link":"/mosaic/test/refs/data"}}],"name":"Refs Test","priority":3},{"id":"/mosaic/test/aliases","kind":"group","childNodes":[{"id":"/mosaic/test/aliases/index","kind":"data","fullPath":"/mosaic/test/aliases/index.mdx","name":"Aliases Test","priority":999,"data":{"level":3,"link":"/mosaic/test/aliases/index"}}],"name":"Aliases Test"},{"id":"/mosaic/test/tags","kind":"group","childNodes":[{"id":"/mosaic/test/tags/index","kind":"data","fullPath":"/mosaic/test/tags/index.mdx","name":"Tags Test","priority":999,"data":{"level":3,"link":"/mosaic/test/tags/index"}}],"name":"Tags Test"}]} \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/tags/index b/packages/site/snapshots/latest/mosaic/test/tags/index deleted file mode 120000 index 34f13104..00000000 --- a/packages/site/snapshots/latest/mosaic/test/tags/index +++ /dev/null @@ -1 +0,0 @@ -index.mdx \ No newline at end of file diff --git a/packages/site/snapshots/latest/mosaic/test/tags/index.mdx b/packages/site/snapshots/latest/mosaic/test/tags/index.mdx deleted file mode 100644 index 0d4050e4..00000000 --- a/packages/site/snapshots/latest/mosaic/test/tags/index.mdx +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: Tags Test -layout: DetailTechnical -data: - in-stock: - - name: Product A - out-of-stock: - - name: Product B -lastModified: 1700475661351 -fullPath: /mosaic/test/tags/index.mdx -route: /mosaic/test/tags/index -breadcrumbs: - - label: Test - path: /mosaic/test/index - id: /mosaic/test/index.mdx - - label: Tags Test - path: /mosaic/test/tags/index - id: /mosaic/test/tags/index.mdx -sidebar: - label: Tags Test - groupLabel: Tags Test -readingTime: - text: 1 min read - minutes: 0.04 - time: 2400 - words: 8 -tableOfContents: - - depth: 2 - level: 0 - id: in-stock - text: In Stock - - depth: 2 - level: 0 - id: out-of-stock - text: Out of Stock -navigation: - prev: - title: Aliases Test - route: /mosaic/test/aliases/index - group: Aliases Test -sidebarData: - - id: /mosaic/test/index - kind: data - fullPath: /mosaic/test/index.mdx - name: Test - priority: 999 - data: - level: 2 - link: /mosaic/test/index - - id: /mosaic/test/layouts - kind: group - childNodes: - - id: /mosaic/test/layouts/index - kind: data - fullPath: /mosaic/test/layouts/index.mdx - name: Layouts - priority: 999 - data: - level: 3 - link: /mosaic/test/layouts/index - - id: /mosaic/test/layouts/detail-highlight - kind: data - fullPath: /mosaic/test/layouts/detail-highlight.mdx - name: Detail Highlight Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-highlight - - id: /mosaic/test/layouts/detail-overview - kind: data - fullPath: /mosaic/test/layouts/detail-overview.mdx - name: Detail Overview Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-overview - - id: /mosaic/test/layouts/detail-technical - kind: data - fullPath: /mosaic/test/layouts/detail-technical.mdx - name: Detail Technical Test Page - data: - level: 3 - link: /mosaic/test/layouts/detail-technical - - id: /mosaic/test/layouts/edit - kind: data - fullPath: /mosaic/test/layouts/edit.mdx - name: Edit Layout - data: - level: 3 - link: /mosaic/test/layouts/edit - - id: /mosaic/test/layouts/full-width - kind: data - fullPath: /mosaic/test/layouts/full-width.mdx - name: Full Width Layout - data: - level: 3 - link: /mosaic/test/layouts/full-width - - id: /mosaic/test/layouts/landing - kind: data - fullPath: /mosaic/test/layouts/landing.mdx - name: Landing Layout Test Page - data: - level: 3 - link: /mosaic/test/layouts/landing - - id: /mosaic/test/layouts/newsletter - kind: data - fullPath: /mosaic/test/layouts/newsletter.mdx - name: Newsletter Test Page - data: - level: 3 - link: /mosaic/test/layouts/newsletter - - id: /mosaic/test/layouts/product-discover - kind: data - fullPath: /mosaic/test/layouts/product-discover.mdx - name: Product Discover Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-discover - - id: /mosaic/test/layouts/product-preview - kind: data - fullPath: /mosaic/test/layouts/product-preview.mdx - name: Product Preview Test Page - data: - level: 3 - link: /mosaic/test/layouts/product-preview - name: Layouts - priority: 3 - - id: /mosaic/test/refs - kind: group - childNodes: - - id: /mosaic/test/refs/index - kind: data - fullPath: /mosaic/test/refs/index.mdx - name: Refs Test - priority: 999 - data: - level: 3 - link: /mosaic/test/refs/index - - id: /mosaic/test/refs/data - kind: data - fullPath: /mosaic/test/refs/data.mdx - name: Refs Data - data: - level: 3 - link: /mosaic/test/refs/data - name: Refs Test - priority: 3 - - id: /mosaic/test/aliases - kind: group - childNodes: - - id: /mosaic/test/aliases/index - kind: data - fullPath: /mosaic/test/aliases/index.mdx - name: Aliases Test - priority: 999 - data: - level: 3 - link: /mosaic/test/aliases/index - name: Aliases Test - - id: /mosaic/test/tags - kind: group - childNodes: - - id: /mosaic/test/tags/index - kind: data - fullPath: /mosaic/test/tags/index.mdx - name: Tags Test - priority: 999 - data: - level: 3 - link: /mosaic/test/tags/index - name: Tags Test ---- -# {meta.title} - -## In Stock - - - -## Out of Stock - - diff --git a/packages/site/snapshots/latest/mosaic/test/tags/shared-config.json b/packages/site/snapshots/latest/mosaic/test/tags/shared-config.json deleted file mode 120000 index da3ba444..00000000 --- a/packages/site/snapshots/latest/mosaic/test/tags/shared-config.json +++ /dev/null @@ -1 +0,0 @@ -../../shared-config.json \ No newline at end of file diff --git a/packages/site/snapshots/latest/search-data-condensed.json b/packages/site/snapshots/latest/search-data-condensed.json deleted file mode 100644 index 64d466bd..00000000 --- a/packages/site/snapshots/latest/search-data-condensed.json +++ /dev/null @@ -1 +0,0 @@ -[{"title":"Mosaic","route":"/mosaic/index"},{"title":"Sitemap","route":"/mosaic/sitemap"},{"title":"Aliases","route":"/mosaic/author/aliases"},{"title":"Fragments","route":"/mosaic/author/fragments"},{"title":"Frontmatter","route":"/mosaic/author/frontmatter"},{"title":"Author","route":"/mosaic/author/index"},{"title":"Markdown Syntax","route":"/mosaic/author/markdown-syntax"},{"title":"Refs","route":"/mosaic/author/refs"},{"title":"Sidebar Configuration","route":"/mosaic/author/sidebars"},{"title":"Tags","route":"/mosaic/author/tags"},{"title":"UI Components","route":"/mosaic/author/ui-components"},{"title":"Configure","route":"/mosaic/configure/index"},{"title":"Content Fragment","route":"/mosaic/fragments/content-fragment"},{"title":"Fragments","route":"/mosaic/fragments/index"},{"title":"Tile A","route":"/mosaic/fragments/tile-a"},{"title":"Tile B","route":"/mosaic/fragments/tile-b"},{"title":"Create a Site","route":"/mosaic/getting-started/create-a-site"},{"title":"Getting Started","route":"/mosaic/getting-started/index"},{"title":"Publish a site to AWS","route":"/mosaic/getting-started/publish-site-to-aws"},{"title":"Publish","route":"/mosaic/publish/index"},{"title":"Publish a site to AWS","route":"/mosaic/publish/publish-site-to-aws"},{"title":"Publish a site to Vercel","route":"/mosaic/publish/publish-site-to-vercel"},{"title":"Test","route":"/mosaic/test/index"},{"title":"Admin","route":"/mosaic/configure/admin/index"},{"title":"Detail Highlight","route":"/mosaic/configure/layouts/detail-highlight"},{"title":"Detail Overview","route":"/mosaic/configure/layouts/detail-overview"},{"title":"Detail Technical","route":"/mosaic/configure/layouts/detail-technical"},{"title":"Layouts","route":"/mosaic/configure/layouts/index"},{"title":"Landing Layout","route":"/mosaic/configure/layouts/landing"},{"title":"Product Discover Layout","route":"/mosaic/configure/layouts/product-discover"},{"title":"Product Preview Layout","route":"/mosaic/configure/layouts/product-preview"},{"title":"Active mode","route":"/mosaic/configure/modes/active"},{"title":"Modes of operation","route":"/mosaic/configure/modes/index"},{"title":"Snapshot file mode","route":"/mosaic/configure/modes/snapshot-file"},{"title":"Snapshot AWS/S3 mode","route":"/mosaic/configure/modes/snapshot-s3"},{"title":"$AliasPlugin","route":"/mosaic/configure/plugins/alias-plugin"},{"title":"BreadcrumbsPlugin","route":"/mosaic/configure/plugins/breadcrumbs-plugin"},{"title":"BrokenLinksPlugin","route":"/mosaic/configure/plugins/broken-links-plugin"},{"title":"$CodeModPlugin","route":"/mosaic/configure/plugins/codemod-plugin"},{"title":"Plugins","route":"/mosaic/configure/plugins/index"},{"title":"LazyPagePlugin","route":"/mosaic/configure/plugins/lazy-page-plugin"},{"title":"PagesWithoutFileExtPlugin","route":"/mosaic/configure/plugins/pages-wthout-extensions-plugin"},{"title":"PublicAssetsPlugin","route":"/mosaic/configure/plugins/public-assets-plugin"},{"title":"ReadingTimePlugin","route":"/mosaic/configure/plugins/reading-time-plugin"},{"title":"$RefPlugin","route":"/mosaic/configure/plugins/ref-plugin"},{"title":"SearchIndexPlugin","route":"/mosaic/configure/plugins/search-index-plugin"},{"title":"SharedConfigPlugin","route":"/mosaic/configure/plugins/shared-config-plugin"},{"title":"SidebarPlugin","route":"/mosaic/configure/plugins/sidebar-plugin"},{"title":"SiteMapPlugin","route":"/mosaic/configure/plugins/site-map-plugin"},{"title":"$TagPlugin","route":"/mosaic/configure/plugins/tag-plugin"},{"title":"TableOfContentsPlugin","route":"/mosaic/configure/plugins/toc-plugin"},{"title":"Git Repo Source","route":"/mosaic/configure/sources/git-repo-source"},{"title":"HTTP Source","route":"/mosaic/configure/sources/http-source"},{"title":"Sources","route":"/mosaic/configure/sources/index"},{"title":"Local Folder Source","route":"/mosaic/configure/sources/local-folder-source"},{"title":"Source Schedules","route":"/mosaic/configure/sources/schedules"},{"title":"Figma Source","route":"/mosaic/configure/sources/source-figma"},{"title":"Readme Source","route":"/mosaic/configure/sources/source-readme"},{"title":"Storybook Source","route":"/mosaic/configure/sources/source-storybook"},{"title":"Custom Components","route":"/mosaic/configure/theme/custom-components"},{"title":"Custom CSS","route":"/mosaic/configure/theme/custom-css"},{"title":"Theming Your Site","route":"/mosaic/configure/theme/index"},{"title":"Aliases Test","route":"/mosaic/test/aliases/index"},{"title":"Detail Highlight Test Page","route":"/mosaic/test/layouts/detail-highlight"},{"title":"Detail Overview Test Page","route":"/mosaic/test/layouts/detail-overview"},{"title":"Detail Technical Test Page","route":"/mosaic/test/layouts/detail-technical"},{"title":"Edit Layout","route":"/mosaic/test/layouts/edit"},{"title":"Full Width Layout","route":"/mosaic/test/layouts/full-width"},{"title":"Layouts","route":"/mosaic/test/layouts/index"},{"title":"Landing Layout Test Page","route":"/mosaic/test/layouts/landing"},{"title":"Newsletter Test Page","route":"/mosaic/test/layouts/newsletter"},{"title":"Product Discover Test Page","route":"/mosaic/test/layouts/product-discover"},{"title":"Product Preview Test Page","route":"/mosaic/test/layouts/product-preview"},{"title":"Refs Data","route":"/mosaic/test/refs/data"},{"title":"Refs Test","route":"/mosaic/test/refs/index"},{"title":"Tags Test","route":"/mosaic/test/tags/index"},{"title":"$afterSource","route":"/mosaic/configure/plugins/lifecycle/after-source"},{"title":"afterUpdate","route":"/mosaic/configure/plugins/lifecycle/after-update"},{"title":"$beforeSend","route":"/mosaic/configure/plugins/lifecycle/before-send"},{"title":"Lifecycle Events","route":"/mosaic/configure/plugins/lifecycle/index"},{"title":"shouldClearCache","route":"/mosaic/configure/plugins/lifecycle/should-clear-cache"},{"title":"shouldUpdateNamespaceSources","route":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources"},{"title":"Product A","route":"/mosaic/products/producta"},{"title":"Product B","route":"/mosaic/products/productb"}] \ No newline at end of file diff --git a/packages/site/snapshots/latest/search-data.json b/packages/site/snapshots/latest/search-data.json deleted file mode 100644 index d8c27e84..00000000 --- a/packages/site/snapshots/latest/search-data.json +++ /dev/null @@ -1 +0,0 @@ -[{"title":"Mosaic","route":"/mosaic/index","content":["True to its name, Mosaic brings together several concepts—including content, design and technical infrastructure—to deliver a unified website experience that is truly greater than the sum of its individual parts.","With Mosaic, you can:","Don't move your content where it does not belong. ","Compose content from remote data sources which\n","are pulled at runtime by our content aggregator.","Visualize your content with your own theme, layouts and components or use the Mosaic Design\n","language.","Extend the existing code and add your own content source types through our simple plugin\n","architecture.","Publish your content through Server Side Rendering (SSR) or generate a snapshot of your content\n","and serve it as a Statically Generated Site (SGS).","Creating a website has never been so easy!"]},{"title":"Sitemap","route":"/mosaic/sitemap","content":["Sitemap"]},{"title":"Aliases","route":"/mosaic/author/aliases","content":["Aliases are virtual 'symlinks' of pages, allowing one page to take on one or more other routes.\n","This is not the same as copying the page, it is a primitive filesystem link which is resolved by Mosaic.","Use Cases","Aliases are great for linking to an old route if you've moved a page to a new place.\n","They can also be used to create short hand links to pages or to 'clone' a copy of a page into\n","another section of the site where it may be relevant.","Example","This is the frontmatter for this page:","---\n","title: Aliases\n","layout: DetailTechnical\n","aliases:\n"," - /mosaic/example/aliases\n","---","Try accessing this page from ","/mosaic/example/aliases"]},{"title":"Fragments","route":"/mosaic/author/fragments","content":["Fragments, also known as content fragments, are powerful tools that allow you to incorporate content from other pages into your documentation. ","By creating an MDX file and using the ","generic directives"," syntax ",", you can easily render the fragment in another file, providing modularity and reusability to your content.","Use Cases","Fragments offer various use cases, such as:","Consistent Content",": Use fragments to maintain consistent content across multiple pages. ","For instance, if you have a table or a tile that appears on multiple pages, you can create a fragment for it and include it in all relevant files. ","This ensures that any updates made to the fragment automatically reflect across the entire documentation.","Reusable Components",": Fragments enable the creation of reusable components or sections. ","You can define a complex or commonly used section once and then include it in multiple pages as needed. ","This approach saves time and effort, as you only need to update the fragment file to propagate changes throughout your documentation.","Modular Documentation",": With fragments, you can break down your documentation into smaller, manageable pieces. ","Each fragment represents a specific topic or section, allowing you to organize and structure your content more efficiently. ","This modular approach simplifies maintenance and makes it easier to navigate and update your documentation.","Usage","Firstly, enable the Fragment Plugin by adding the following to your plugins in ",".","{\n"," modulePath: '@jpmorganchase/mosaic-plugins/FragmentPlugin',\n"," options: {}\n","}","To include a fragment in your content, follow these steps:","Create an MDX file for the fragment you want to reuse. ","Remember to set the sidebar property of your fragment's frontmatter to exclude: true if you don't want the fragment to appear in the vertical navigation menu.","---\n","title: Fragment Title\n","sidebar:\n"," exclude: true\n","---","In the target file where you want to include the fragment, use the remark directive syntax ",".","Markdown Content Example","This is the contents of a fragment located at ",":","---\n","title: Content Fragment\n","sidebar:\n"," exclude: true\n","---\n","\n","#### Fragment Title\n","\n","This is an example fragment of markdown content, being pulled from `../fragments/content-fragment.mdx`.\n","The below code snippet will render the content from the content-fragment.mdx file in your target file:",":fragment{src=\"../fragments/content-fragment.mdx\"}","Example output:","Fragment Title","This is an example fragment of markdown content, being pulled from ",".","Component Example","Here is another example, where the fragment files each contain a "," component.",":fragment{src=\"../fragments/tile-a.mdx\"} :fragment{src=\"../fragments/tile-b.mdx\"}","The above code will render the content from tile-a.mdx and tile-b.mdx files, demonstrated below:"," "]},{"title":"Frontmatter","route":"/mosaic/author/frontmatter","content":["Frontmatter",", also known as page metadata, is a powerful feature that allows easy configuration of a page and Mosaic site components e.g. the sidebar.","Frontmatter is written in yaml syntax and is found at the top of a page between 2 sets of 3 dashes: ",".","Example page yaml","---\n","title: Page Title\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","---\n","\n","// frontmatter is closed and now comes page content\n","# Page Title\n","\n","This is some content.\n","Accessing Frontmatter in content","With the syntax below it is possible to directly reference frontmatter inside content using curly brackets and the "," object.","You can think of "," as a JSON object that holds all the frontmatter of a page and when the Mosaic "," encounters the curly brackets then the value in the frontmatter will be resolved.","{meta.title}\n","{meta.description}\n","{meta.someValueYouHaveAddedToTheFrontmatter}","This is very common to see Mosaic pages that reference the title as shown below:","---\n","title: Title\n","---\n","\n","# {meta.title}","Plugins & Frontmatter","Mosaic plugins can also embed their output into page frontmatter in 2 different ways:","a property is directly added to the page object","a JSON file is generated and referenced using a ","ref","Adding a property to the page","A plugin can add a property to a page simply by extending the page object it receives in the "," lifecycle event:","async function $afterSource(pages) {\n"," for (const page of pages) {\n"," page.newProperty = 'Hello'\n"," }\n"," return pages;\n","}","You could use this property in the page content using ","JSON File","Let's take a look at the ",".","The purpose of this plugin is to crawl the page hierarchy to find the closest "," found in any parent page's frontmatter.","Finds all index pages among the source docs","Deserialises those pages so it can read the frontmatter and content of the page","If a property called "," in the page frontmatter is found a new file named shared-config.json is created","Adds a ref named "," to the shared config file that points to the shared config of the index page","import type { Page, Plugin as PluginType } from '@jpmorganchase/mosaic-types';\n","import { flatten } from 'lodash-es';\n","import path from 'path';\n","\n","function createFileGlob(url, pageExtensions) {\n","if (pageExtensions.length === 1) {\n","return `${url}${pageExtensions[0]}`;\n","}\n","return `${url}{${pageExtensions.join(',')}}`;\n","}\n","\n","interface SharedConfigPluginPage extends Page {\n","sharedConfig?: string;\n","}\n","\n","interface SharedConfigPluginOptions {\n","filename: string;\n","}\n","\n","const SharedConfigPlugin: PluginType = {\n","async $beforeSend(\n"," mutableFilesystem,\n"," { config, serialiser, ignorePages, pageExtensions },\n"," options\n"," ) {\n"," const pagePaths = await mutableFilesystem.promises.glob(\n"," createFileGlob('**/index', pageExtensions),\n"," {\n"," ignore: [options.filename, ...flatten(ignorePages.map(ignore => [ignore, `**/${ignore}`]))],\n","cwd: '/'\n","}\n",");\n","\n"," for (const pagePath of pagePaths) {\n"," const sharedConfigFile = path.join(path.dirname(String(pagePath)), options.filename);\n","\n"," const page = await serialiser.deserialise(\n"," String(pagePath),\n"," await mutableFilesystem.promises.readFile(String(pagePath))\n"," );\n"," if (page.sharedConfig) {\n"," config.setRef(sharedConfigFile, ['config', '$ref'], `${String(pagePath)}#/sharedConfig`);\n"," await mutableFilesystem.promises.writeFile(sharedConfigFile, '{}');\n"," } else {\n"," const baseDir = path.posix.resolve(path.dirname(String(pagePath)), '..","/');\n"," config.setAliases(path.join(baseDir, options.filename), [sharedConfigFile]);\n"," }\n"," }\n","\n","}\n","};\n","\n","export default SharedConfigPlugin;\n"]},{"title":"Author","route":"/mosaic/author/index","content":["Here you will learn how to author documentation using markdown, Mosaic components and page templates"]},{"title":"Markdown Syntax","route":"/mosaic/author/markdown-syntax","content":["Out of the box, Mosaic supports documents written in ","MDX"," which allows React components to be embedded within the ","basic syntax"," outlined in the original Markdown design document.","In addition to the basic markdown syntax, the MDX processor used by Mosaic has been configured to support additional markdown syntax and features:","GitHub flavored markdown (gfm)","Frontmatter","Mosaic Standard Components","All components that comprise the "," export from "," package are available to use out of the box in your documents.","This includes components for all standard markdown syntax and additional components like "," and ",".","Referencing Frontmatter","Frontmatter values can be embedded into the page using the "," object. ","See ","frontmatter"," for more information.","Configuring Supported components","TODO"]},{"title":"Refs","route":"/mosaic/author/refs","content":["Refs are a very powerful feature of Mosaic documents that use ","JSON References"," to reference\n","a property from the page frontmatter or frontmatter of other pages.","The key concept is that of a JSON pointer which takes the form ","A","#","B"," where:","A"," is the relative path from the current schema to a target schema. ","If A is empty, the reference is to a type or property in the same schema, an in-schema reference. ","Otherwise, the reference is to a different schema, a cross-schema reference.","B"," is the complete path from the root of the schema to a type or property in the schema. ","If # in not included or B is empty, the reference is to an entire schema.","To translate this for our purposes:","A"," is the relative path to a file in the filesystem.","B"," is the path to a property in the frontmatter of the file.","It's probably better explained with examples...","Local refs (In-schema reference)","It is possible to reference a page's own frontmatter to avoid duplication:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," sidebarPriority:\n"," $ref: '#/sidebar/priority'\n","---","This page you are reading right now has a sidebar priority of ",".","The value of "," comes from "," in the frontmatter.","Notice that because we don't specify a path before the "," in the ref we need to put the whole\n","value inside quotes.","Remote Refs (Cross-schema reference)","It is possible to reference frontmatter of other pages. ","Again this helps avoid duplication but the real power is using refs to build the data model. ","See ","advanced"," for more information.","The ","index"," page of the Author section has this frontmatter:","---\n","title: Author\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," exampleRefData: Hello from Author page\n","---","This page you are currently looking at is referencing the "," in it's frontmatter like this:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," authorRef:\n"," $ref: ./#/data/exampleRefData\n","---","I can then use the data and embed it in this page like this:","{meta.data.authorRef}","And here it is: ","Notice that we did not need to put "," in the ref since index pages are resolved\n","automatically.","Advanced","You have had a taste of the power and want to know more? ","OK, lets reference and then list out all the mosaic modes:","The Modes ","index"," page has this frontmatter:","---\n","title: Modes of operation\n","layout: DetailTechnical\n","sidebar:\n"," priority: 4\n","data:\n"," modes:\n"," $ref: ./*#/title\n","---","The ref here is essentially using a wildcard (the *) to grab the "," property from the frontmatter of every page in the modes folder.","We can reference that data just like before:","---\n","title: Refs\n","layout: DetailTechnical\n","sidebar:\n"," priority: 3\n","data:\n"," modes:\n"," $ref: ../configure/modes#/data/modes\n","---","Output","With the code below, the referenced data can be embedded in a page.","
      \n"," {meta.data.modes.map(mode => (\n","
    • {mode}
    • \n"," ))}\n","
    ","Output with Mosaic Components","You can use Mosaic components with referenced data as well. ","Below we are using the "," and "," components.","\n"," {meta.data.modes.map(mode => (\n"," \n"," ))}\n","","Setting Refs using Plugins","Mosaic plugins can create new refs, create new ","global"," refs and see existing refs created by the page or other plugins. ","This is achieved using a special "," property available in the plugin helpers.","Create new refs","Use the "," function from the helpers provided to plugin lifecycle events. ","You need to provide","The file/fullpath to write the ref to","The path to the ptoperty where the ref will be applied","The value of the ref, which can use wildcards","For example, the following would add a property to pages named ",". ","The value is the title of all pages in the ","same"," directory as the current page"," async $afterSource(pages, { config }) {\n"," for (const page of pages) {\n"," config.setRef(page.fullPath, ['titles', '$ref'], `**#/title`);\n"," }\n"," return pages;\n"," }","When setting the property path the last string must be "," otherwise you're not creating a ref\n","that will be resolved by the RefPlugin.","Existing refs","To view refs that already exist you can use ",". ","For example to see all refs for a page:"," config.data.refs[fullPathToPage]","Create global refs","Global refs are similar to regular refs except they do not pre-resolve. ","This means they are resolved when the referenced file is read and the global mosaic filesystem, made up of multiple sources, is used rather than the filesystem of a single source."]},{"title":"Sidebar Configuration","route":"/mosaic/author/sidebars","content":["Sidebar data is generated by the the ","Sidebar Plugin"," which by default uses alphabetical ordering of page names to order the sidebar.","Sidebar frontmatter","A page can add a "," property to its ","frontmatter"," to change the ordering of a sidebar and what title is used for a page in the sidebar.","To rearrange pages in the sidebar or to apply a different label to a page you can specify the following in the page frontmatter:","Sidebar group label","A sidebar group when expanded will reveal the pages contained within the group.\n","Each group has a default page, ",", which is the default for the group and any breadcrumb link.","The"," can define a "," which defines the name of the sidebar group.\n","If no ","groupLabel"," is defined, sidebar group labels will be defined by either ","label"," or ","title",".","To specify the label of the default page, refer to [Sidebar label](.","/Sidebar label)","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," groupLabel: Group label\n","---","Sidebar label","By default the ","title"," of a page is used in the sidebar as the label but this can be changed to another label using page frontmatter.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," label: A New Label\n","---","Sidebar priority","Sidebar priority is a number used to sort the sidebar. ","Higher the priority pages appear first in the sidebar ordering.","---\n","title: Sidebar Configuration\n","layout: DetailTechnical\n","sidebar:\n"," priority: 10\n","---","Sidebar Sort Configuration","Sidebar sort configuration allows the sidebar to be sorted using a more sophisticated approach and only needs to be applied to the "," page of the directory you want to sort.","Priority takes precedence over sort configuration so it can be used to override the sort\n","configuration if required.","You must add the sidebar sort configuration to the "," property of an ","index"," page e.g.,","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/title\n"," dataType: string\n"," arrange: desc","The properties of the sort configuration are described in the table below:","| Property | Description | Required |\n","| -------- | ------------------------------------------------------------------------------------------ | -------- |\n","| field | the path, separated by ",", used to find the value in page frontmatter you wish to sort by | Yes |\n","| dataType | is the type of the value. ","Can be a "," or "," or ",". ","| Yes |\n","| arrange | "," or "," order | yes |","Newsletters Example","Let's say you have a ","Newsletters"," directory and each page in the directory represents a newsletter. ","You wish to sort the newsletter sidebar by publication date in descending order (newest first).","One way to do this is to edit each page and add a "," which is manually incremented every time a news newsletter is added. ","Alternatively you can add the following sort configuration to the newsletters index page:","sharedConfig:\n"," sidebar:\n"," sort:\n"," field: data/publicationDate\n"," dataType: date\n"," arrange: desc","This will use the "," property in each newsletter to sort the newsletters in the sidebar. ","The publication date is converted to a "," by the Sidebar Plugin to ensure accurate ordering. ","There is now no need to increment a priority when a new newsletter is added.","Example newsletter page frontmatter:","---\n","title: Newsletter 01 Jan 2023\n","description: Newsletter 01 Jan 2023\n","data:\n"," title:\n"," $ref: '#/title'\n"," link: /newsletters/2023-01-01\n"," publicationDate: '2023-01-01'\n","---"]},{"title":"Tags","route":"/mosaic/author/tags","content":["Tags are very similar to ","Refs"," with one very important distinction: Tags work ","across multiple sources",".","In Mosaic, each source has it's own filesystem which are then merged together to form a union of all source filesystems. ","It is in this union filesystem that tags are applied and not to the individual source filesystem that the tag was defined on.","Tags are slower to apply than refs. ","Multiple sources need to run and update before tagged data\n","will be resolved. ","If possible, stick to refs and only use tags when dealing with multiple sources.","Tagging a page","To tag a page, add a "," property to the page frontmatter. ","For example, the Product A page is tagged with \"in-stock\":","---\n","title: Product A\n","description: Mosaic Product A\n","layout: ProductDiscover\n","tags:\n"," - in-stock\n","data:\n"," name:\n"," $ref: '#/title'\n","---"," is always an array","Subscribing to a tag","To subscribe to a tag, use the "," property. ","For example, the Products page has subscribed to the "," property of pages tagged with ",".","---\n","title: Products\n","data:\n"," in-stock:\n"," $tag: in-stock#/data\n","---","A "," can provide a path to a specific piece of metadata on tagged pages, just like a ref.","Example","This page has subscribed to "," and "," tags and is displaying them using 2 Mosaic "," components.","Both the Product A and Product B pages are part of a different source than this page.","In Stock","Out of Stock"]},{"title":"UI Components","route":"/mosaic/author/ui-components","content":["Todo..."]},{"title":"Configure","route":"/mosaic/configure/index","content":["Mosaic is a tool which retrieves, formats and combines documentation pages from any number of different external sources (such as GitHub repositories, local disks or REST endpoints), into a single filesystem for you to use in your websites."]},{"title":"Content Fragment","route":"/mosaic/fragments/content-fragment","content":["Fragment Title","This is an example fragment of markdown content, being pulled from ","."]},{"title":"Fragments","route":"/mosaic/fragments/index","content":["This folder contains example fragments that are referenced and rendered in the Fragments docs page."]},{"title":"Tile A","route":"/mosaic/fragments/tile-a","content":[]},{"title":"Tile B","route":"/mosaic/fragments/tile-b","content":[]},{"title":"Create a Site","route":"/mosaic/getting-started/create-a-site","content":["In this guide you will learn how to generate and serve a Mosaic site.","Prerequisites","To begin setting up a Mosaic site, you need to have the following software installed:","Yarn v1","Node.js v18 or higher","Step 1: Generate a Mosaic site","Run the following command in your project directory to generate a new Mosaic site:","npx @jpmorganchase/mosaic-create-site create -o my-sample-site","This command creates a new Mosaic site in the my-sample-site directory.","Next, navigate to the site directory:","cd my-sample-site","Step 2: Serve the site","The example site you have generated comes preconfigured with two ","sources",": a remote repository and a local docs folder. ","Sources are used by Mosaic to pull content from disparate locations and merge them into a single virtual filesystem that can be used by a Mosaic site.","Set up Git credentials","If you want the site to read from remote repositories, you need to set up an environment variable to store your Git credentials. ","Follow these steps:","Open a terminal or command prompt.","Replace "," and "," in the following commands with your actual Git username and personal access token.","On Unix:","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","On Windows:","set MOSAIC_DOCS_CLONE_CREDENTIALS=\":\"","This sets the MOSAIC_DOCS_CLONE_CREDENTIALS environment variable with your Git credentials.","Serve command","Now you can serve your Mosaic site by running the following command:","yarn serve","Access your Mosaic site from a browser using the following URLs:","To browse the content from your local source: http://localhost:3000/local","To browse the content from the Mosaic Git repo source: http://localhost:3000/mosaic","That's it! ","Your Mosaic site is now up and running.","Next Steps:","Deploy your Mosaic site to AWS or Vercel for production use.","Create more pages to expand your site's content.","Configure your own sources in the mosaic.config.mjs file to pull content from different locations.","Theme your site"]},{"title":"Getting Started","route":"/mosaic/getting-started/index","content":["Getting Started with Mosaic","Follow our step-by-step guides to quickly create and deploy your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/getting-started/publish-site-to-aws","content":["Publish a site to AWS using S3 snapshots.","Step 1: Generate a Mosaic site","If you have already created your Mosaic site, skip ahead to step 2.","> npx @jpmorganchase/mosaic-create-site -o my-sample-site\n","> cd my-sample-site","Step 2: Create a Github repository","> git init\n","> git remote add origin git@github.com:username/my-sample-site.git\n","> git add .\n","> git commit -m \"initial commit\"\n","> git push origin main","Step 3: Generate a snapshot of content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","> yarn gen:snapshot","Step 4: Configure environment for S3","> export MOSAIC_MODE=\"snapshot-s3\"\n","> export MOSAIC_S3_BUCKET=\"\"\n","> export MOSAIC_S3_REGION=\"\"\n","> export MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","> export MOSAIC_S3_SECRET_ACCESS_KEY=\"\"\n","> yarn mosaic upload -S ./snapshots/latest","Step 5: Setup AWS","Switch to the ","AWS Amplify"," console and deploy your app as a SSR application by following the ","AWS docs",".","Setup an S3 bucket as per the ","AWS S3 docs",".","Step 7: Configure your AWS app","Add the environment vars to the hosted app via your console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16","Step 8: Upload your snapshot","Upload your snapshot to S3 storage.","> yarn mosaic upload -S ./snapshots/latest"]},{"title":"Publish","route":"/mosaic/publish/index","content":["To create your first Mosaic site, we have created a command line generator that scaffolds a ","standard"," site.","A ","standard"," site offers","an out the box, working site, which showcases local and remote content sources","a minimal set of files that can be configured with your own components, themes, layouts, sources and plugins","an update path that enables you to update Mosaic, independently of your own configuration","Create your first site","Install the Mosaic create site script.","> yarn global add @jpmorganchase/mosaic-create-site","Create a directory for your site and run the "," script.","> mkdir mosaic-sample-site\n","> cd mosaic-sample-site\n","> mosaic-create-site -f .","Define the environment variable, which enables us to access your remote repo.","> export MOSAIC_DOCS_CLONE_CREDENTIALS=\"\"","The "," environment variable is composed of your git username and your PAT token.\n","Follow these ","docs"," to see how to create your own PAT token.","Your site is ready to run.","> yarn serve","In your browser load ","Congratulations, you have created your first Mosaic site."]},{"title":"Publish a site to AWS","route":"/mosaic/publish/publish-site-to-aws","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to AWS, deploy your app as a SSR application by following the ","AWS docs",".","Once the basic app has been configured, add the Mosaic specifics.","Add the environment vars to the hosted app via the Amplify console","MOSAIC_MODE=\"snapshot-s3\"\n","MOSAIC_S3_BUCKET=\"\"\n","MOSAIC_S3_REGION=\"\"\n","MOSAIC_S3_ACCESS_KEY_ID=\"\"\"\n","MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Add the following build settings","version: 1\n","frontend:\n"," phases:\n"," preBuild:\n"," commands:\n"," - yarn install\n"," - env | grep -e MOSAIC >> .env.production\n"," build:\n"," commands:\n"," - yarn run build\n"," artifacts:\n"," baseDirectory: .next\n"," files:\n"," - '**/*'\n"," cache:\n"," paths:\n"," - node_modules/**/*","Ensure the Node is set to 16"]},{"title":"Publish a site to Vercel","route":"/mosaic/publish/publish-site-to-vercel","content":["A Mosaic site is a ","Next.Js"," app.","To publish a Next.Js App to Vercel, refer to the ","Vercel docs",".","Deployment","As the ","vercel platform"," hosts static content you will need to deploy a mosaic snapshot. ","There is no option to run mosaic in ","active mode",".","1. ","Update Config File","Add the following to the mosaic config file used by your site:"," deployment: { mode: 'snapshot-file', platform: 'vercel' }","2. ","Set Environment Variables","Set 2 ","environment variables"," in the vercel dashboard.","| Variable Name | Value |\n","| ------------------- | ----------------- |\n","| MOSAIC_MODE | snapshot-file |\n","| MOSAIC_SNAPSHOT_DIR | snapshots/latest. ","|","3. ","Run Build and Deploy","The "," command used by vercel must run "," followed by ","The "," command is needed to workaround an ","output file tracing"," problem.","Example:","yarn build && yarn deploy","Output File Tracing","Output File Tracing"," is a feature of Next.js that uses static analysis\n","to determine what files are needed to deploy a production version of an application.","Due to the architecture of mosaic, snapshot files can be ignored by this process and therefore excluded from the build artifacts deployed by vercel.","If you are deploying your site to the ","vercel platform"," then the mosaic site has a "," command that will update the nextjs output trace to include the snapshot files."]},{"title":"Test","route":"/mosaic/test/index","content":["Pages for e2e testing."]},{"title":"Admin","route":"/mosaic/configure/admin/index","content":["There are several admin urls exposed by Mosaic that provide an insight into how the filesystem has been configured and a way to remotely manage sources.","Endpoints","| Endpoint | Method | Description | Params |\n","| -------------------------- | ------ | -------------------------------------------- | ---------------------- |\n","| "," | GET | Returns the JSON from the Mosaic config file | n/a |\n","| "," | GET | Returns the entire mosaic filesystem as JSON | n/a |\n","| "," | GET | Returns a collection of active sources | n/a |\n","| "," | POST | Adds the source | definition & isPreview |\n","| "," | PUT | Stops the source with the provided name | name |\n","| "," | PUT | Restarts the source with the provided name | name |"]},{"title":"Detail Highlight","route":"/mosaic/configure/layouts/detail-highlight","content":["Layout: Detail Highlight","Initialize with "," in your page's frontmatter.","This layout is used to promote, share insights, and statistics for a line of business.","This layout should be used for pages with only one level of nesting, therefore, pagination is not eligible for this\n","layout.","Page geometry"]},{"title":"Detail Overview","route":"/mosaic/configure/layouts/detail-overview","content":["Layout: Detail Overview","Initialize with "," in your page's frontmatter.","This layout is used to present an overview of expected documentation, statisitics, and ability to\n","navigate to more documents.","Avoid making this page too long. ","If it gets too long, we recommend the ","Detail Technical"," template.","Page geometry","Other Layouts","Detail Highlight","Detail Technical","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Detail Technical","route":"/mosaic/configure/layouts/detail-technical","content":["Layout: Detail Technical","Initialize with "," in your page's frontmatter.","This layout is used for longer, technical, detailed content about the product.","This layout shows less marketing-type visuals and more visual of diagrams, screenshots, and code\n","snippets.","This page can be short or very lengthy.","Page geometry","Other Layouts","Detail Highlight","Detail Overview","Landing","Product Discover","Product Preview","Filler content","Eiusmod veniam adipisicing est magna id sunt occaecat minim adipisicing ad do pariatur id aliqua.\n","Officia officia deserunt consequat ullamco irure. ","Excepteur deserunt esse occaecat ex aute. ","Duis do\n","do in incididunt cupidatat dolore veniam magna aliquip voluptate laborum. ","Non irure magna amet\n","ullamco culpa esse dolore nostrud. ","Id ea id ipsum incididunt do velit aliquip fugiat do non\n","consequat.","A sub heading","Deserunt sunt pariatur mollit dolor eiusmod. ","Anim sunt officia cillum anim. ","Laborum ullamco\n","consectetur elit dolore quis laborum. ","Eiusmod cillum amet veniam sunt Lorem reprehenderit commodo.\n","Cupidatat cillum ea consequat anim. ","Duis voluptate nulla veniam labore quis tempor.","Commodo reprehenderit excepteur amet aliquip cillum veniam ad. ","Ullamco proident deserunt laboris\n","duis laborum consequat laboris est eu enim nulla. ","Mollit velit consectetur ea aliqua consectetur\n","mollit eu ex deserunt. ","Aute excepteur exercitation esse proident excepteur Lorem. ","Quis cillum\n","occaecat sint voluptate incididunt ea ipsum incididunt duis sint magna magna fugiat.","Third-level heading","Ea do magna aute proident nulla cupidatat esse consectetur anim eu esse. ","Consectetur est voluptate\n","excepteur non dolore consequat fugiat deserunt. ","Est nostrud est ea irure reprehenderit commodo\n","nostrud nulla tempor ipsum tempor sit id exercitation. ","Sunt reprehenderit officia anim id quis\n","pariatur velit cillum incididunt officia sunt. ","Ullamco ipsum cillum minim deserunt eiusmod nostrud\n","irure et nulla laborum ipsum ipsum incididunt. ","Voluptate reprehenderit in occaecat ipsum nulla\n","excepteur excepteur mollit laboris id ad laborum do. ","Qui in laborum nostrud quis occaecat proident\n","ipsum tempor laborum consequat id ut velit occaecat.Aliquip quis qui ullamco ipsum exercitation\n","exercitation excepteur ea ex. ","Proident elit incididunt incididunt ad adipisicing quis deserunt sint\n","laboris deserunt ipsum culpa est. ","Id do ex duis Lorem exercitation amet reprehenderit. ","Voluptate qui\n","tempor qui sit minim sit qui ea id dolor excepteur. ","Laborum elit excepteur enim sunt consequat\n","officia cillum. ","Do ea occaecat ut voluptate ea proident duis minim ad pariatur dolore magna enim\n","duis. ","Sit aliqua aliqua ea mollit enim cupidatat proident incididunt. ","Eu dolore sit non incididunt.\n","Mollit reprehenderit sunt sunt cillum labore velit exercitation officia aliqua ea adipisicing do ea.\n","Commodo et fugiat velit dolore consectetur.","Amet dolore deserunt in ut amet officia exercitation sint excepteur voluptate proident tempor enim\n","est. ","Culpa proident tempor in voluptate laboris sunt consectetur sit cillum excepteur culpa enim\n","velit laboris. ","Pariatur elit amet nostrud tempor nostrud ea. ","Exercitation do aliquip nisi amet id.\n","Lorem labore incididunt sit sit veniam tempor do consectetur do culpa qui.","Id sint deserunt laborum mollit id excepteur","mollit excepteur labore labore dolor. ","Sit cupidatat nostrud ad consequat amet excepteur id sunt\n","labore adipisicing non irure. ","Fugiat exercitation laborum officia minim duis dolor do officia Lorem\n","cillum excepteur. ","Sint elit mollit duis sit ad commodo.","Cillum amet irure ut tempor tempor culpa dolore sint.","Lorem qui ipsum reprehenderit est incididunt duis exercitation ea duis fugiat. ","Consectetur enim id\n","sunt exercitation et dolore ea proident sunt excepteur fugiat dolor. ","Veniam proident dolore irure\n","incididunt deserunt pariatur quis. ","Incididunt ea elit deserunt occaecat eiusmod velit fugiat eiusmod\n","dolor eiusmod ullamco. ","Fugiat fugiat eiusmod occaecat nulla consequat pariatur.","Aliquip non cupidatat irure magna et fugiat sunt amet ex est excepteur irure quis. ","Non culpa magna\n","nisi enim eu nulla esse laborum amet ipsum. ","Eu consectetur labore do id occaecat adipisicing."]},{"title":"Layouts","route":"/mosaic/configure/layouts/index","content":["Todo..."]},{"title":"Landing Layout","route":"/mosaic/configure/layouts/landing","content":["Layout: Landing","Initialize with "," in your page's frontmatter.","Use this layout as a landing page to show large branded visuals, and high-level content about the\n","line of business.","Set the tone and voice for your LOB’s experience.","Use components that support your content with places to insert visuals, share any stats or an\n","introduction of LOB’s story.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Product Discover Layout","route":"/mosaic/configure/layouts/product-discover","content":["Layout: Product Discover","Initialize with "," in your page's frontmatter.","Use this layout to introduce a product feature with a description and large visual.","This layout is use for marketing and discovery content.","Page geometry"]},{"title":"Product Preview Layout","route":"/mosaic/configure/layouts/product-preview","content":["Layout: Product Preview","Initialize with "," in your page's frontmatter.","This layout has been used to introduce a product and showcase their suite of product offerings.","Use heading styles to show the grouping of content of a section.","Page geometry"]},{"title":"Active mode","route":"/mosaic/configure/modes/active","content":["In "," mode content can be ","pulled"," from heterogeneous data sources and normalized via plugins, to the configured components/theme.\n","As your content changes, the site will ","re-pull"," the content and update your site in real-time.","The standard generated site comes with 2 sources to demonstrate, how 'active' mode work.","a local source, which loads content from ","a remote source, which loads content from a ","sample Github repository","Configuring your content sources","All content is composed together within a ","namespace",".","A ","namespace"," is the scope for aggregated content, represented by the root path.\n","e.g Our sample docs are aggregated into a ","namespace"," called "," and served by the user journey ","Mosaic doc sources are defined by a file called ","Here is how that might look for a standard site.","Pull your local content","To tryout local content creation, add a file called","The load ","Each directory should contain an "," which is the default page, when a page is loaded without a path","Now create other pages and subdirectories and explore how Mosaic, builds your user-journeys from your fileset.","Pull your remote content","To tryout remote content creation, your standard site comes pre-configured to load our Mosaic sample docs.","Edit the "," and change your "," and "," to pull content from other repos."]},{"title":"Modes of operation","route":"/mosaic/configure/modes/index","content":["Mosaic can operate in 3 different modes","Active updates","In ","active"," mode, content updates in real-time.","active"," mode content is pulled at configured intervals in real-time, as defined by ",".","Read the ","active"," configuration docs.","Static content","Consider a snapshot as a directory of static content previously pulled from your content sources, which does not update itself.","In a snapshot mode, the snapshot does update itself.","File based snapshots","In "," mode, immutable snapshots of content are loaded at startup from the local file-system.","Read the ","snapshot-file"," configuration docs.","S3 based snapshots","In "," mode, snapshots of content are loaded at startup from a remote S3 bucket.","Read the ","snapshot-s3"," configuration docs."]},{"title":"Snapshot file mode","route":"/mosaic/configure/modes/snapshot-file","content":["In "," mode a local immutable snapshot can be loaded by the site. ","Typically, the snapshot and the site are\n","deployed together and upon startup the site can load the snapshot from the local file-system.","To use "," mode","export MOSAIC_MODE=\"snapshot-file\"\n","export MOSAIC_SNAPSHOT_DIR=\"./snapshot/latest\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Commit the snapshot to your Git repo and push the site+snapshot to your Git repo, within the same branch."]},{"title":"Snapshot AWS/S3 mode","route":"/mosaic/configure/modes/snapshot-s3","content":["In "," mode a snapshot can be loaded from a pre-configured AWS S3 bucket.","To use "," mode","> export MOSAIC_MODE=\"snapshot-s3\"\n","> MOSAIC_S3_BUCKET=\"\"\n","> MOSAIC_S3_REGION=\"\"\n","> MOSAIC_S3_ACCESS_KEY_ID=\"\"\n","> MOSAIC_S3_SECRET_ACCESS_KEY=\"\"","Generating a snapshot","To generate a snapshot, run","yarn gen:snapshot","Uploading a snapshot to S3","To upload a snapshot to S3, define the required environment variables and run","yarn mosaic upload -S "]},{"title":"$AliasPlugin","route":"/mosaic/configure/plugins/alias-plugin","content":["The "," is what powers the ","aliases"," feature of Mosaic.","It does this by scrapes "," from page metadata and also applies all aliases stored in ","Other plugins can use "," to apply new aliases, as long as they call it before this plugin has reaches the "," lifecycle event.","This plugin is added to the plugins collection by Mosaic itself so users do ","not"," need to include it in their own mosaic config file.","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"BreadcrumbsPlugin","route":"/mosaic/configure/plugins/breadcrumbs-plugin","content":["The "," is responsible for generating the data needed to show breadcrumbs navigation on pages. ","It then appends this data to a "," property in the page metadata.","Should a page already have a "," property in it's metadata then it is respected and not overwritten.","If a page has a "," property in it's metadata then this is used as the label for the breadcrumb, otherwise the page "," is used.","When the "," is traversing up directories, it needs to know what page in the directory represents the ","breadcrumb"," for that directory. ","It is recommended to use the "," page for this but the page to use is a configurable option of the breadcrumbs plugin.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | ------------------------------------------------ |\n","| indexPageName | The page name to use for \"directory\" breadcrumbs |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the breadcrumbs plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BreadcrumbsPlugin',\n"," options: {\n"," indexPageName: 'index.mdx'\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"BrokenLinksPlugin","route":"/mosaic/configure/plugins/broken-links-plugin","content":["The "," will identify any broken links in pages Mosaic has pulled into it's filesystem by making use of the ","check-links"," package.","It can identify broken links between the pages themselves and external links that pages link out to.","What this plugin is really checking is \"liveness\" of a link.","alive if the URL is reachable (2XX status code)","dead if the URL is not reachable","invalid if the URL was parsed as invalid or used an unsupported protocol","Links may be \"alive\", but the ","content"," of the linked page may not be what you want so continue\n","to check links show what you expect.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n","| baseUrl | This is used to calculate the full url for links between pages. ","It should be the url Mosaic is running on |\n","| proxyEndpoint | If you are behind a corporate proxy, external link checking will not work unless you specify the proxy endpoint using this option |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/BrokenLinksPlugin',\n"," priority: -1,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," baseUrl: process.env.MOSAIC_ACTIVE_MODE_URL || 'http://localhost:8080',\n"," proxyEndpoint: 'http://some-proxy-url'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because it needs Mosaic to be running in order to\n","make requests to all of the page links.","Example Output","When a link is found to be broken, you will see the following output in the console:","@jpmorganchase/mosaic-site:serve: 8080 [Mosaic] Broken links found in /local/docs/publish-site-to-vercel.mdx\n","@jpmorganchase/mosaic-site:serve: 8080 Link to https://nextjs.org/davie is dead {\n","@jpmorganchase/mosaic-site:serve: 8080 type: 'link',\n","@jpmorganchase/mosaic-site:serve: 8080 title: null,\n","@jpmorganchase/mosaic-site:serve: 8080 url: 'https://nextjs.org/davie',\n","@jpmorganchase/mosaic-site:serve: 8080 children: [ { type: 'text', value: 'Next.Js', position: [Object] } ],\n","@jpmorganchase/mosaic-site:serve: 8080 position: {\n","@jpmorganchase/mosaic-site:serve: 8080 start: { line: 4, column: 20, offset: 36 },\n","@jpmorganchase/mosaic-site:serve: 8080 end: { line: 4, column: 55, offset: 71 }\n","@jpmorganchase/mosaic-site:serve: 8080 }\n","@jpmorganchase/mosaic-site:serve: 8080 }"]},{"title":"$CodeModPlugin","route":"/mosaic/configure/plugins/codemod-plugin","content":["Todo"]},{"title":"Plugins","route":"/mosaic/configure/plugins/index","content":["Mosaic Plugins are ","lifecycle-based"," hooks that are called on ","every"," source at different stages. ","You will never need to invoke a lifecycle method directly as their execution is managed by a plugin runner.","Plugins enable Mosaic to have a lightweight and flexible, modular architecture by encapsulating features and functionality as plugins.","Installation","Configuration","Plugins are added to the "," collection of the mosaic config file. ","Like ","sources",", plugins have an options property that can be used to provide plugin specific configuration.","| Property | Description | Required |\n","| --------------- | -------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed plugin module | Yes |\n","| disabled | Exclude this plugin completely. ","Defaults to false | No |\n","| runtimeOnly | Exclude this plugin when generating a snapshot. ","Defaults to false | No |\n","| previewDisabled | Exclude this plugin for \"preview\" sources | No |\n","| allowMultiple | Allow multiple instances of this plugin to run. ","| No |\n","| priority | The importance of this plugin. ","Plugins with the highest priority run first | No |\n","| options | Collection of other configuration values | No |"," plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: {}\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n","],","There is no need to import the plugin module directly. ","As long as the plugin is installed, Mosaic\n","will be able to import it using the built-in plugin loader.","Default Plugins","The following plugins are always included by Mosaic, regardless of whether they are present in the plugins collection of the Mosaic config file:","$TagPlugin","$AliasPlugin","$CodeModPlugin","$RefPlugin","Plugin errors","Should a plugin fail, the failure will ","not"," cause a source to close or for any other plugin to not run.","Instead plugin errors are tracked by Mosaic and can be viewed in the "," property available on each source listed by the list sources ","admin API",".","Plugin errors will be split by lifecycle event and only the lifecycle events used by the loaded plugins used will be shown.","Multiple Instances","By default, Mosaic will only run one instance of a plugin.","It may be the case that you wish to run the same plugin twice with a slightly different config. ","To do this, you must have 2 instances listed in the plugins collection and they ","both"," must set the "," option to ",".","For example, the config below runs the ","SidebarPlugin"," twice:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: 'products/product-a' },\n"," allowMultiple: true\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/!(","product-a)/*' },\n"," allowMultiple: true\n"," }\n"," // other plugins\n","];"]},{"title":"LazyPagePlugin","route":"/mosaic/configure/plugins/lazy-page-plugin","content":["The "," attempts to reduce the size of the Mosaic filesystem in memory by moving page metadata and content to disk.","It then adds a hook, so that when a page is requested the data is loaded from disk and combined with what is already in the Mosaic filesystem.","It must be the very last to run so that it can strip off metadata and content after other plugins\n","have finished with them.","Priority","This plugin runs with a priority of -2. ","Needs to be the last to run for biggest impact.","Options","| Property | Description |\n","| -------- | ------------------------------------------------------------------------------ |\n","| cacheDir | The directory to store the cache. ","Defaults to "," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/LazyPagePlugin',\n"," // This plugin must be the very last to run, so it can strip off metadata and content after the other\n"," // plugins are done with them\n"," priority: -2,\n"," // Exclude this plugin in builds\n"," runTimeOnly: true,\n"," options: {\n"," cacheDir: '.tmp/.pull-docs-last-page-plugin-cache'\n"," }\n"," }\n"," // other plugins\n","];","This plugin needs to be a "," plugin because the goal is to reduce the in-memory\n","filesystem size."]},{"title":"PagesWithoutFileExtPlugin","route":"/mosaic/configure/plugins/pages-wthout-extensions-plugin","content":["The "," plugin creates ","aliases"," without the file extension for every page in the Mosaic filesystem.\n","This allows pages to be retrieved from the filesystem without specifying the extension e.g., ",".","The plugin also modifies the "," metadata property of a page to point to the shorter alias.","Priority","This plugin runs with a priority of 1. ","It must run after the ","$AliasPlugin",".","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PagesWithoutFileExtPlugin',\n"," options: {},\n"," priority: 1\n"," }\n"," // other plugins\n","];"]},{"title":"PublicAssetsPlugin","route":"/mosaic/configure/plugins/public-assets-plugin","content":["The "," is responsible for finding \"assets\" in the Mosaic filesystem and copying them to another directory.","Typical usecase is for copying "," and "," to the public directory of a Next.js site as these are considered ","static assets"," for Next.js.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| --------- | ----------------------------------------------------------- |\n","| outputDir | The directory to copy the assets to. ","Defaults to "," |\n","| assets | A collection of filenames to copy to the outputDir |","Adding to Mosaic","This plugin is ","not"," included in the mosaic config shipped by the Mosaic standard generator so it must be added manually to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/PublicAssetsPlugin',\n"," priority: -1,\n"," options: {\n"," outputDir: './public',\n"," assets: ['sitemap.xml', 'search-data.json']\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"ReadingTimePlugin","route":"/mosaic/configure/plugins/reading-time-plugin","content":["The "," generates an estimation of how long a page written in MDX will take to read and adds the "," property to the metadata of a page.","Priority","This plugin runs with no special priority.","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/ReadingTimePlugin',\n"," options: {}\n"," }\n"," // other plugins\n","];"]},{"title":"$RefPlugin","route":"/mosaic/configure/plugins/ref-plugin","content":["The "," powers the ","refs"," feature of Mosaic.","The plugin scrapes "," properties from page metadata and also applies all refs stored in ",".","Other plugins can use "," to apply new refs, as long as they call it before this plugin has reaches ",".","Priority","This plugin runs with a priority of -1 so it runs ","after"," most other plugins."]},{"title":"SearchIndexPlugin","route":"/mosaic/configure/plugins/search-index-plugin","content":["The "," is responsible for generating the search index and configuration information for ","Fuse.js"," which is the matching engine powering the client-side search functionality of Mosaic sites.","It outputs 3 files:","Full Search Index - ","Condensed Search Index - ","Search Configuration - ","Full Search Index","On a Mosaic site, the full index is fetched after a page has loaded, thus removing the chance of a huge index slowing down first-load.","Practically, the full index should load in the background before a user searches for something, but should a search be initiated before that (e.g., slow-internet) then the condensed version of the search index is available.","Condensed Search Data","Search Index plugin creates a \"condensed\" version of the search index that only includes the "," and "," for each page. ","This is the \"Minimum Viable Index\" to provide somewhat useable search results client-side while the main search index is loaded in the background.","Search Configuration","Any ","options"," that need to be passed to Fuse.js.","Search relevancy configuration","| Property | Description |\n","| ---------------- | ----------------------------------------------------- |\n","| includeScore | https://www.fusejs.io/api/options.html#includescore |\n","| includeMatches | https://www.fusejs.io/api/options.html#includematches |\n","| maxPatternLength | TODO |\n","| ignoreLocation | https://www.fusejs.io/api/options.html#ignorelocation |\n","| threshold | https://www.fusejs.io/api/options.html#threshold |\n","| keys | https://www.fusejs.io/api/options.html#keys |","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| ------------- | --------------------------------------------------- |\n","| maxLineLength | TODO |\n","| maxLineCount | TODO |\n","| keys | https://www.fusejs.io/api/options.html#keys |\n","| relevancy | ","search relevancy"," |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SearchIndexPlugin',\n"," previewDisabled: true,\n"," options: { maxLineLength: 240, maxLineCount: 240 }\n"," }\n"," // other plugins\n","];","It's usually a good idea to mark this plugin as disabled for preview sources otherwise the pages\n","from the preview will appear in search results."]},{"title":"SharedConfigPlugin","route":"/mosaic/configure/plugins/shared-config-plugin","content":["The "," crawls the page hierarchy to find the closest "," metadata from any parent index's page metadata. ","It then exports a JSON file into each directory with the merged config for that level.","Shared config is typically the place where the following is configured for a Mosaic site:","App Header configuration including site name and main navigation","Footer information","Help links for the left sidebar area","Namespace Shared Configs","Consider 2 sources the share the same ","namespace"," \"product-docs\":","Source A - multiple product directories and main product index page. ","The index page specifies "," metadata.","Source B - pages relevant to a single product. ","Index page does ","not"," have any "," metadata.","Let's also assume that the pages from Source B would also naturally \"fit\" within the pages of Source B (e.g. inside a products directory).","In this scenario, the "," will attempt to copy the shared config file from Source A into the root directory of Source B allowing the Source B pages to use the Source A "," as though it were a product sourced directly from Source A.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| -------- | ---------------------------------------------- |\n","| filename | the name of the JSON file output by the plugin |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SharedConfigPlugin',\n"," options: {\n"," filename: 'shared-config.json'\n"," },\n"," priority: 3\n"," }\n"," // other plugins\n","];"]},{"title":"SidebarPlugin","route":"/mosaic/configure/plugins/sidebar-plugin","content":["The "," generates the necessary page metadata needed for the vertical navigation shown on some Mosaic pages.","The output from the plugin is added to a "," metadata property of the page.","Configuration","The "," is used to determine the \"root\" directories of the sidebar. ","So for example:"," - generate sidebar data for the pages that are 3 directories deep in the filesystem hierarchy"," - same as above but ignore the product-a directory"," - generate a sidebar just for product-b in the products directory","To rearrange pages in the sidebar or to apply a different label to a page you can ","configure the sidebar"," using page frontmatter.","Priority","This plugin runs with a priority of 3.","Options","| Property | Description |\n","| ----------- | ----------------------------------------------------------------------------- |\n","| filename | filename of the sidebar json, linked to each related page via ref |\n","| rootDirGlob | Glob pattern for matching directories which should be the root of the sidebar |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SidebarPlugin',\n"," options: { rootDirGlob: '*/*/*' }\n"," }\n"," // other plugins\n","];"]},{"title":"SiteMapPlugin","route":"/mosaic/configure/plugins/site-map-plugin","content":["The "," generates a ","sitemap"," using the pages in the Mosaic filesystem that adheres to the ","sitemaps XML schema",".","The output of the plugin is a file is named ",".","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | --------------------------------------------------------------------------------------------------- |\n","| siteUrl | The site URL. ","Used as the prefix for loc entries in the sitemap as these must start with a protocol |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/SiteMapPlugin',\n"," previewDisabled: true,\n"," options: { siteUrl: process.env.SITE_URL || 'http://localhost:3000' }\n"," }\n"," // other plugins\n","];","Visualiser","To visualise your sitemap you can combine this plugin with the "," component provided by ",".","Rendering the "," component will render a tree view of your sitemap.","","Have a look at this site's pages, ","here","."]},{"title":"$TagPlugin","route":"/mosaic/configure/plugins/tag-plugin","content":["The "," powers the tags feature of Mosaic.","This plugin scrapes "," from page metadata and also applies all aliases stored in ",".","Tags ultimately resolve down into ","refs",", but are different from normal refs, in that they are applied to the\n","union filesystem (all merged filesystems), not to the individual source filesystem that they were defined on. ","This can be thought of as a ","global ref",".","Other plugins can use "," and modify the "," property, to apply new global refs, as long as\n","they do so before this plugin has reaches ",".","Priority","This plugin runs with no special priority but it must run before both the "," and the ",".","Example use case - Products Page","Let's assume there is a products page on your site and each product is shown as a tile. ","The information for each product tile is sourced from multiple Mosaic sources. ","How can tags be used to reference the product data needed for each tile on the products page?","The product page should add a "," metadata prop to its frontmatter:","---\n","title: Products\n","description: Product index\n","layout: ProductPreview\n","data:\n"," items:\n"," $tag: product#/data\n","---","The tag shown in the example above is saying populate "," of the Products index page with the "," metadata property of pages tagged with ",".","A tagged product page needs to have a "," property which is a collection of tags and one of these needs to be ",". ","This will allow the "," to correctly associate the product page to the product index page. ","It will also need a "," property because thats the property our product index page wants to use for the tiles.","---\n","title: Product A\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/a/index\n","---","---\n","title: Product B\n","description: My Product description\n","layout: ProductDiscover\n","tags:\n"," - product\n","data:\n"," name:\n"," $ref: '#/title'\n"," date: 2023/02/07\n"," action: Product Overview\n"," description:\n"," $ref: '#/description'\n"," link: /products/b/index\n","---"]},{"title":"TableOfContentsPlugin","route":"/mosaic/configure/plugins/toc-plugin","content":["The "," generates a Table of Contents for each page in the Mosaic filesystem using the headings on the page.","Heading ranks are used to determine which page headings should be included in the Table of Contents:","| Heading Element (markdown syntax) | Rank |\n","| --------------------------------- | ---- |\n","| h1 (#) | 1 |\n","| h2 (##) | 2 |\n","| h3 (###) | 3 |\n","| h4 (####) | 4 |\n","| h5 (#####) | 5 |\n","| h6 (######) | 6 |","The plugin output is added to a "," metadata property of a page.","Priority","This plugin runs with no special priority.","Options","| Property | Description |\n","| -------- | ----------------------------- |\n","| minRank | The minimum page heading rank |\n","| maxRank | The maximum page heading rank |","Adding to Mosaic","This plugin is included in the mosaic config shipped by the Mosaic standard generator. ","So if you use the below import in your "," file then the plugin is included already:","import mosaicConfig from '@jpmorganchase/mosaic-standard-generator/dist/fs.config.js';","To add it yourself, add the following to the "," collection:","plugins: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-plugins/TableOfContentsPlugin',\n"," options: {\n"," minRank: 2,\n"," maxRank: 3\n"," }\n"," }\n"," // other plugins\n","];"]},{"title":"Git Repo Source","route":"/mosaic/configure/sources/git-repo-source","content":["The Git Repo Source is used to pull content from a remote git repository e.g. github.","Installation","Credentials and Access tokens","To successfully clone the git repo, the source definition must include credentials that have sufficient permissions to clone the repository.","We recommend storing a ","personal access token"," in an environment variable and using the environment variable in the source definition.","This keeps credentials out of code where they may be accidentally exposed to third parties.","Example","export MOSAIC_DOCS_CLONE_CREDENTIALS=\":\",","Configuration","| Property | Description | Required |\n","| ------------------- | -------------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-git-repo) | Yes |\n","| namespace | The scope for this source. ","| Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.credentials | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.subfolder | The name of the folder within the cloned repo containing the docs | Yes |\n","| options.repo | The repo URL | Yes |\n","| options.branch | The branch or tag to clone | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the subfolder | Yes |\n","| options.remote | The name of the git remote to use. ","Defaults to origin. ","| Yes |","Example Git Repo Source Definition","\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'mosaic',\n"," options: {\n"," credentials: process.env.MOSAIC_DOCS_CLONE_CREDENTIALS,\n"," prefixDir: 'mosaic',\n"," subfolder: 'docs',\n"," repo: 'https://github.com/jpmorganchase/mosaic.git',\n"," branch: 'main',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"]},{"title":"HTTP Source","route":"/mosaic/configure/sources/http-source","content":["The HTTP Source is used to pull content over HTTP.","Multiple endpoints can be specified and the source will combine and transform the response from each into a single collection of pages.","Installation","Configuration","| Property | Description | Required |\n","| ------------------------------------------ | ----------------------------------------------------------------------------- | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-http) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.endpoints | Collection of URLS to make requests | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.transformResponseToPagesModulePath | The path of the module used to transform endpoint responses into Mosaic pages | Yes |\n","| options.checkIntervalMins | Number of minutes to wait between requests. ","Defaults to 5 minutes | No |\n","| options.initialDelayMs | Number of milliseconds to wait for making initial request. ","Defaults to 1000 | No |","Example HTTP Source Definition"," {\n"," modulePath: '@jpmorganchase/mosaic-source-http',\n"," namespace: 'my-namespace',\n"," options: {\n"," prefixDir: 'docs',\n"," endpoints: [\n"," 'https://api.data.com/blah',\n"," 'https://api.data.com/hello'\n"," ],\n"," transformResponseToPagesModulePath: '@scope/transformer-package'\n"," }\n"," }"]},{"title":"Sources","route":"/mosaic/configure/sources/index","content":["Sources are what Mosaic uses to pull content from disparate locations and merge into a single virtual filesystem that can be used by a Mosaic Site.","Depending on the ","mode"," used, sources can update periodically ensuring that new content is made available automatically.","Source Definitions","Source Definitions are specified in the "," collection of a mosaic config file.","Each source uses a ","zod schema"," to validate the provided JSON to ensure that all required information for the source to pull content has been provided.","A source definition at a minimum needs to provide the module path of the source and the ","namespace"," that it will use. ","A namespace is not unique across sources though it is common that each source has a different namespace.","Lastly, the options field can be used as a bucket for configuration values needed to configure the source e.g. credentials.","Users are free to add any property as a source option but please read the ","gotchas","\n","first regarding the allowed ","values",".","Example Local Folder Source Definition"," /**\n"," * Demonstrates a local file-system source, in this case a relative path to where the\n"," * site was generated.\n"," * Access from your browser as http://localhost:3000/local\n"," */\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n"," }","Source Namespace","A Source Namespace is a scoping mechanism for Mosaic sources used to filter the content loaded by Mosaic. ","By default all sources specified in the mosaic config file are loaded.","sources: [\n"," {\n"," namespace: 'my-namespace',\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder'\n"," }\n","];","The following command will ensure mosaic only loads sources with the "," scope.","yarn mosaic serve -c ''./mosaic.config.mjs' -p 8080 --scope \"local\"","Source Schedules","Source schedules define how often sources pull in content that exists remotely and if a failed source is retried. ","More information can be found ","here","Source Types","Out of the box, Mosaic provides 3 source \"types\":","Local Folder","Git Repo Source","HTTP Source","Sources must expose an observable interface so it is possible to compose sources together e.g. the Git Repo source uses the Local Folder source internally to watch the cloned folder for changes.","Watching for Updates","When running in ","active mode",", Mosaic will watch for any changes to the source content and if a change is detected, will initiate a pull of that new content.","How often to check for updates and how updates are triggered are a matter for the source to handle. ","Mosaic simply responds when a source emits new content.","Source Worker Thread","Sources are executed inside their own worker thread to ensure that the main thread is not overloaded. ","It is here that a local virtual filesystem for the source is created and where several of the ","Plugin Lifecycle"," events are triggered.","Gotchas","A service worker thread uses ","postMessage"," to communicate with the main thread and vice-versa.","This is important because it limits what values can be provided in the source definition to those that can be processed by the ","Structured Clone Algorithm","."]},{"title":"Local Folder Source","route":"/mosaic/configure/sources/local-folder-source","content":["The Local Folder Source is used to pull content from a folder located on the same machine as Mosaic is running.","It is common to use this source when running mosaic locally.","Installation","Configuration","| Property | Description | Required |\n","| ------------------ | ------------------------------------------------------------------------------ | -------- |\n","| modulePath | The path to the installed module (@jpmorganchase/mosaic-source-local-folder) | Yes |\n","| namespace | The scope for this source | Yes |\n","| disabled | When true, content from this source is not used | No |\n","| options.rootDir | The top level directory content will be pulled from | Yes |\n","| options.prefixDir | The root path used in the content URL | Yes |\n","| options.extensions | Collection of file extensions that the source will look for inside the rootDir | Yes |","Example Local Folder Source Definition","{\n"," modulePath: '@jpmorganchase/mosaic-source-local-folder',\n"," namespace: 'local', // each site has it's own namespace, think of this as your content's uid\n"," options: {\n"," rootDir: '..","/../docs', // relative path to content\n"," prefixDir: 'local', // root path used for namespace\n"," extensions: ['.mdx'] // extensions of content which should be pulled\n"," }\n","}","This source will look for content with the \".mdx\" extension in a \"docs\" directory 2 levels up from the Mosaic working directory. ","That content is included in the \"local\" namespace and available from a route that is prefixed with \"local\".","So if you had a file, "," then you would be able to view it at ","."]},{"title":"Source Schedules","route":"/mosaic/configure/sources/schedules","content":["A source schedule defines how often a source initiates a content pull and what to do when there is a failure.","A schedule can be specified for each source in the source definition, but should a source not provide a schedule it will inherit the \"global\" schedule.","Configuration","| Property | Description | Required | Default |\n","| ----------------- | -------------------------------------------------------------------------------------- | -------- | ------- |\n","| checkIntervalMins | The length of time in minutes before triggering a content refresh | Yes | 30 mins |\n","| initialDelayMs | Startup delay for the source. ","| Yes | 1000 ms |\n","| retryEnabled | When true, failures will trigger another content pull | No | true |\n","| retryDelayMins | The interval between retries. ","This will rise exponentially on every failure. ","| No | 5 |\n","| maxRetries | Maximum number of retry attempts | No | 100 |\n","| resetOnSuccess | If true, when a source recovers and emits pages it's retry counter is returned to zero | No | true |","Global Schedule","The global schedule applies to all sources that do ","not"," provide their own schedule. ","It can be configured as a top-level property of the Mosaic config file."," schedule: {\n"," checkIntervalMins: 60,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 15,\n"," maxRetries: 20\n"," }","Example","Given the config file below:"," schedule: {\n"," checkIntervalMins: 30,\n"," initialDelayMs: 1000,\n"," retryDelayMins: 5,\n"," maxRetries: 10\n"," },\n"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceA',\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceA',\n"," subfolder: 'docs',\n"," repo: 'source-a-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," },\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-git-repo',\n"," namespace: 'sourceB',\n"," schedule:{\n"," checkIntervalMins: 60,\n"," initialDelayMs: 5000,\n"," retryDelayMins: 30,\n"," maxRetries: 50\n"," }\n"," options: {\n"," credentials: 'credentials',\n"," prefixDir: 'sourceB',\n"," subfolder: 'docs',\n"," repo: 'source-b-repo-url',\n"," branch: 'develop',\n"," extensions: ['.mdx'],\n"," remote: 'origin'\n"," }\n"," }\n"," ]","Source A will inherit the global schedule so it will:","Start after a 1 second delay","Pull content every 30 minutes","Retry a failed content pull after an initial 5 minute delay","Retry 10 times and if still unsuccessful, closing","Source B has its own schedule so it will:","Start after a 5 second delay","Pull content every 60 minutes","Retry a failed content pull after an initial 30 minute delay","Retry 50 times and if still unsuccessful, closing","Retry Strategy","The retry strategy that Mosaic employs is ","Exponential Backoff",". ","This is a common strategy for networking applications that aims to prevent retries from causing more harm than good.","For example, given a source schedule that has a 1 minute retry delay and will retry a maximum of 3 times then the total time spent retrying is 7 minutes:","1 minute delay then 1st retry","2 minute delay then 2nd retry","4 minute delay then 3rd (and final) retry","Total delay: 1 + 2 + 4 = 7 minutes","As you can see, the delay between retries is growing exponentially giving the content source more time to recover after each retry."]},{"title":"Figma Source","route":"/mosaic/configure/sources/source-figma","content":["The Figma source is used to pull individual design patterns from Figma projects.\n","The source subscribes to Figma project groups, then extracts from project files, tagged patterns.","A Figma pattern tag is defined within a Figma project's ",".","For each retrieved/tagged pattern, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular pattern and then\n","group patterns based on owner.","Installation","Configuration","The Figma source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","| Property | Description | Required |\n","| ---------- | --------------------------------- | -------- |\n","| prefixDir | path to store figma patterns | Yes |\n","| figmaToken | figma access token | Yes |\n","| projects | array of projects to subscribe to | Yes |\n","| endpoints | figma endpoints | Yes |","Each project is configured from the "," array.","| Property | Description | Required |\n","| ------------- | --------------------------------------------- | -------- |\n","| id | numerical id of the subscribed project group | Yes |\n","| meta | metadata to add to each of the projects pages | Yes |\n","| patternPrefix | prefix to add to all pages created | Yes |"," defined the Figma REST API endpoints.","| Property | Description | Required |\n","| ----------------- | --------------------------------------------------------- | -------- |\n","| getProject | url to return a list of projects within the project group | Yes |\n","| getFile | url to return a project file | Yes |\n","| generateThumbnail | url to generate a thumbnail for the shared Figma node | Yes |","Example Figma Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-figma',\n"," namespace: 'some-namespace',\n"," options: {\n"," proxyEndpoint: 'http://path/to/optional/proxy',\n"," prefixDir: '/some/path/to/where/you/store/pattern/pages',\n"," figmaToken: process.env.FIGMA_TOKEN,\n"," projects: [{\n"," id: 99999,\n"," patternPrefix: 'yourPrefix',\n"," meta: {\n"," tags: [ 'some-tag'],\n"," data: {\n"," owner: 'some-owner'\n"," }\n"," }\n"," }],\n"," endpoints: {\n"," getFile: 'https://api.figma.com/v1/files/:file_id?","plugin_data=shared',\n"," getProject: 'https://api.figma.com/v1/projects/:project_id/files',\n"," generateThumbnail: 'https://api.figma.com/v1/images/:project_id?","ids=:node_id'\n"," }\n"," }\n"," }\n","]"]},{"title":"Readme Source","route":"/mosaic/configure/sources/source-readme","content":["The Readme source is used to pull individual "," text files from repositories.\n","This is a lighter weight version of a Git repository resource, which just pulls a single file,\n","rather the whole contents of the repo.","For each retrieved readme, a page is created in the Mosaic file-system.\n","Additional Mosaic metadata can be added, to each created page, using ","\n","For instance we could add metadata which defines which product owns a particular "," and then\n","group this page, with others, based on owner.","Installation","Configuration","The Readme source is an "," and shares the same base configuration.","| Property | Description | Required |\n","| ----------- | --------------------- | -------- |\n","| accessToken | request access token | Yes |\n","| prefixDir | path to store pages | Yes |\n","| readme | array of readme files | Yes |","Each readme is configured from the "," array.","| Property | Description | Required |\n","| --------------- | ---------------------------- | -------- |\n","| contentTemplate | template for content of page | No |\n","| name | page name used in route | Yes |\n","| readmeUrl | url of readme | Yes |\n","| meta | metadata for page | Yes |","Example Readme Source Definition"," sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-readme',\n"," namespace: 'your-namespace',\n"," schedule: { checkIntervalMins: 0.25, initialDelayMs: 0 },\n"," options: {\n"," prefixDir: '/salt/community-index/readme',\n"," accessToken: 'Bearer your-access-token',\n"," readme: [\n"," {\n"," name: 'your-mosaic-page-name',\n"," readmeUrl: 'https://some/repo/url/readme.md',\n"," contentTemplate: `a template which replaces ::content:: with the content`,\n"," meta: {\n"," layout: 'DetailTechnical',\n"," title: 'Your Page Title',\n"," tags: ['your-tag-if-required'],\n"," description: 'A description for your readme'\n"," }\n"," }]\n"," }\n"," }]"]},{"title":"Storybook Source","route":"/mosaic/configure/sources/source-storybook","content":["The Storybook source is used to pull individual stories from Storybook, based on tags.","The Mosaic source will filter your Storybook's stories, based on "," or ",".","For each matching story, a page is created in the Mosaic file-system.","additional Mosaic tags can be added to each page using ","additional Mosaic metadata can be added to each page using ","This information can be used to create a dynamic index of stories from Storybook.","Installation","Configuration","The Storybook source is an "," and shares the same base configuration.\n","The "," prop has a default transformer which creates a page for each matching Story.","The "," option is an array of Storybook urls that are used as Sources.\n","Each story is matched on "," using the "," Regexp (or by ",").","If specified, "," and "," can be added to any matching pages.","| Property | Description | Required |\n","| --------------- | ---------------------- | -------- |\n","| options.stories | array of story configs | Yes |"," is an array of Storybooks that you want to pull stories from","| Property | Description | Required |\n","| -------------- | ---------------------------------------- | -------- |\n","| storyUrlPrefix | prefix url of the storybook deployment | Yes |\n","| description | description of the storybook stories | Yes |\n","| storiesUrl | url of the storybook's "," | No |\n","| filter | RegExp filter to match on | No |\n","| filterTags | Array of Storybook tags to match on | No |\n","| meta | additional data to add to matching pages | No |","Example Local Folder Source Definition","sources: [\n"," {\n"," modulePath: '@jpmorganchase/mosaic-source-storybook',\n"," namespace: 'salt',\n"," options: {\n"," prefixDir: '/salt/internal/community-index/story-navigation',\n"," stories: [\n"," {\n"," storiesUrl: 'https://storybook.saltdesignsystem.com/stories.json',\n"," storyUrlPrefix: 'https://storybook.saltdesignsystem.com',\n"," description: 'Navigation patterns created in the Salt Labs',\n"," meta: { // can be any additional metadata you want added to the page's meta.data\n"," tags: ['some-tag'],\n"," data: {\n"," owner: 'Salt',\n"," source: 'STORYBOOK'\n"," }\n"," },\n"," filter: /Lab\\/Tabs/ // this is a Regexp that matches on Storybook kind\n"," }\n"," ]\n"," }\n"," }\n","]"]},{"title":"Custom Components","route":"/mosaic/configure/theme/custom-components","content":["Learn how to add your own custom components to your Mosaic site.","Create Components Folder","To start, create a "," folder under "," where you'll store your custom components.","src/\n","└── components/","In this tutorial, we will create a custom "," component.","Create Card Component","Inside the "," folder, create a "," folder, which will contain your React "," component. ","The "," folder should include "," and "," files as shown in the structure below:","├── src/\n","│ ├── components/\n","│ │ └── card/\n","│ │ ├── index.tsx\n","│ │ └── card.module.css","Card Component: index.tsx","Create your "," component within the "," file:","import React from 'react';\n","import styles from './card.module.css';\n","\n","type CardProps = {\n"," title: string;\n"," content: string;\n","};\n","\n","export const Card: React.FC = ({ title, content }) => {\n"," return (\n","
    \n","

    {title}

    \n","

    {content}

    \n","
    \n"," );\n","};","Card Component: card.module.css","Define your component styles in the "," file:",".card {\n"," background-color: #f5f5f5;\n"," border: 1px solid #ccc;\n"," border-radius: 4px;\n"," box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n"," padding: 16px;\n"," transition: box-shadow 0.2s ease-in-out;\n","}\n","\n",".card:hover {\n"," box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n","}\n","\n",".card h2 {\n"," color: #333;\n"," font-size: 24px;\n"," margin-bottom: 8px;\n","}\n","\n",".card p {\n"," color: #666;\n"," font-size: 16px;\n"," line-height: 1.5;\n","}","In this example, we use a CSS file, but you can use whichever styling approach you prefer, such as ","vanilla extract",".","To export your "," component, create an "," file in the "," folder:","export * from './card';","Your final folder structure should look like this:","├── src/\n","│ ├── components/\n","│ │ ├── card/\n","│ │ │ ├── index.tsx\n","│ │ │ └── card.module.css\n","│ │ ├── index.ts","Import Custom Card Component","To use your custom "," component, import it into your site's "," file. ","Add the following line to your imports:","import * as myComponents from '../components';","Replace this line:","const components = mosaicComponents;","with:","const components = {\n"," ...mosaicComponents,\n"," ...myComponents\n","};","This will add your custom components to the site, and any custom components in "," will override the corresponding ones in ",". ","The spread operator (",") merges both "," and "," objects, giving priority to "," when there is a naming conflict.","Use Your Custom Card Component","Now you're ready to use your custom "," component. ","Build and run your site, and add the "," component to an MDX file in your "," folder or another source:","","You can create and add more custom components to your Mosaic site by following the same process."]},{"title":"Custom CSS","route":"/mosaic/configure/theme/custom-css","content":["You can customize the look and feel of your Mosaic site by creating cusotm CSS files. ","Here is a step-by-step guide to help you create your own CSS theme.","Create a CSS folder","To get started, create a folder named \"css\" in the \"src\" folder of your Mosaic project.","src/\n","└── css/","Create your theme","Inside the \"css\" folder, create a folder named \"global\". ","This is where you will add your custom styles.","src/\n","└── css/\n"," ├── global/\n"," ├── index.css","Create an \"index.css\" file inside the \"css\" folder. ","This file will import your custom styles.","@import './global/';","Inside your global folder, create a separate CSS file for each part of your site that you want to customize. ","For instance, if you want to change the text styling, create a \"text.css\" file inside the \"global\" folder. ","Here is an example of how your \"text.css\" file could look like:","h1 {\n"," /* Set custom font size and weight */\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h2 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h3 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h4 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h5 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","h6 {\n"," font-size: /* insert value */ ;\n"," font-weight: /* insert value */ ;\n","}\n","\n","p {\n"," font-size: /* insert value */ ;\n"," line-height: /* insert value */ ;\n","}","You can add as many CSS files as you need, depending on how much you want to customize your site.","Create an \"index.css\" file inside the \"global\" folder. ","This file will import your custom styles, in this example we are importing our \"text.css\" file.","@import './text.css';","Your \"css\" folder should now look like this:","src/\n","└── css/\n"," ├── global/\n"," │ ├── text.css\n"," │ ├── index.css\n"," ├── index.css","Import your custom CSS into your site","To apply your custom styles to your Mosaic site, open your \"_app.tsx\" file and add the following line to the bottom of your imports:","import '../css/index.css';","Congratulations! ","You have successfully applied your custom CSS styles to your site. ","This example demonstrated how to create text styles, but you can use the same approach to customize other aspects of your site as well."]},{"title":"Theming Your Site","route":"/mosaic/configure/theme/index","content":["Create a unique look and feel for your Mosaic site by customizing the CSS theme and integrating your own UI components.","Customize the CSS","Adapt various design elements of your Mosaic site to create a cohesive visual theme. ","Refer to our guide to learn more about crafting a custom CSS theme:","CSS Theme Guide","Import Custom Components","Incorporate your own UI components, to tailor the look and functionality of your content. ","This tutorial will walk you through the process of adding custom components to your site:","Adding Custom Components Tutorial"]},{"title":"Aliases Test","route":"/mosaic/test/aliases/index","content":["This page is the alias test page."]},{"title":"Detail Highlight Test Page","route":"/mosaic/test/layouts/detail-highlight","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Overview Test Page","route":"/mosaic/test/layouts/detail-overview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Detail Technical Test Page","route":"/mosaic/test/layouts/detail-technical","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Edit Layout","route":"/mosaic/test/layouts/edit","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Full Width Layout","route":"/mosaic/test/layouts/full-width","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Layouts","route":"/mosaic/test/layouts/index","content":["Pages for e2e testing of layouts."]},{"title":"Landing Layout Test Page","route":"/mosaic/test/layouts/landing","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Newsletter Test Page","route":"/mosaic/test/layouts/newsletter","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Discover Test Page","route":"/mosaic/test/layouts/product-discover","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Product Preview Test Page","route":"/mosaic/test/layouts/product-preview","content":["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 1","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 2","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 3","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum","Heading 4","Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n","Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n","Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n","Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"]},{"title":"Refs Data","route":"/mosaic/test/refs/data","content":[]},{"title":"Refs Test","route":"/mosaic/test/refs/index","content":["The sidebar priority is ",".","The other page data is ","."]},{"title":"Tags Test","route":"/mosaic/test/tags/index","content":["In Stock","Out of Stock"]},{"title":"$afterSource","route":"/mosaic/configure/plugins/lifecycle/after-source","content":["The first lifecycle event to trigger after receiving pages from a source and runs in a child process.\n","The pages can safely be mutated and will be reflected in the final filesystem that gets generated.\n","It ","must"," return a collection of pages.","The "," lifecycle event is called with:","pages - the collection of pages emitted by the source","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |","Example - Log out all page routes","async function $afterSource(pages, { config, ignorePages, pageExtensions }) {\n"," for (const page of pages) {\n"," console.log(page.route);\n"," }\n"," return pages;\n","}"]},{"title":"afterUpdate","route":"/mosaic/configure/plugins/lifecycle/after-update","content":["The third lifecycle event to trigger overall and the first to trigger inside the main Mosaic process.","Calls after the filesystem and symlinks have been reconstructed due to a change to the current source pages. ","Pages will ","not"," be cached when read at this stage, to allow for reading content and writing a new copy of it without the cached version taking effect.\n","This method is safe to use with lazy loading, as the filesystem should return the full page when read.","The "," lifecycle event is called with:","mutableFilesystem - Mutable filesystem instance with all of this source's pages inside (and symlinks re-applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalConfig | An immutable object for reading data from other lifecycle phases of all plugins. ","Shared across all sources. ","|\n","| sharedFilesystem | Mutable filesystem instance independent of any sources. ","Useful for global pages, like sitemaps |\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"$beforeSend","route":"/mosaic/configure/plugins/lifecycle/before-send","content":["The second lifecycle event to trigger and does so after a filesystem has been built up from the source pages.","It is the last lifecycle event to run in a source child process before the filesystem is sent to the main Mosaic process and should ","not"," return a value.","The "," lifecycle event is called with:","mutableFilesystem - Mutable virtual filesystem instance with all of this source's pages inside (and symlinks applied)","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | A mutable object for sharing data with other lifecycle phases of all plugins for this source (including in the main thread) in this plugin |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"Lifecycle Events","route":"/mosaic/configure/plugins/lifecycle/index","content":["Plugin lifecycle","The plugin lifecycle is triggered when a source emits content.","Each Mosaic source has its own worker thread and plugin lifecycle events that start with a "," will execute inside the worker thread.\n","All other lifecycle events will execute in the main Mosaic process.","The 5 lifecycle events are:","$afterSource","$beforeSend","afterUpdate","shouldClearCache","shouldUpdateNamespaceSources","Plugin methods that trigger inside the main thread should be asynchronous and highly optimised to\n","avoid holding up the main thread."]},{"title":"shouldClearCache","route":"/mosaic/configure/plugins/lifecycle/should-clear-cache","content":["The fourth lifecycle event to trigger overall and the second to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other"," sources should clear their cache in response to the source updating.","Only sources that have already run "," will call this lifecycle hook since there is no\n","cache to clear if they haven't reached that stage in the lifecycle.","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"shouldUpdateNamespaceSources","route":"/mosaic/configure/plugins/lifecycle/should-update-namespace-sources","content":["The fifth lifecycle event to trigger overall and the third to trigger inside the main Mosaic process.","It is called every time ","any"," source emits new pages and should return a boolean to indicate if ","other sources that share the same ","source namespace"," should re-run ",".","The "," lifecycle event is called with:","updatedSourceFilesystem - Immutable filesystem for the source that changed i.e, not the source filesystem","helpers - an object with useful methods","options - the options specified for the plugin in the mosaic config file","Helpers","The helpers provided with this lifecycle event are listed in the table below.","| Property | Description |\n","| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n","| serialiser | A matching "," for serialising/deserialising pages when reading/writing to the filesystem |\n","| config | An immutable object for reading data from other lifecycle phases of all plugins for this source in the child process for this plugin. ","Shared only with this source. ","|\n","| globalFilesystem | Immutable union filesystem instance with all source's pages (and symlinks applied) |\n","| pageExtensions | A collection of pageExtensions the source is using |\n","| ignorePages | A collection of page globs that are to be ignored for this source |\n","| namespace | The namespace of the source running the plugin |"]},{"title":"Product A","route":"/mosaic/products/producta","content":[]},{"title":"Product B","route":"/mosaic/products/productb","content":[]}] \ No newline at end of file diff --git a/packages/site/snapshots/latest/sitemap.xml b/packages/site/snapshots/latest/sitemap.xml deleted file mode 100644 index a4068ccd..00000000 --- a/packages/site/snapshots/latest/sitemap.xml +++ /dev/null @@ -1,422 +0,0 @@ - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/sitemap - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/aliases - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/fragments - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/frontmatter - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/markdown-syntax - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/refs - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/sidebars - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/tags - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/author/ui-components - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/fragments/content-fragment - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/fragments/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/fragments/tile-a - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/fragments/tile-b - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/getting-started/create-a-site - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/getting-started/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/getting-started/publish-site-to-aws - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/publish/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/publish/publish-site-to-aws - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/publish/publish-site-to-vercel - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/admin/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/detail-highlight - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/detail-overview - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/detail-technical - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/landing - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/product-discover - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/layouts/product-preview - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/modes/active - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/modes/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/modes/snapshot-file - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/modes/snapshot-s3 - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/alias-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/breadcrumbs-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/broken-links-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/codemod-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lazy-page-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/pages-wthout-extensions-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/public-assets-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/reading-time-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/ref-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/search-index-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/shared-config-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/sidebar-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/site-map-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/tag-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/toc-plugin - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/git-repo-source - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/http-source - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/local-folder-source - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/schedules - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/source-figma - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/source-readme - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/sources/source-storybook - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/theme/custom-components - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/theme/custom-css - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/theme/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/aliases/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/detail-highlight - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/detail-overview - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/detail-technical - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/edit - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/full-width - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/landing - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/newsletter - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/product-discover - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/layouts/product-preview - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/refs/data - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/refs/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/test/tags/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/after-source - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/after-update - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/before-send - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/index - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/should-clear-cache - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/configure/plugins/lifecycle/should-update-namespace-sources - weekly - 0.5 - , - https://mosaic-mosaic-dev-team.vercel.app/mosaic/products/producta - weekly - 0.5 - - - https://mosaic-mosaic-dev-team.vercel.app/mosaic/products/productb - weekly - 0.5 - - - \ No newline at end of file diff --git a/packages/site/src/app/[...slug]/Body.tsx b/packages/site/src/app/[...slug]/Body.tsx new file mode 100644 index 00000000..8cde1918 --- /dev/null +++ b/packages/site/src/app/[...slug]/Body.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { Editor, useContentEditor } from '@jpmorganchase/mosaic-content-editor-plugin'; +import { SiteState } from '@jpmorganchase/mosaic-loaders'; +import { useSession } from 'next-auth/react'; +import type { ReactNode } from 'react'; +import type { PreviewAction } from '@jpmorganchase/mosaic-site-components-next'; + +export interface BodyProps { + children?: ReactNode; + meta: Partial; + source: string; + previewAction: PreviewAction; +} + +export function Body({ children, source, meta, previewAction }: BodyProps) { + const { pageState } = useContentEditor(); + const { data: session } = useSession(); + + if (pageState !== 'VIEW' && session !== null) { + return ( + + {children} + + ); + } + return children; +} diff --git a/packages/site/src/app/[...slug]/View.tsx b/packages/site/src/app/[...slug]/View.tsx new file mode 100644 index 00000000..ba5f2df4 --- /dev/null +++ b/packages/site/src/app/[...slug]/View.tsx @@ -0,0 +1,23 @@ +'use client'; + +import { useContentEditor } from '@jpmorganchase/mosaic-content-editor-plugin'; +import { layouts } from '@jpmorganchase/mosaic-layouts'; +import { SiteState } from '@jpmorganchase/mosaic-loaders'; +import { ReactNode } from 'react'; + +function getLayoutComponent(layout = 'DetailTechnical') { + return layouts?.[layout]; +} + +export interface ViewProps { + children?: ReactNode; + layout: Partial['layout']; +} + +export function View({ children, layout, ...rest }) { + const { pageState } = useContentEditor(); + + const LayoutComponent = pageState === 'VIEW' ? getLayoutComponent(layout) : layouts?.Edit; + + return {children}; +} diff --git a/packages/site/src/app/[...slug]/error.tsx b/packages/site/src/app/[...slug]/error.tsx new file mode 100644 index 00000000..e5b186f1 --- /dev/null +++ b/packages/site/src/app/[...slug]/error.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { useEffect } from 'react'; +import { Button } from '@jpmorganchase/mosaic-components'; +import { Page500 } from '@jpmorganchase/mosaic-site-components'; + +export default function Error({ error, reset }: { error: Error; reset: () => void }) { + useEffect(() => console.error(error), [error]); + + return ( + + + + ); +} diff --git a/packages/site/src/app/[...slug]/layout.tsx b/packages/site/src/app/[...slug]/layout.tsx new file mode 100644 index 00000000..21fbf295 --- /dev/null +++ b/packages/site/src/app/[...slug]/layout.tsx @@ -0,0 +1,57 @@ +import classnames from 'clsx'; +import { SessionProvider, ThemeProvider } from '@jpmorganchase/mosaic-site-components'; +import { + AppHeader, + Breadcrumbs, + Footer, + DocPaginator, + Sidebar, + TableOfContents +} from '@jpmorganchase/mosaic-site-components-next'; +import { themeClassName } from '@jpmorganchase/mosaic-theme'; +import { loadPage, LoadPageError, LoaderData } from '@jpmorganchase/mosaic-loaders'; +import { notFound } from 'next/navigation'; +import { LayoutBase } from '@jpmorganchase/mosaic-layouts'; +import fontClassNames from '../fonts'; +import { View } from './View'; + +export default async function Layout({ params: { slug }, children }) { + const route = `/${slug.join('/')}`; + let metadata: LoaderData = {}; + try { + const { data = {} } = await loadPage(route); + metadata = data; + } catch (error) { + const loadPageError = error as LoadPageError; + if (loadPageError.statusCode === 404) { + notFound(); + } else { + throw error; + } + } + + return ( + + + }> + } + DocPaginatorComponent={ + + } + PrimarySidebarComponent={} + SecondarySidebarComponent={} + > + + {children} + + + + + ); +} diff --git a/packages/site/src/app/[...slug]/page.tsx b/packages/site/src/app/[...slug]/page.tsx new file mode 100644 index 00000000..c38adc4b --- /dev/null +++ b/packages/site/src/app/[...slug]/page.tsx @@ -0,0 +1,48 @@ +import { Suspense } from 'react'; +import { Metadata } from 'next'; +import { loadPage } from '@jpmorganchase/mosaic-loaders'; + +import { type PreviewAction, preview } from '@jpmorganchase/mosaic-site-components-next'; +import { MDXContent, mdxComponents } from '@jpmorganchase/mosaic-site-components-next'; + +import { Body } from './Body'; + +const previewAction: PreviewAction = async options => { + 'use server'; + + return preview({ ...options, components: mdxComponents }); +}; + +export default async function Page({ params: { slug } }) { + const route = `/${slug.join('/')}`; + const { source = '', data = {} } = await loadPage(route); + + return ( + + + + + + ); +} + +export async function generateStaticParams() { + const generateStaticParamsURL = process.env.GENERATE_STATIC_PARAMS_URL; + if (generateStaticParamsURL) { + const pages = await fetch(generateStaticParamsURL).then(res => res.json()); + return pages.map(({ route }) => ({ + slug: route.substring(1).split('/') + })); + } + return []; +} + +export async function generateMetadata({ params: { slug } }): Promise { + const route = `/${slug.join('/')}`; + const { data = {} } = await loadPage(route); + + return { + title: data.title, + description: data.description + }; +} diff --git a/packages/site/src/app/error.tsx b/packages/site/src/app/error.tsx new file mode 100644 index 00000000..cd066090 --- /dev/null +++ b/packages/site/src/app/error.tsx @@ -0,0 +1,29 @@ +'use client'; + +import { useEffect } from 'react'; +import classnames from 'classnames'; +import { Page500, SessionProvider, ThemeProvider } from '@jpmorganchase/mosaic-site-components'; +import { Button } from '@jpmorganchase/mosaic-components'; +import { themeClassName } from '@jpmorganchase/mosaic-theme'; + +import fontClassNames from './fonts'; + +export default function Error({ error, reset }: { error: Error; reset: () => void }) { + useEffect(() => console.error(error), [error]); + return ( + + + + + + + + ); +} diff --git a/packages/site/src/app/favicon.ico b/packages/site/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b4c425b32cd6c0a55c72307f88612eeb4cebc8cd GIT binary patch literal 15662 zcmds8^+Ocj*PdM#L_%2UUXbpVW@!;Akp^jyZV(W5L0Tk4Qo6eokPuKL1SF(ELQoo| zo85Q#eE*Age%Rfad-pl#-Z^vbxz9NhqobupOh8Kj006Q21Lem600n*)E! z1^7kdqhjQv=Wg%gZ{=kNDA>AN+ac6ltsLwg+gaHLcz&~!0RWj%b!CMo&*yfsWnEa+ z8rJpR3lAHY{mDk-PQ3KZxvyCTWau58R58C68@3*Y@6jiTj<7gpt3NKG7ysT(yHo#n z*!s0U^g}x1zpS1KYQj$r<+xRzi)}>0PBTgk@)g|gxp@vxacDIi&&E=i;MnN6A<-KR z|Nk5abGgFXUw&7*chb!@=VKh2*5(~f#L@&p&NutArf|@yyOTPmv53f%x1XjwIk-rGUm!9`CbFj!7RHo z&1qXlYJAtm8Af`Sf%pDB5(Q=u62>3&yD2d)`7}5?5+40QkYe zc2XI=vX>hX!P#@S#q+5kZ|d}|3*$AVH-m3v1ojCeb8Vj&3VsGwn)Er=_@yN`_H8Un zNdbjN?7AZk>^n!s3%C7jIcDBI#Y3#9;Uj?M`Zsd%S3=&Ga}GSrNcY`|2QT09dP%cE z2ICmjfU_JO;UxZhdOs=?3Cy_2W%5rUfi|Uhw0ZRGM>C}}TrfaaeilGa6k@i+!``ac zJC*k1A%HB+vV5&F-4#ut>2E5o05ZMlAqz&tWW`T?Im;dih-T|#NMRw>`$^u?E%DFr z(3U%IXE=;Af98wH3F|UOU zdZZ!P0zjMeR*u|>Xa@9$Cbe{_@?;8cdtmN-6qBP31%P3BWjs)!#6(Efd0`#I19PMA z@|C&n%rxa71du=}BWLPh=tKYSqd$vh1s?(uSRE@#G*MR}h@b0(y01fxzuc!4(;xEc z&_DI|^PGxo790=xaz77@7S{;lEx_OJVV2x_(#H`P>ue4_a43`=dFVf4q|J&0+&7~= zIVY=Y#xX62^Y}T|2yXr6_>Em~ede|r;qzQdt z*(YyJT?F#p`pBD1)bL{-f)}Z0MFTn$)q~~8(fql0s4FW;acZ>v;6qo>b+doAe8;?6D>T1TRibL#?`y`F@P*asyzN-%Vl~( zT+WLtWAj+y6_KMq`eB{Vlx|%Zkmvn5p_TCm5#WrIQlF1(;SqL4!H~Ae5AR%kqh4Bw z1u_B4;%r($?K(Ytpa4rv*!IS)E+>Y}=F!B5*9#b z@|SP{HR&>Cmi+ZgU@xy?)_eFX6rmH!-mVBNo8_@}pY|1Y=FCi|uZ0@bt)7o|G;lyu zAfXS>I#`?R(B!Z#jb7KixYS2gF~R00F9U2WsMR*!ua4|&f4V+c{^x-DcKZoFCmish z{&~pB-4NNJ14m#_41}SgWJg2$Bs&`MOr1jh^Osux>&8dAz4-kr`&7YanWo+&zFA;H zV?yA|x_y0`Q?Pv7S~FWnQJT8V%t0oF{O{ zTZBTpLg1SAk|q!&#L@?9*{YiKUZ1qp4>PE|F{FxpPtgh8e`py40B?^QP@~peG%P^i z+EqlQSZAcrynqpO17ZtY^tC?NaC({BX)g&ty)a*X>`+Ww;Xr}q_+Oc*k^5H+6EGy_ zaOda_#TZKYYr|Li_rO`06>SN{cma!HTY0bm+N)#V>r&|KpnfUD4k_~aMknC8ff zH)~;cvOD)84RBxpny!L+LWlz|%x0Jyk7^s{teOmk0+u576rI>N*^p(WgD8XaMlg z&|P)7a~x=Zt{B6{lp8*Igoj4JAi#1u37@KGV$&g0=EZEG<`mZ3goYIOYjsIXgN`B+ z%f#8^r#+_B0AN5Do=c`MAMMp^90I6S_l8By@%Lx9k-!m2)6%GeHuEqxt|XH9nXuLz z>HAT5=hcx-JP>^^GaPdpU83q;<=h4g7GUcg{dTuiZDytJ!T%&m6>3M?AYl6jz4W!`JGfz%D{W78n(FDuMU3QXd$mq8|%k?RFNfKzCA#WgZEd%MP8+`i2f5WdPfQNmF-7|-__}@ z*6VF6N=xg%vG2bMnVE8UX^Q8i>0)2ENKac_xE0K1N7*uBUg+lsswAjTlp%l(3DAo~ zG0OD`-}2Z;=pkm&ac%HL@ z63cdXmVeD8aXxm!(b{Ou%kHc?w#d{Tzc_!hu{51t@wWVj9iWVq2_=9c5bSZkmN}nf zxyJRGUggA1RdpLRh5PVoMY4r1(__0j1{yI@X1p|dh2nh^v_^RN$()yLY!Hvn)bZAj z?Q-M>J$eFw!QNq`_mF6`U{+bd)}40Obxwatf`j=N%#n3J+_h|i>l|WyS;=_l zw`$7m80E*g)jS$iCE6`KyNG!KhLIiN)5aHq=H|M1^DtE`a2Tmeqd#V z?=@;;U!?kCVY@*MM;P*13Tv&hpDPrSfUV}`e?m=GMJmby$as8B|GRiT-LBJpY9*sl z*)$niC0&LKC(SurQf@yV`e`fnFH?epa8$D41QiBE^AI9bUwoPQ8`tWLZ7kr5q5+tf zmi=|eNK+4~TIFsPHF!+&0-qoDg+AONIph5muVU^`b#3St^tzx`F5X{Hjb(WAP0h*L z)vdLCMr?7|;iY@WkYQY<6(Lj06q{1($+(2@=*ct}hxlQkB;{SN_>6UoYjO*RvKNKjA zQruQ=jPRX1JQyR!{yzC8&~le@bB7 zdha;4#9^cT&kH|d70-|R{siCo8fVIcJak#_g!mX(oNHRk!SSe;CwHDSDjhS)Kr`9=uq&)`2Ky zV7ODgjRGR~cw7isx1x5&(egD6_(%m2#`kl)?eK`6b88iuTU`TL98(mZp*NN)rxUBK zo<6&rwKz!4btrY?13t&zAIqI+m4{lM{~jRj5wFQY75Ys`&-I1MS&-Ry4(-iITu}9) zNPiWI(c;inx!i+h4Xy4*YP`iq_bYe7;G+^!e)aDQUik#j1@#sqJca~kXLQA96PH&V3<^ueXEG6f1pnX(iu7!j^xgp6*kEB6R${T!mT~%QqJy)voxZ zP@a+If0IX~&)(TWa!Pg!bKA0}l~y;lHgMrxRtmX~`L!uUaiMvCe{=6>C8Am4nk?5}f%%*lHjROwg zhcXp!`ArwKu_6rZTD6K}4*y9pJhdats~nNC)UaG1L#Z$Bd*_NR(4KW^Wj_-~OqLnu z1o8B&2Ezf23R<~iMAM|aNwF}bw3)-C(4Xc3>(3ON=RI*3qO^WzZ58;9_aQQu#rzR1 z4SK>QdP62TbW@jbAV&q6;q=PfPNPJL;5w&L!E^J9ZI?z7CUXfIOogqF8Na^mP>HmU zbJ1W^^+B5=>ES_uJN+wkOY8|b0c=pQ^WI|&KDsF!$v-^yv$~~6e1lyoU&{<@U42IK z$195`A?c4v;YbF+6tH=A>S|V*?+Y;FpND#W5Lv!0%{GgsZWhz%+zm3yR0g_w$sT3d z@+uZv4tu6SJ|1{-Y%Qo z5NMtrT+o6Ps#b#1z&H$W{{S-7g_PMIw` zt}yQelErL0<|dmq9Vq%Xg2oTTzY-Vxbd^^9RMHe=Sql3$YSuCrLe%?0i|qLbLBHkA z&QfRnlp7sgYn1+Iae9dIMdr3~{bOoNQLS25=#OTm+ivX^iNIK9MbUq`ZE?jnIQ1obBCr3uGe|HS-VecHDB6*&&(458(>-uVQ7S>k4GH2JnU7kwcA zA_h)Z&K`7W`(T%L^46tTcqO5<{#v@1Yp zcoC1|HusZuY&TZxA#Cn-?T8J-q+hI!86mKA8O!O~CRZyF5*)&4sCy8izdu*-dcXk2 zuF4>rBnt(sm1^&Q61Adu+!BjXnV`S8KPia_Fyy{^;9HqV8c=1j8VWhR{PQ;BR+bpng1Ut7*n44zQtJ}WEwxr zie?tRZds^l@SGNHoK{r5yssLgMYsgbJ5bQzCM}h9l;$FBAKNi~)O7bV$WRb!PVasT zS(PIU#qAStF79LhsVHwahN4@s?;_eyhLi<_t?DM^=w=m1qn(+eZZ*1?_69O`N9S)- zH9`EkJEXKE4=;`G{cvQOI{1Km7(S?=&0w(b@KQFi`hJI-5-dH|L9YLHl3#mnMc3}@ znWVJqpDbS5N?hbWS@T9m_+9zL?bm_^@9Ds1{-EUpEREKj@@ih>Ug#elp8P7R^Nm)J zDZfz4shpsit$F@TlYHjHwQ$+Ze%`OL#3s=BORcl9s?|}^2q_NHcLVw|b7LaTrc0Km zq=1h9-YY8_zKjosnH1^1XXmz$I|8k}PT(<|OR z=Pvi*qK$FY(xa?xJldF8 zN6o;>`1Bu*tEYU8J>|YS9Od6%QsN?ayHj_5KGT3T^%Q9C(>gj+7JuMbIg4`MS)eqf zg9GK!fY6!#6t$i8kk3J?#Ym+@bHtWOfPgmR5R2QINjb__%VvCWH$rVnfvx%PYypt& zOlkSlCg&uW%aTk1A^!Vi2bFIaaUTEfpI-62h@zND~jw{@;J<<_#g&F zlBM^qxmy=!G>p3Ho!zXU4OOLtQ3TKBW79Gv*%@3?yteqlS8?p0ibtEOx6^y!YA?#Y zEH97SwJ4DdE?zvjjso|{30!BAxrRG~C2k=ApHCX}6x&b#esmp=bdKp0wc+_-yum%T zW%aT}N@%h+G4lAjQ(FW9Jf?&^f;R8mpH;9b{Hj!dojR+2$=j9p*(@bMs(3yOzJ&&& z6=9Fykl`$pD^B%r{_%!<&oMUMW32PCWMN39Y8W-YKFkj8hBRT1NFlGYu|>cBZH$lg z3XMkWNxFEQhN)J~N27a(b5E22fCWLcUTZk+SHDE3G$WTryw1e}tS10q?94ihvTUu~ z)AA$!&|RF6w0lUVe6!vH%&!0fTLU_BDo0d)dvp=uBI{y;iW=(l z2@m-@uxo?sT>fR07Jk92iygaBF@*u#tDAF0!KvXAFC-UFe*!ds$6c%F)nv9%md||x zqHjC`^f!t(F*)Hf$DR!RH27)U%4S1)-!}S>$IGQUGlunV#sIErG776KBdvc9N(7yE zdd~mB_FUYlCqLuoZgpyEVyN}zm z4ajxxzDeYP?;-1Q*%8Y*-sRe;JUql*%=05dPkVDW8*k10q_1C(1*S|fiY;TVC)f8a z+=Rm1FWHK={oMW2XF4(@b4rEfi{l+Q3Tl#D0w;c-xgr5Tv8!^`ki+{Kz5Wa7m3}Fj zDfNGs>%mBy=~wup0hyaJ-$^&YjW(0wa+ikiv^Y3>zJDJ1e~D1>rK__(O)Ff^<(-TZ3}lY518kfTRtxEYodh@0jYh(P8$=DSt1p zv;7itIz*dPaF4^w`tOv1(w_;bBr?^-9~i=N>b>&%j(?T>d0%9L>jl+riRD<;40nvS zJahsrdepg(xmPfJ{Mvvy@-)Cy*H-(|)8)%-#Vj4Xw2d%T*N3ei0PD8rbZJ1XMU-71462G zpN$G+CmoEWh^Jl5kRW%$_rjg ztGph-2D1DsabRj|RXfd_qMl!Vrnl>O_xBm%Uj?cYk9H2rA;8VetP zGdT`;9b94@>d0vfSrB@^)5ZL^3<)5=s_MsWUQ(zwlH=6Q$C*sdXpkTL2oHGSx$rETHh&_aOQ(P(atnm@EX zKN;y)xRvto%4H^4MfS}c+WXz826?8&(p)baJ4l?H-17xC5B(3^dOlaZ+^5}wf7aym zaa(Ar)Tpm!LG6DX(Y!;%atwNlaAjmN-NC^4*WcI8x2*Gj=Z`yj1sXFYDb^LH(qmSV z>Rsu>-=-zG(1lsPtkQo}kY|)`_=nz9g)44APiA{q;BP57Iz=er_n_BByt0oeBSXj0 z!V0do`N94QH4k11W1qAAMKe#HfXh>iZh_qPP> zI>&+}+G67yqb^lJZJqt`NVQ6s|Jp*jv40MXy#ld7udI?qq3fu-lo8|X5H7-uye1fC zA_dU+(F5nEee#d{a#emB{LoS}z#pQE*T3=0PG4Nnd-%TAPjLKKue68E`BW(bf@1n# zxaXeM{WALGYioZkF4=XCLjxelmVc%*iuqz_k1g0~zpb4#&a=|xWdM%yPEZdF=rz<> zkSw}fP1djSIBY6(_h?)Lc%TQ7t0@bR!6eVtgu`1f;E7NLms)9M+@@RdJ-uT@t_b}U z$Ai#i_3r)Hyue2_t0~nXXaGH+nnJ!UOXi(+QtSGt8f5j_h6oCr)Gx)&?)DR9R3;P* z#7~lCf;8di6Z|-_)`w$tu}X99t$h~Lm+l@~JV``@O)pykIK;TXRbskK-a!Ha1S+E~zqKE5$;CaMCdk^nb zi{GFMs$_VMxa??w!p62X%S_IWy`*vQx$8#oKX@#r=CV_4-&KS#=_dhtH@?p)gNAddQ*cnkR9IDBhWfq8)B)%!Ng)P6zm-VT z2W98}Y{9h3Iu?p_iAK` zxB%FhHT<=BUnCh;aR@rf0b+xR6j(kx4%m5_?;?#;q>wGl_7NG#`2sKMmB?U&T?C>R zw{BW-e_*W+W7%&oBvi(+^p|wvw!jUxL>ep!q!VeuVRUf`I6}j3ej#LqGl6_OGypun z*W~d&5>O-tLC|`kUAS~N;IxNf>>CuIc#uvfixh=~-83gM(r6;V6fgwD6(@Irg8ef0 z!ObT8IvE@baC3mjxRIg?ScEqY8u;%T;^s1_1^}RMK0rY5K-_%X-~cz%_bg)^6a%V~ z0OEH-5a89oE&=)L2Wxm>A0%rAHLm7OJK~Kp*aY4UN=eO8p8mNTm}pM2-#GuZcI796 zfZzo4d1dCw-+1;TDzGyUrFcYgGm#Cz5!uZ-_g*A>Uha)bn?l96zpSU_h7|pGs>SfC zijV38jOD+nco|yvT=Rbu?V$orG<_%@sKOp}5Ks{Lvxs*yG1~mk!Vt{THzVB}`1-T> z9W%W>{S@rxG`1we*!d1&gYeDx3?zzghvnB5xG0L;s65vXC0}#n0!VFc)S@RLy~$+& zkNcqrXzQQo|L&mA=N2n9q~Y(ZOA-)mgPTy0gMjVg#+Zt@pzM*-8}n;VwC!N%Sa4?! zNZ2iPEY3}%OZMXFFTC##M4kUyw@{-y3EBtaF-jjMpYIN$5SX=0)QRTPVt8=9<)d2{ zSa~7LTF7_v#ih;5DrcNa@GidIooD;Bm0jIbh?3SCtWW2Q8>?EYy_9(Bdo{fC@%yF$ z5EzQf}_UuObGKrJ6>2d(x?VGqF-EIxkxkxGTT?azVd!LJeE zG=07MD=pHev@k(PUqSFVo4F2(r0@GqmO=Pz_^T8)ctp$M>wG2N*e4BUX?>wCEpU)X z_pA^a*`vx`QO!NCZc?~+G>qo!-VGfjE$#f%b)K8v=9=EEJg?ik6GUZ0 z*$=MK!xlfTqdt7)TNkfzdV!Pe27kNpwma-^i+Q(O!=$zzW;%vo(ysqa*X{4%D9fB4 zNsj&9qifc)1c$4fD*pl$H-#go5qSL^vo)zrYl`dW?=zj$4zgZ-^6{q@1?SsIuhSxTWadgXW$kk2jf(&zVpm8(){LWp4iG z)uH=OsuANmp!qLf;lx!`ky2OSQ>%@NQ=Rz!-4bS6SVeW$Im5&tppNIOS4tERlJG9A zk&7}x|7reQ>5iU+{aAd^5+wvntd)z=P7jn#itMLk7`zOXEMn%+k4Mj0S7sGu<3ge{|hWvG4=`0&a6gLlpK zwL*uVr;0n_YNNng@2zZ*1rW$FNq4uyCJe37koked6$r?B=cd$_3-iFcmXE~$Vn&1? z-#S)Yih_$ZQvcv%+BHxjC!(bP{7iER6(?i9GwJTxe!|s|yVX7rEN$l6`A7tBJ2kH4 zHmToD|v+k@d_hR#GslE?Cf3c>KL z@*wVyBtxa9kBkYxM=8Ab$co$dZi8pw7dU--$P}@q&UV7IoSQD+6CLe~AM0~dQH0iQ zjVw2ANIJQ_J@7=4Uprz@qnK!G%cn9zu+`oAHGi0rdVq z!_9F|61fWHOEunqAV!{al&AGY68~CV%5kvd#D=^rtMFo}Kz=RgfV=dr_BU#~BccO6 zv1cqyB#^r{XQ%Hw$<0ITC3`2N;>+!E6c^<Dvk_8N8+kiCiuM2JN1h^3{c+M(@^>`HQDedW50Hu9MH9K9poq5!EEvWTrHUfott`x#}8OLJV{#1boN8E3_v6KC3zi6`vzycc6_{@E){4_ zsb|~sWQs6o`}O^NyA@Nv`R`jQ=pJ`l&!|WN35;|fsw}>9`^ z8~zq^x^flt_bhkCECQf`zyP1+tDgMqjOR5E`6AHNDTn-t z`fz;t+eY!%uOmnB4ICJaUmcmqi(?6S#6>OR^~q2Y0qUn{C3f3A0 zu3rs`ZdzF<@Q+*?yl1SL5lhfk-~O_17q?^D>J~L0jJdPEl|MYG8y3tp5>j|VKng66 z<`I#(hUL?ykf|k|nyDbCbsrvpK^ELcn$m3NFpVfX_*>KX`>$=jMFqie$EpB;*F(|Q zBOeQZB zyK2a78GQKSM^SJ4#-4lbHnqo}tId(VIM>T|U*iWtA$%dDDg6unf`&ck z$t!NgAHe#Kb&_KIk8UO|Ma}Km>}!B@Y4=WF!1%js4@@-ZmY1)(mm3_}yQIR&y#3SF zsaV+cTSr)RJ38knrm6*OYl_Bb9twRKiVUOUFU7zV3r^S z{!JRoJiL@4;`sLIhj`}u{?p{ikY^+C59(vTY3&(Iryq$q1Z$hJ0B`&-e}a!CQ2xUo z90T{G?c-8|*PL{0v&hiEgADQ!0urf)(Um&&SGiPCKkkTp-u9}lV!S<-7o$^kckY&mSw`^3(<;dW-Gu5S6 zC1fgu8Ie*}YH+&d-PY;krT``Lie_ljbK<(HYk7C8nv)1c228c){;%ha3&M>;8OFJ? zNh9?U{s^2z==Rj75-CYwJx@E=H%)KXJ<*7l(Gy>CJbv-C1+WO|)Do_#`*| zi^TN{KiZA6_BbV`#rf8S_oWocG8$!9P==d#O^cjE_UjY0bCM6-*Bt$&2Z*@U0= zltS>4*SJPY0{sm>RR-4|A%N(V!J|wTr^n zP1#fFmC_{^$4temOC(&A7WYPH44DOOoz5cI&?mTEh~E!7*F>_@+m6hcQt{TDSb2^= zlgMKOHzaARQVQZB^Gz$Z?uyQ)(lw^#*B)r)^U~m$lTadL!`HQ|;|#5#;4OY1<)R6$ zjRRM+B{mtp7b7tPo2c&-#6hEOYMJU^&%pnNX3*S+EX znU;ULRjUdwNSJc(O)8-&=fp%p{Gcv|E!P60dRTT7i`99p6fG2e8PNJn2SSy&+c@KR`k@(D5~0gLeN%I4Uy45m=lb2`=0YeyXD+etYM<@@dab z_r~w?5jx)=BHEq)dh4BJ>4!_Ff3BEj%08AIjw-;Aw{hmM&Kj zfrQr??q6n8K@HS()wCA({{>N`ANtE_v()Rc;e%-^(qZ}3+sAK7J>=@4WRQD&S6kdT zf_8YpzkPvKIoPnQB-Yc`Z!4cvVvLO#34B;N6S<7_ROF*o79ishgzNO|wNV1@>FWN^ z*lib8=C|BZNDKPa7n~~%XUg-V1H7AAY2Lpim%cK1MFW8>f8W=j)of~7NEhX=;^asj z$5&TD;@?91WL&V}kg5iSlU}daOkeG0r7#e?Yj*OBIfc!vI@gcb;*bJQ3qrDW%F7>R z7&WjiUnpjg#^3qNjgx37Tg(rsk-BITkPdN!e;MX~`2(Q>eXB#Va_~JKkMCXyIkaoC zNJ^b^%c3{mHLAJB3FpX?Oz4IA-(3b5lUvI(Ru)2)jE(M#Nr;^vx<7NWHn$R)h#xO< zkRR6)m@GO`!bpMFlSe|;`(s8@rgujRH4~&lN}68VwdB$;djHxubzx;a%B$d4xlXEF z4Q?F$$39kuqH$=@L)#;Pi42{4**Y}U`;HSXe^X(-@ycCaeN4$`nsCw$W(#wuYkEJI zWQ6k1Yj>@}fwG+|V>OfEVkO_;n>F-V5b@dD{6kUhI5UZ!q5adA zHSyzrqvr`Uvd$5U#4G?rr{`S6NL+9FwF)xel_iu0&DDcaxLqV56{yOwjgi0(u%K6v zAoV1#15bSCmI@WW3k2E+>+w_bJHH21UajU4Iv`9jwA1M2E9a48IxQ0An++2=1Y{fX zj*s_={h^}1l#*&#ybRoDvKM{l{;@Nszem96d-*Cj8m;Pp`^@CSE6$eJ(U!T)kGTjv z7MBfQeEM~2$0t7*kV41liCKKm!45z?SJAa6K3@K|;jk`0%rDvLf9A(}Mli_HWc>ra~cKJFp-F-K)SD z3M67`KNaPBZ)U=OMRb!3z#l#Zo>c@6ot;wZ-WM~mna*mobzP51<9BlRGoe`fK7>>vbs?pz2~h>q#d zmMp6+S2u|fDG>bl1?QH5M3pH?9$b%f?EP!@D6!r_xd_y-a#vBW(Q|lz-^jKB#yRhc zEbA^VF9$yQtPn-+J7`_`+3%gso#Aq+r$t-2gs7h^#%OM;b=%Mvf7$QLdv&1N=t~>O z6N`Y+VHMrxS04hZoh8M*G8^}3rmtUfpW+Tx9m*HXXFEU!*itmpA{0r_4_m1)q-8!- zbzmK$8NQmaMdRN2lw^u#p*oy*-lzFK9HHpyKmHF3I@PwCzcneiKjLN~vWvHk3EH4< z$beSLY@v=Ijt(i!;_VA8ds2FIw0YB202QQVw*8}*`5OD_m8Zq@l_XbAv1++=fdHwt z5Lkr0^r@kSx68x?kCRpvyK>YlrihDWv24i4-w=IM>Ajg?KhS&RRZ8?O=UFU(&vTJB zOfOs`UFvq-GJp<0LWePx(CD~shbEONQbaNUiALE3iGY2V}fOd zEL5#Z*J3Q{^80FEkkXMhSR+0feAKCQwB#;ifA2`^#{3E3b>m5OL-Xl$$mM9jhcRJ(bnftZ{)pK3{^^rl&pezvfPy{%OR=eBeOa>o zT?x=^HfmaD^VXFXbu38w)~s&90EtB(>2{ zetDB??*gMMojoIlfA`nJJNHz&es&bGTb?TTbn+82>HK*oruVHJbq0r_c|M#a zyfyjQUUBd}hX9gxJ=}e3=`id4br1)vs59r?<;$X8jRt_(7Kp}l+mk>@TV94vl_#5c zX9uF*vtGy>MPD?lpPx$6)m6@-SIT+O6saPsa&1q1+ii~wM&qp8SUGVaNEO!?!M|Jg z_$}^UYe!!c4&s3+kSK!Hyc8l}6T3*7^59ZtE$2tj2X$=Jh=$&Ej=zIy;J4f8b>%Bh zdz_v5Z*Nek$?SbKm{bNs{a%tWl>GC_{Aw1^N)jr>-Sip_dFXLj!*gbr^gG`_Q3rY4 zW#)$PJsJZu)63;O_vFPWmDbq553r{%L+w++WgM*@(eQNhYT68dZF>IMIQ{)Dq%d}g zSu?>x0gwng#xCv`^z|~bDEQ<2=EE98DO@O^T|%5rPmZ}`rA|NK7=zo08(ZQ~=)Bwx zV~=7pM#nfleP+T21SnM6RFVR2R*#QgDZFxU)hIpdXM%Vl?w-2ptJ7CTHMi_<1CO^&g|^m3nLqr;%_l<8XqJ4v0#sQdZvQssiYWop z>L=6pyvK!w2o3<(nJ+}dwt#$FNdFTSkY47G*(_rBkUEclCRLV>n@EIQV7s?NiU6e0 zA54mF7z5weTP?KSXencKLGMVg<~T?N=FM+(3X=OMT=SwQ;&wn*9i+3HCxj~6$T12^ z@Wg4-Bzyp5!6b^dh!fNTJEW0%a1ZOHinwBhmux&YonMwcbi1?}k^g8r|1+Caof6a| zRPienGp!~ucU)+&2{F9`WQ{_lOT&bi6yQ4;)Ru2pq~n;4T;jMMX_Y^_3t{0;FpD#G zuJkf_iy(slbs?3L>|+zI;r6e66uiUK;DSQ$?9wAAAj<0GpH+sSz%5eUT;qG(<=AZE zYSPh+Ux@;w=H`TIty{ZQbM5lcii~X`hm~{!>b{%q!9{-=y^A* z>~Yn~|Ku*On04TS%>v(GGVRjK&m*c8VF*xrR|$#@Fy45+Cu>Uo zk5Cp4<;W!F>}w*&iLclHR8kklm)Rxk2ic3lpuw>WD#S z#LY*zbO|-Zf+g=rhtIOLX;)aA-EO|uCBQ`%@pFFo?>D?aQ^itKMcNC>Aot+oU4M7t z`(6>lQ{5uKKsBoM69IzO)CPk{yu`SFoWP@aPi?WjC3gljaoJ;TTu2+5;(M;;$BNTCVrc}gQ#5RcZHQ0(~V z5UtQOb2&$Q}(on1WHp0*>|&e4}U#9Eg`xG$y;oIYPpsb@-pf49_H7Lvq<9%8e|x z??|4UhT8*Ow{eFZt5UG#4nUj~^PRlU>5y=@O0RCe*(n@~JOK%^2F z?;_kHabozD!%@quSkd$guZLSqXf&J08W$e-NcxlJl$@gJt3_xzCbJ z*-wrwBv+^qoThB1uv((QG`720S5(fW7%I(u>Qpe*2IiHBznjPM{aHbJo~fCH5&^&F zDwQt%QlBS!DJO;j9(U)hhtm(p#9AwUUv*>hogZ%j1 z+qk4@p9Y@b+a}GF>p8t41vp*U$$=tf82E-7IxnItlpwT&m-s;uO5qo{Uk@GBBH5XI z0=^VC!VDf^% zDM}n~{ju7Z6Nn{_P@-=lO(H&4Op6I5K&TVdj~_2Z + +
    + + {children} + +
    + + + ); +} diff --git a/packages/site/src/app/not-found.tsx b/packages/site/src/app/not-found.tsx new file mode 100644 index 00000000..a0563c54 --- /dev/null +++ b/packages/site/src/app/not-found.tsx @@ -0,0 +1,18 @@ +import classnames from 'classnames'; +import { SessionProvider, ThemeProvider, Page404 } from '@jpmorganchase/mosaic-site-components'; +import { themeClassName } from '@jpmorganchase/mosaic-theme'; + +import fontClassNames from './fonts'; + +export default async function NotFound() { + return ( + + + + + + ); +} diff --git a/packages/site/src/pages/[...route].tsx b/packages/site/src/pages/[...route].tsx deleted file mode 100755 index 5a88224a..00000000 --- a/packages/site/src/pages/[...route].tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import type { GetServerSidePropsContext, GetServerSidePropsResult } from 'next'; -import { Body } from '@jpmorganchase/mosaic-site-components'; -import { - createMiddlewareRunner, - MiddlewareResult, - middlewarePresets -} from '@jpmorganchase/mosaic-site-middleware'; - -import type { MyAppProps, MyMiddlewareProps } from '../types/mosaic'; - -/** - * Extend props passed to MyApp by adding your own middleware ('withMyExampleMiddleware') functions. - * - const middlewareRunner = createMiddlewareRunner({}, - [ - ...middlewarePresets, - [withMyExampleMiddleware, { someProp: 20000 }] - ] - ); - */ -const middlewareRunner = createMiddlewareRunner({}, middlewarePresets); - -export async function getServerSideProps( - context: GetServerSidePropsContext -): Promise>>> { - const props = await middlewareRunner(context, {}); - return props; -} - -/** MyApp will be passed MyAppProps which is created by combining the result of all props created by Middleware */ -const MyApp = props => ; -export default MyApp; diff --git a/packages/site/src/pages/_app.tsx b/packages/site/src/pages/_app.tsx deleted file mode 100755 index 5cbafe06..00000000 --- a/packages/site/src/pages/_app.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { ImageProvider, LinkProvider, ThemeProvider } from '@jpmorganchase/mosaic-components'; -import { LayoutProvider, layouts as mosaicLayouts } from '@jpmorganchase/mosaic-layouts'; -import { - BaseUrlProvider, - Image, - Link, - Metadata, - components as mosaicComponents -} from '@jpmorganchase/mosaic-site-components'; -import { Sitemap } from '@jpmorganchase/mosaic-sitemap-component'; -import { StoreProvider, useCreateStore } from '@jpmorganchase/mosaic-store'; -import { themeClassName } from '@jpmorganchase/mosaic-theme'; -import classnames from 'clsx'; -import { SessionProvider } from 'next-auth/react'; -import type { AppProps } from 'next/app'; -import { Open_Sans, PT_Mono } from 'next/font/google'; -import Head from 'next/head'; -import type { MyAppProps } from '../types/mosaic'; - -import '@jpmorganchase/mosaic-site-preset-styles/index.css'; -import '@jpmorganchase/mosaic-sitemap-component/index.css'; - -const ptMono = PT_Mono({ - weight: '400', - variable: '--salt-typography-fontFamily-ptMono', - display: 'swap', - subsets: ['latin'] -}); -const openSans = Open_Sans({ - subsets: ['latin'], - variable: '--salt-typography-fontFamily-openSans', - display: 'swap' -}); - -const components = { ...mosaicComponents, Sitemap }; -const layoutComponents = mosaicLayouts; - -export default function MyApp({ Component, pageProps = {} }: AppProps) { - const { searchIndex, searchConfig, sharedConfig, source } = pageProps; - const frontmatter = source?.frontmatter || {}; - const storeProps = { - sharedConfig, - searchIndex, - searchConfig, - ...frontmatter - }; - const createStore = useCreateStore(storeProps); - return ( - - - - - - - - - - - - - - - - - ); -} diff --git a/packages/site/src/pages/_document.tsx b/packages/site/src/pages/_document.tsx deleted file mode 100644 index f269951e..00000000 --- a/packages/site/src/pages/_document.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { Document } from '@jpmorganchase/mosaic-site-components'; - -export default class CustomisableDocument extends Document { - /** - * Refer to https://nextjs.org/docs/advanced-features/custom-document#customizing-renderpage - * to customize - */ -} diff --git a/packages/site/src/pages/api/content/preview.ts b/packages/site/src/pages/api/content/preview.ts deleted file mode 100644 index b01889f4..00000000 --- a/packages/site/src/pages/api/content/preview.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { compileMDX } from '@jpmorganchase/mosaic-site-middleware'; -import type { NextApiRequest, NextApiResponse } from 'next'; - -function getErrorMessage(error: unknown) { - if (error instanceof Error) return error.message; - return String(error); -} - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - try { - const { body } = req; - let compiledMdx; - try { - if (body.mode === 'markdown') { - compiledMdx = await compileMDX(body.text, false /** don't parse frontmatter */); - } - } catch (ex: unknown) { - return res - .status(200) - .json({ source: null, error: 'compilation error', exception: getErrorMessage(ex) }); - } - return res.status(200).json({ source: compiledMdx }); - } catch (ex) { - return res.status(500).send(getErrorMessage(ex)); - } -} diff --git a/packages/site/src/pages/index.tsx b/packages/site/src/pages/index.tsx deleted file mode 100644 index da034d31..00000000 --- a/packages/site/src/pages/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -export default function ContentIndex() { - throw new Error('This should never render.'); -} - -export const getServerSideProps = async function getServerSideProps() { - try { - return { - redirect: { - permanent: true, - destination: '/mosaic/' - } - }; - } catch (e: any) { - if (e.status === 404) { - throw new Error( - `No homepage found for this route. Cannot redirect to the correct destination.\n\n${e.statusText}` - ); - } - throw e; - } -}; diff --git a/packages/site/src/types/mosaic.ts b/packages/site/src/types/mosaic.ts deleted file mode 100644 index f00d1b4c..00000000 --- a/packages/site/src/types/mosaic.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { MosaicAppProps, MiddlewarePresetsProps } from '@jpmorganchase/mosaic-site-middleware'; - -/** - * In this file, define each of your own Middleware props, which combine together into MyAppProps - * - * Define the props returned by your middleware - * - * export interface ExampleMiddlewareProps { - * someProp?: string; - * } - * - * Insert the options you want to pass to your middleware (optional) - * - * export interface ExampleMiddlewareOptions { - * someOption: number; - * } - * - * Then compose all your own Middleware props with the default MosaicAppProps - * - * export interface MyAppProps extends MosaicAppProps {}; - */ - -export declare type MyMiddlewareProps = MiddlewarePresetsProps /* & ExampleMiddlewareOptions */; - -export type MyAppProps = MosaicAppProps['props']; diff --git a/packages/site/tsconfig.json b/packages/site/tsconfig.json index 3f6d8f8b..fd5a4658 100644 --- a/packages/site/tsconfig.json +++ b/packages/site/tsconfig.json @@ -6,7 +6,7 @@ "esModuleInterop": true, "moduleResolution": "Node", "isolatedModules": true, - "sourceMap": true, + "sourceMap": false, "declaration": true, "allowJs": false, "strict": true, @@ -17,7 +17,6 @@ "noFallthroughCasesInSwitch": true, "skipLibCheck": true, "baseUrl": ".", - "rootDir": "./src", "outDir": "./dist", "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", "forceConsistentCasingInFileNames": true, @@ -26,8 +25,13 @@ "resolveJsonModule": true, "noImplicitAny": false, "jsx": "preserve", - "module": "esnext" + "module": "esnext", + "plugins": [ + { + "name": "next" + } + ] }, - "include": ["src"], - "exclude": ["node_modules", "dist/**/*"] + "include": ["src", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/packages/source-git-repo/src/Repo.ts b/packages/source-git-repo/src/Repo.ts index b88a2800..e85c44e1 100644 --- a/packages/source-git-repo/src/Repo.ts +++ b/packages/source-git-repo/src/Repo.ts @@ -202,7 +202,7 @@ export default class Repo { ) { const updatedFilesGen = updatedFilesGenerator(this, disableAutoPullChanges); - let intervalId: NodeJS.Timer | null = setInterval(async () => { + let intervalId: NodeJS.Timeout | null = setInterval(async () => { try { if (this.#cloned) { const { value: updatedFiles } = await updatedFilesGen.next(); diff --git a/packages/standard-generator/scripts/bundle.mjs b/packages/standard-generator/scripts/bundle.mjs index 336dffb5..9f03d574 100644 --- a/packages/standard-generator/scripts/bundle.mjs +++ b/packages/standard-generator/scripts/bundle.mjs @@ -14,10 +14,15 @@ try { format: 'cjs', plugins: [ { - name: 'copy-additional-files', + name: 'on-end', setup(build) { - build.onEnd(() => { - fs.copySync('./src/templates', './dist/templates', { overwrite: true }); + build.onEnd(({ errors = [] }) => { + if (errors.length) { + console.error(`build failed for ${packageName}:`, errors); + } else { + console.log(`build succeeded for ${packageName}:`); + fs.copySync('./src/templates', './dist/templates', { overwrite: true }); + } }); } } diff --git a/packages/standard-generator/src/templates/next.config.js.hbs b/packages/standard-generator/src/templates/next.config.js.hbs index 2dabaa1d..55df22b8 100755 --- a/packages/standard-generator/src/templates/next.config.js.hbs +++ b/packages/standard-generator/src/templates/next.config.js.hbs @@ -10,7 +10,6 @@ module.exports = { '@jpmorganchase/mosaic-layouts', '@jpmorganchase/mosaic-open-api-component', '@jpmorganchase/mosaic-site-components', - '@jpmorganchase/mosaic-site-middleware', '@jpmorganchase/mosaic-theme', '@jpmorganchase/mosaic-store' ], diff --git a/packages/standard-generator/src/templates/package.json.hbs b/packages/standard-generator/src/templates/package.json.hbs index 5cdc517b..353fa4ac 100644 --- a/packages/standard-generator/src/templates/package.json.hbs +++ b/packages/standard-generator/src/templates/package.json.hbs @@ -21,16 +21,16 @@ "dependencies": { {{{ printDependencies dependencies }}} "@types/react": "^18.0.26", - "next": "^13.4.1", + "next": "^14.0.0", "next-auth": "^4.24.5" }, "devDependencies": { - "@next/eslint-plugin-next": "12.3.1", + "@next/eslint-plugin-next": "^14.0.0", "@types/node" : "^16.0.0", "concurrently": "^7.1.0", "cross-env": "^7.0.3", "dotenv-load": "^2.0.1", - "eslint-config-next": "^12.3.1", + "eslint-config-next": "^14.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/store/package.json b/packages/store/package.json index 2b738d2c..2764fc26 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -33,13 +33,13 @@ }, "devDependencies": { "del-cli": "^4.0.1", - "typescript": "^4.8.3" + "typescript": "^5.2.2" }, "dependencies": { - "zustand": "^4.1.1" + "zustand": "^4.4.7" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/store/src/StoreContext.ts b/packages/store/src/StoreContext.ts new file mode 100644 index 00000000..9e7c19c1 --- /dev/null +++ b/packages/store/src/StoreContext.ts @@ -0,0 +1,6 @@ +import { createContext } from 'react'; +import { type StoreApi } from 'zustand'; +import { StoreState } from './store'; + +export const StoreContext = createContext | null>(null); +StoreContext.displayName = 'StoreContext'; diff --git a/packages/store/src/StoreProvider.tsx b/packages/store/src/StoreProvider.tsx new file mode 100644 index 00000000..a24d3fe8 --- /dev/null +++ b/packages/store/src/StoreProvider.tsx @@ -0,0 +1,21 @@ +import React, { useEffect, useRef } from 'react'; + +import { StoreContext } from './StoreContext'; +import { InitialStoreState, createStore } from './store'; + +interface StoreProviderProps extends InitialStoreState { + children?: React.ReactNode; +} + +export const StoreProvider = ({ children, ...restProps }: StoreProviderProps) => { + const storeRef = useRef | null>(null); + if (!storeRef.current) { + storeRef.current = createStore({ ...restProps }); + } + + useEffect(() => { + storeRef.current?.persist.rehydrate(); + }, []); + + return {children}; +}; diff --git a/packages/store/src/__tests__/store.test.ts b/packages/store/src/__tests__/store.test.ts index 29118a0e..5bd6913a 100644 --- a/packages/store/src/__tests__/store.test.ts +++ b/packages/store/src/__tests__/store.test.ts @@ -1,211 +1,24 @@ import { describe, test, expect } from 'vitest'; -import { renderHook } from '@testing-library/react'; -import { createWrapper } from './test-utils/utils'; -import { initializeStore, SiteState, useCreateStore, useStore } from '../store'; - -function getStateToVerify(currentState: SiteState) { - let { actions, ...stateToVerify } = currentState; - return stateToVerify; -} - -describe('GIVEN the store initializer', () => { - describe('WHEN no other state is provided', () => { - test('THEN the store api provides the initial default state', () => { - const storeApi = initializeStore(); - expect(getStateToVerify(storeApi.getState())).toEqual({ - breadcrumbs: [], - navigation: {}, - sidebarData: [], - tableOfContents: [], - searchIndex: [], - searchConfig: {}, - sharedConfig: {}, - description: undefined, - layout: undefined, - route: undefined, - title: undefined, - colorMode: 'light' - }); - }); - }); - - describe('WHEN additional state is preloaded', () => { - test('THEN the store api provides the initial default state plus the preloaded state', () => { - const state = { - description: 'description', - layout: 'layout', - route: 'route', - title: 'title' - }; - - const storeApi = initializeStore(state); - expect(getStateToVerify(storeApi.getState())).toEqual({ - breadcrumbs: [], - navigation: {}, - searchIndex: [], - searchConfig: {}, - sidebarData: [], - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - - ...state - }); - }); - }); -}); - -describe('GIVEN the `useCreateStore` hook', () => { - describe('WHEN executed on the client', () => { - test('THEN the store content is replaced', () => { - const state = { layout: 'layout', description: 'des' }; - const { result, rerender } = renderHook(() => useCreateStore(state)); - let currentState = result.current().getState(); - - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - searchIndex: [], - searchConfig: {}, - sidebarData: [], - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - ...state, - route: undefined, - title: undefined - }); - - // update the state and rerender - state.layout = 'new'; - state.description = 'description'; - rerender(); - - currentState = result.current().getState(); - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - sidebarData: [], - searchIndex: [], - searchConfig: {}, - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - description: 'description', - layout: 'new', - route: undefined, - title: undefined - }); - }); - test('THEN defaults applied when page props do not include default state', () => { - const state: { layout?: string; description: string } = { - layout: 'layout', - description: 'des' +import { InitialSiteState, createStore } from '../store'; + +describe('GIVEN the createStore function', () => { + describe('WHEN custom initial state is provided', () => { + test('THEN it overrides the default initial state', () => { + const MyImageComponent = () => 'custom image'; + const MyLinkComponent = () => 'custom link'; + const initialState: InitialSiteState = { + colorMode: 'dark', + LinkComponent: MyLinkComponent, + ImageComponent: MyImageComponent }; - const { result, rerender } = renderHook(() => useCreateStore(state)); - let currentState = result.current().getState(); - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - searchIndex: [], - searchConfig: {}, - sidebarData: [], - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - ...state, - route: undefined, - title: undefined - }); - - /** - * we use delete here because the idea is that the page does not indicate a layout IN ANY WAY - * This is different from the page saying my layout is undefined - */ - delete state.layout; - state.description = 'description'; - rerender(); - - currentState = result.current().getState(); - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - sidebarData: [], - searchIndex: [], - searchConfig: {}, - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - description: 'description', - layout: undefined, - route: undefined, - title: undefined - }); - }); - }); - - describe('WHEN executed on the server', () => { - test('THEN the store is always reinitialized', () => { - const state = { layout: 'layout', description: 'des' }; - const { result, rerender } = renderHook(() => useCreateStore(state, true)); - let currentState = result.current().getState(); - - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - searchIndex: [], - searchConfig: {}, - sidebarData: [], - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - ...state, - route: undefined, - title: undefined - }); - - // update the state and rerender - state.layout = 'new'; - state.description = 'description'; - rerender(); - - currentState = result.current().getState(); - - expect(getStateToVerify(currentState)).toEqual({ - breadcrumbs: [], - navigation: {}, - sidebarData: [], - searchIndex: [], - searchConfig: {}, - tableOfContents: [], - sharedConfig: {}, - colorMode: 'light', - description: 'description', - layout: 'new', - route: undefined, - title: undefined - }); - }); - }); -}); - -describe('GIVEN the `useStore` hook', () => { - describe('WHEN a selector is provided', () => { - test('THEN the hook applies the selector and returns the selected state', () => { - const { result } = renderHook(() => useStore(state => state.title), { - wrapper: createWrapper({ title: 'title' }) - }); - expect(result.current).toEqual('title'); - }); - }); + const store = createStore(initialState); + const state = store.getState(); - describe('WHEN rendered outside of the StoreContext', () => { - test('THEN the hook throws an error', () => { - expect(() => renderHook(() => useStore(state => state.title))).toThrowError( - 'Missing StoreProvider in the tree' - ); + expect(state.colorMode).toEqual(initialState.colorMode); + expect(state.LinkComponent).toEqual(initialState.LinkComponent); + expect(state.ImageComponent).toEqual(initialState.ImageComponent); }); }); }); diff --git a/packages/store/src/__tests__/test-utils/utils.tsx b/packages/store/src/__tests__/test-utils/utils.tsx deleted file mode 100644 index b15d8a6a..00000000 --- a/packages/store/src/__tests__/test-utils/utils.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; - -import { useCreateStore, StoreProvider } from '../../store'; -import type { SiteState } from '../../store'; - -export function renderWithStore(ui: React.ReactElement) { - const { rerender, ...result } = render({ui}); - return { - ...result, - rerender: (rerenderUi: React.ReactElement) => rerender({rerenderUi}) - }; -} - -export function createWrapper(state?: Partial) { - return ({ children }: { children?: React.ReactNode }) => {children}; -} - -/** - * - * @param state: initial state for the site store - */ -const Store: React.FC<{ state?: Partial }> = ({ children, state = {} }) => { - const createStore = useCreateStore(state); - return {children}; -}; diff --git a/packages/store/src/__tests__/useAppHeader.test.ts b/packages/store/src/__tests__/useAppHeader.test.ts deleted file mode 100644 index b6f3d673..00000000 --- a/packages/store/src/__tests__/useAppHeader.test.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { describe, expect, test, vi, beforeAll, afterAll } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useAppHeader } from '../useAppHeader'; -import { SiteState } from '../store'; - -const header: SiteState['sharedConfig']['header'] = { - homeLink: '/mosaic', - logo: '/some/url', - title: 'Digital Platform mosaic', - menu: [ - { - title: 'Products', - link: '/mosaic/products' - }, - { - title: 'Case Studies', - link: '/mosaic/case-studies' - }, - { - title: 'Docs & Tools', - links: [ - { - title: 'Docs', - link: '/mosaic/docs' - }, - { - title: 'APIs', - link: '/mosaic/apis' - }, - { - title: 'Start Your Project', - link: '/apps/app-registry' - } - ] - }, - { - title: 'Community Updates', - links: [ - { - title: 'Newsletters', - link: '/mosaic/newsletters' - }, - { - title: 'Blog', - link: ' http://www.example.com/blog' - }, - { - title: 'Podcasts', - link: '/mosaic/podcasts' - }, - { - title: 'Release Notes', - link: '/mosaic/release-notes' - }, - { - title: 'Operating Model', - link: ' http://www.example.com/release-notes' - } - ] - }, - { - title: 'Support', - links: [ - { - title: 'Contact', - link: '/mosaic/support' - }, - { - title: 'Contributing', - link: '/mosaic/support/contributing' - }, - { - title: 'Incidents & RCAs', - link: '/mosaic/support/rcas' - }, - { - title: 'Runbooks', - link: '/mosaic/support/runbooks' - }, - { - title: 'Site', - link: '/mosaic/site' - } - ] - } - ] -}; - -const invalidMenuHeader: SiteState['sharedConfig']['header'] = { - homeLink: '/mosaic', - logo: '/some/url', - title: 'Mosaic', - menu: [ - { - title: 'Products', - // @ts-ignore - href: '/mosaic/products' - } - ] -}; - -const state: Partial = { - sharedConfig: { header } -}; - -const inValidMenuState: Partial = { - sharedConfig: { header: invalidMenuHeader } -}; - -describe('GIVEN the `useAppHeader` hook', () => { - describe('WHEN there are no header props in the store', () => { - test('THEN the hook returns undefined', () => { - const { result } = renderHook(() => useAppHeader(), { - wrapper: createWrapper() - }); - expect(result.current).toBeUndefined(); - }); - }); - - describe('WHEN there are header props in the store', () => { - test('THEN the hook returns a homelink, logo and a title', () => { - const { result } = renderHook(() => useAppHeader(), { - wrapper: createWrapper({ ...state }) - }); - expect(result.current?.homeLink).toEqual(header.homeLink); - expect(result.current?.logo).toEqual(header.logo); - expect(result.current?.title).toEqual(header.title); - expect(result.current?.menu.length).toEqual(5); - }); - test('AND THEN the menu items have been assigned a type', () => { - const { result } = renderHook(() => useAppHeader(), { - wrapper: createWrapper({ ...state }) - }); - expect(result.current?.menu.length).toEqual(5); - expect(result.current?.menu[0].type).toEqual('link'); - expect(result.current?.menu[3].type).toEqual('menu'); - }); - - describe('AND WHEN invalid menu items are provided', () => { - let consoleError; - beforeAll(() => { - consoleError = vi.spyOn(console, 'error').mockImplementation(() => {}); - }); - afterAll(() => { - vi.restoreAllMocks(); - }); - test('THEN no menu items are returned', () => { - const { result } = renderHook(() => useAppHeader(), { - wrapper: createWrapper({ ...inValidMenuState }) - }); - expect(result.current?.menu.length).toEqual(0); - expect(consoleError).toHaveBeenCalledTimes(1); - }); - }); - }); -}); diff --git a/packages/store/src/__tests__/useBreadcrumbs.test.ts b/packages/store/src/__tests__/useBreadcrumbs.test.ts deleted file mode 100644 index 4dd5caef..00000000 --- a/packages/store/src/__tests__/useBreadcrumbs.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { describe, test, expect } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { type Breadcrumb, useBreadcrumbs } from '../useBreadcrumbs'; - -const breadcrumbs: Breadcrumb[] = [ - { label: 'Home', path: '/home', hidden: false, id: '1' }, - { label: 'Docs', path: '/docs', hidden: false, id: '2' }, - { label: 'Products', path: '/products', hidden: false, id: '3' } -]; - -describe('GIVEN the `useBreadcrumbs` hook', () => { - describe('WHEN there are NO breadcrumbs are in the store', () => { - test('THEN the hook returns an empty collection', () => { - const { result } = renderHook(() => useBreadcrumbs(), { - wrapper: createWrapper() - }); - expect(result.current.breadcrumbs).toEqual([]); - expect(result.current.enabled).toEqual(false); - }); - }); - - describe('WHEN there are breadcrumbs are in the store', () => { - test('THEN the hook returns those breadcrumbs', () => { - const { result } = renderHook(() => useBreadcrumbs(), { - wrapper: createWrapper({ breadcrumbs }) - }); - expect(result.current.breadcrumbs.length).toEqual(3); - expect(result.current.enabled).toEqual(true); - }); - }); - - describe('WHEN there are breadcrumbs are in the store', () => { - test('THEN enabled is false if there are not enough breadcrumbs', () => { - const { result } = renderHook(() => useBreadcrumbs(10), { - wrapper: createWrapper({ breadcrumbs }) - }); - expect(result.current.breadcrumbs.length).toEqual(3); - expect(result.current.enabled).toEqual(false); - }); - }); -}); diff --git a/packages/store/src/__tests__/useColorMode.test.ts b/packages/store/src/__tests__/useColorMode.test.ts index e714bcd6..05b26e0e 100644 --- a/packages/store/src/__tests__/useColorMode.test.ts +++ b/packages/store/src/__tests__/useColorMode.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect } from 'vitest'; -import { renderHook } from '@testing-library/react'; -import { createWrapper } from './test-utils/utils'; +import { act, renderHook } from '@testing-library/react'; +import { createWrapper } from './utils/utils'; import { useColorMode } from '../useColorMode'; describe('GIVEN the `useColorMode` hook', () => { @@ -8,6 +8,25 @@ describe('GIVEN the `useColorMode` hook', () => { const { result } = renderHook(() => useColorMode(), { wrapper: createWrapper() }); - expect(result.current).toEqual('light'); + expect(result.current.colorMode).toEqual('light'); + }); + + describe('AND WHEN the setColorMode action is used', () => { + test('THEN colorMode is updated', () => { + const storeWrapper = createWrapper(); + + const { result: useColorModeResult, rerender } = renderHook(() => useColorMode(), { + wrapper: storeWrapper + }); + + expect(useColorModeResult.current.colorMode).toEqual('light'); + const { setColorMode } = useColorModeResult.current; + + act(() => { + setColorMode('dark'); + rerender(); + }); + expect(useColorModeResult.current.colorMode).toEqual('dark'); + }); }); }); diff --git a/packages/store/src/__tests__/useFooter.test.ts b/packages/store/src/__tests__/useFooter.test.ts deleted file mode 100644 index 1a0294ac..00000000 --- a/packages/store/src/__tests__/useFooter.test.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useFooter } from '../useFooter'; -import { SiteState } from '../store'; - -const footer: SiteState['sharedConfig']['footer'] = { - description: 'Sign up to stay on top of new developments and solutions.', - title: 'Subscribe to our Newsletter', - href: 'http://a.link.com', - label: 'Sign Up', - helpLinks: { - stackoverflowLabel: 'View our Stack Overflow', - stackoverflowUrl: 'https://stack.com', - symphonyLabel: 'Chat on Symphony', - symphonyUrl: 'symphony://a_stream' - } -}; - -const invalidMenuHeader: SiteState['sharedConfig']['header'] = { - homeLink: '/developer', - logo: '/some/url', - title: 'Digital Platform Developer', - menu: [ - { - title: 'Products', - // @ts-ignore - href: '/developer/products' - } - ] -}; - -const state: Partial = { - sharedConfig: { footer } -}; - -describe('GIVEN the `useFooter` hook', () => { - describe('WHEN there are no footer props in the store', () => { - test('THEN the hook returns undefined', () => { - const { result } = renderHook(() => useFooter(), { - wrapper: createWrapper() - }); - expect(result.current).toBeUndefined(); - }); - }); - - describe('WHEN there are footer props in the store', () => { - test('THEN the footer props are returned', () => { - const { result } = renderHook(() => useFooter(), { - wrapper: createWrapper({ ...state }) - }); - expect(result.current?.description).toEqual(footer.description); - expect(result.current?.title).toEqual(footer.title); - expect(result.current?.href).toEqual(footer.href); - expect(result.current?.label).toEqual(footer.label); - expect(result.current?.helpLinks.stackoverflowLabel).toEqual( - footer.helpLinks.stackoverflowLabel - ); - expect(result.current?.helpLinks.stackoverflowUrl).toEqual(footer.helpLinks.stackoverflowUrl); - expect(result.current?.helpLinks.symphonyLabel).toEqual(footer.helpLinks.symphonyLabel); - expect(result.current?.helpLinks.symphonyUrl).toEqual(footer.helpLinks.symphonyUrl); - }); - }); -}); diff --git a/packages/store/src/__tests__/useImageComponent.test.ts b/packages/store/src/__tests__/useImageComponent.test.ts new file mode 100644 index 00000000..abb4e4c4 --- /dev/null +++ b/packages/store/src/__tests__/useImageComponent.test.ts @@ -0,0 +1,26 @@ +import { renderHook } from '@testing-library/react'; + +import { createWrapper } from './utils/utils'; +import { useImageComponent } from '../useImageComponent'; + +describe('GIVEN the `useImageComponent` hook', () => { + describe('WHEN a user does **not** provide an ImageComponent', () => { + test('THEN the img element is returned', () => { + const { result } = renderHook(() => useImageComponent(), { + wrapper: createWrapper() + }); + expect(result.current).toEqual('img'); + }); + }); + + describe('WHEN a user does provide a ImageComponent', () => { + test('THEN the hook returns the layout', () => { + const myImageComponent = () => 'hi'; + + const { result } = renderHook(() => useImageComponent(), { + wrapper: createWrapper({ ImageComponent: myImageComponent }) + }); + expect(result.current).toEqual(myImageComponent); + }); + }); +}); diff --git a/packages/store/src/__tests__/useLayout.test.ts b/packages/store/src/__tests__/useLayout.test.ts deleted file mode 100644 index bf5b23e1..00000000 --- a/packages/store/src/__tests__/useLayout.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, test, expect } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useLayout } from '../useLayout'; - -describe('GIVEN the `useLayout` hook', () => { - describe('WHEN there is no layout in the store', () => { - test('THEN the hook returns undefined', () => { - const { result } = renderHook(() => useLayout(), { - wrapper: createWrapper() - }); - expect(result.current.layout).toBeUndefined(); - }); - }); - - describe('WHEN there is a layout in the store', () => { - test('THEN the hook returns the layout', () => { - const { result } = renderHook(() => useLayout(), { - wrapper: createWrapper({ layout: 'LayoutName' }) - }); - expect(result.current.layout).toEqual('LayoutName'); - }); - }); -}); diff --git a/packages/store/src/__tests__/useLinkComponent.test.ts b/packages/store/src/__tests__/useLinkComponent.test.ts new file mode 100644 index 00000000..52b785cb --- /dev/null +++ b/packages/store/src/__tests__/useLinkComponent.test.ts @@ -0,0 +1,26 @@ +import { renderHook } from '@testing-library/react'; + +import { createWrapper } from './utils/utils'; +import { useLinkComponent } from '../useLinkComponent'; + +describe('GIVEN the `useLinkComponent` hook', () => { + describe('WHEN a user does **not** provide a LinkComponent', () => { + test('THEN the anchor element is returned', () => { + const { result } = renderHook(() => useLinkComponent(), { + wrapper: createWrapper() + }); + expect(result.current).toEqual('a'); + }); + }); + + describe('WHEN a user does provide a LinkComponent', () => { + test('THEN the hook returns the layout', () => { + const myLinkComponent = () => 'hi'; + + const { result } = renderHook(() => useLinkComponent(), { + wrapper: createWrapper({ LinkComponent: myLinkComponent }) + }); + expect(result.current).toEqual(myLinkComponent); + }); + }); +}); diff --git a/packages/store/src/__tests__/useMeta.test.ts b/packages/store/src/__tests__/useMeta.test.ts deleted file mode 100644 index 3ec08e66..00000000 --- a/packages/store/src/__tests__/useMeta.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { describe, test, expect } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useMeta } from '../useMeta'; -import { Breadcrumb } from '../types'; - -const breadcrumbs: Breadcrumb[] = [ - { label: 'Home', path: '/home', hidden: false, id: '1' }, - { label: 'Docs', path: '/docs', hidden: false, id: '2' }, - { label: 'Products', path: '/products', hidden: false, id: '3' } -]; - -describe('GIVEN the `useMeta` hook', () => { - describe('WHEN there is no metadata in the store', () => { - test('THEN the hook returns no metadata', () => { - const { result } = renderHook(() => useMeta(), { - wrapper: createWrapper() - }); - expect(result.current.meta.breadcrumbs).toEqual([]); - expect(result.current.meta.description).toBeUndefined(); - expect(result.current.meta.title).toBeUndefined(); - }); - }); - - describe('WHEN there is metadata in the store', () => { - test('THEN the hook returns the metadata', () => { - const { result } = renderHook(() => useMeta(), { - wrapper: createWrapper({ breadcrumbs, title: 'A Title', description: 'A Description' }) - }); - expect(result.current.meta.breadcrumbs).toEqual(breadcrumbs); - expect(result.current.meta.title).toEqual('A Title'); - expect(result.current.meta.description).toEqual('A Description'); - }); - }); -}); diff --git a/packages/store/src/__tests__/useRoute.test.ts b/packages/store/src/__tests__/useRoute.test.ts deleted file mode 100644 index 8c2bfee5..00000000 --- a/packages/store/src/__tests__/useRoute.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useRoute } from '../useRoute'; - -describe('GIVEN the `useRoute` hook', () => { - describe('WHEN there is no route in the store', () => { - test('THEN the hook returns no route', () => { - const { result } = renderHook(() => useRoute(), { - wrapper: createWrapper() - }); - expect(result.current.route).toBeUndefined(); - }); - }); - - describe('WHEN there is a route in the store', () => { - test('THEN the hook returns the route', () => { - const { result } = renderHook(() => useRoute(), { - wrapper: createWrapper({ route: 'a/route/to/a/page' }) - }); - expect(result.current.route).toEqual('a/route/to/a/page'); - }); - }); -}); diff --git a/packages/store/src/__tests__/useSearchIndex.test.ts b/packages/store/src/__tests__/useSearchIndex.test.ts deleted file mode 100644 index dbfa9201..00000000 --- a/packages/store/src/__tests__/useSearchIndex.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useSearchIndex } from '../useSearchIndex'; -import { SiteState } from '../store'; - -const index: SiteState['searchIndex'] = [ - { - title: 'Test item title', - content: ['test item content sentence 1', 'test item content sentence 2'], - route: 'test/page/route' - }, - { - title: 'Second test item title', - content: [ - 'Laborum deserunt laboris in quis dolor est laboris incididunt exercitation sunt voluptate.', - 'Nisi amet cupidatat ut laborum Lorem eu qui fugiat ad.' - ], - route: 'second/test/page/route' - } -]; - -const config: SiteState['searchConfig'] = { - includeScore: false, - includeMatches: true, - maxPatternLength: 240, - ignoreLocation: true, - threshold: 0.3, - keys: ['title', 'content'] -}; - -const state: Partial = { - searchIndex: index, - searchConfig: config -}; - -describe('GIVEN the useSearchIndex hook', () => { - describe('WHEN there is no search index in the store', () => { - test('THEN searchEnabled is set to false', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper() - }); - expect(result.current.searchEnabled).toBe(false); - }); - test('AND searchIndex is set to an empty array', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper() - }); - expect(Array.isArray(result.current.searchIndex)).toBe(true); - expect(result.current.searchIndex.length).toBe(0); - }); - test('AND searchConfig is set to an empty object', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper() - }); - expect(typeof result.current.searchConfig).toBe('object'); - expect(Object.keys(result.current.searchConfig).length).toBe(0); - }); - }); - - describe('WHEN there is a search index in the store', () => { - test('THEN searchEnabled is set to true', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper({ ...state }) - }); - expect(result.current.searchEnabled).toBe(true); - }); - test('AND searchIndex contains the index', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper({ ...state }) - }); - expect(Array.isArray(result.current.searchIndex)).toBe(true); - expect(result.current.searchIndex.length).toBe(index.length); - }); - test('AND searchIndex contains the search config', () => { - const { result } = renderHook(() => useSearchIndex(), { - wrapper: createWrapper({ ...state }) - }); - expect(typeof result.current.searchConfig).toBe('object'); - expect(Object.keys(result.current.searchConfig).length).toBe(Object.keys(config).length); - expect(result.current.searchConfig.ignoreLocation).toBe(true); - expect(result.current.searchConfig.maxPatternLength).toBe(240); - expect(result.current.searchConfig.keys).toEqual(['title', 'content']); - }); - }); -}); diff --git a/packages/store/src/__tests__/useStore.test.ts b/packages/store/src/__tests__/useStore.test.ts new file mode 100644 index 00000000..ef347362 --- /dev/null +++ b/packages/store/src/__tests__/useStore.test.ts @@ -0,0 +1,28 @@ +import { renderHook } from '@testing-library/react'; + +import { createWrapper } from './utils/utils'; +import { useStore } from '../useStore'; + +const consoleErrorMock = jest.spyOn(console, 'error').mockImplementation(); + +describe('GIVEN the `useStore` hook', () => { + describe('WHEN a selector is provided', () => { + test('THEN the hook applies the selector and returns the selected state', () => { + const { result } = renderHook(() => useStore(state => state.colorMode), { + wrapper: createWrapper({ colorMode: 'dark' }) + }); + expect(result.current).toEqual('dark'); + }); + }); + + describe('WHEN rendered outside of the StoreContext', () => { + afterAll(() => { + consoleErrorMock.mockRestore(); + }); + test('THEN the hook throws an error', () => { + expect(() => renderHook(() => useStore(state => state.colorMode))).toThrowError( + 'Missing StoreProvider in the tree' + ); + }); + }); +}); diff --git a/packages/store/src/__tests__/useStoreActions.test.ts b/packages/store/src/__tests__/useStoreActions.test.ts deleted file mode 100644 index 5138c096..00000000 --- a/packages/store/src/__tests__/useStoreActions.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { describe, test, expect } from 'vitest'; -import { renderHook, act } from '@testing-library/react'; -import { createWrapper } from './test-utils/utils'; -import { useStoreActions } from '../useStoreActions'; -import { useColorMode } from '../useColorMode'; - -describe('GIVEN the `useStoreActions` hook', () => { - test('THEN there is a setColorMode action', () => { - const { result } = renderHook(() => useStoreActions(), { - wrapper: createWrapper() - }); - expect(result.current.setColorMode).not.toBeUndefined(); - }); - - describe('AND WHEN the setColorMode action is used', () => { - test('THEN colorMode is updated', () => { - const { result: useStoreActionsResult } = renderHook(() => useStoreActions(), { - wrapper: createWrapper() - }); - - const { result: useColorModeResult, rerender } = renderHook(() => useColorMode(), { - wrapper: createWrapper() - }); - - expect(useColorModeResult.current).toEqual('light'); - - const { setColorMode } = useStoreActionsResult.current; - - act(() => { - setColorMode('dark'); - rerender(); - }); - expect(useColorModeResult.current).toEqual('dark'); - }); - }); -}); diff --git a/packages/store/src/__tests__/useTableOfContents.test.ts b/packages/store/src/__tests__/useTableOfContents.test.ts deleted file mode 100644 index 50f7fd39..00000000 --- a/packages/store/src/__tests__/useTableOfContents.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { renderHook } from '@testing-library/react'; - -import { createWrapper } from './test-utils/utils'; -import { useTableOfContents } from '../useTableOfContents'; -import type { TableOfContentsItem } from '../types/tableOfContents'; - -const tableOfContents: TableOfContentsItem[] = [ - { level: 2, id: 'what-is-analytics', text: 'What is Analytics' }, - { level: 2, id: 'what-is-our-goal', text: 'What is our goal?' }, - { level: 2, id: 'benefits-of-using-our-service', text: 'Benefits of using our Service' }, - { level: 2, id: 'useful-go-links', text: 'Useful Go links' } -]; - -describe('GIVEN the `useTableOfContents` hook', () => { - describe('WHEN there is NO table of contents in the store', () => { - test('THEN the hook returns an empty collection', () => { - const { result } = renderHook(() => useTableOfContents(), { - wrapper: createWrapper() - }); - expect(result.current.tableOfContents).toEqual([]); - }); - }); - - describe('WHEN table of contents is in the store', () => { - test('THEN the hook returns the tabel of contents', () => { - const { result } = renderHook(() => useTableOfContents(), { - wrapper: createWrapper({ tableOfContents }) - }); - expect(result.current.tableOfContents.length).toEqual(4); - }); - }); -}); diff --git a/packages/store/src/__tests__/utils/utils.tsx b/packages/store/src/__tests__/utils/utils.tsx new file mode 100644 index 00000000..e6ef1b66 --- /dev/null +++ b/packages/store/src/__tests__/utils/utils.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { render } from '@testing-library/react'; + +import { StoreProvider } from '../../StoreProvider'; +import type { SiteState } from '../../store'; + +export function renderWithStore(ui: React.ReactElement) { + return render({ui}); +} + +export function createWrapper(state?: Partial) { + return ({ children }: { children?: React.ReactNode }) => ( + {children} + ); +} diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 5b6326dc..0270bd7d 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -1,14 +1,9 @@ +'use client'; + +export * from './StoreProvider'; +export * from './StoreContext'; export * from './store'; -export * from './useAppHeader'; -export * from './useBreadcrumbs'; +export * from './useStore'; export * from './useColorMode'; -export * from './useLayout'; -export * from './useMeta'; -export * from './useNavigation'; -export * from './useRoute'; -export * from './useSearchIndex'; -export * from './useSidebar'; -export * from './useTableOfContents'; -export * from './useFooter'; -export * from './useStoreActions'; -export * from './types'; +export * from './useLinkComponent'; +export * from './useImageComponent'; diff --git a/packages/store/src/store.ts b/packages/store/src/store.ts index 45520bb2..4053b0f4 100644 --- a/packages/store/src/store.ts +++ b/packages/store/src/store.ts @@ -1,141 +1,47 @@ -import { useLayoutEffect, createContext, useContext } from 'react'; -import { createStore, StoreApi, useStore as useZustandStore } from 'zustand'; +import type { ElementType } from 'react'; +import { createStore as createZustandStore } from 'zustand'; import { devtools, persist } from 'zustand/middleware'; -import type { BreadcrumbsSlice } from './types/breadcrumbs'; -import type { SearchIndexSlice } from './types/searchIndex'; -import type { SharedConfigSlice } from './types/sharedConfig'; -import type { LayoutSlice } from './types/layout'; -import type { NavigationSlice } from './types/navigation'; -import type { SidebarSlice } from './types/sidebar'; -import type { TableOfContentsSlice } from './types/tableOfContents'; -import type { ColorMode } from './types/colorMode'; +import type { ColorMode } from './useColorMode'; -let store: StoreApi; - -export type SiteState = BreadcrumbsSlice & - LayoutSlice & - SidebarSlice & - TableOfContentsSlice & - NavigationSlice & - SearchIndexSlice & - SharedConfigSlice & { - /** Page metadata description, used by search */ - description?: string; - /** Page route */ - route?: string; - /** Page title */ - title?: string; - colorMode: ColorMode; - actions: { - setColorMode: (colorMode: ColorMode) => void; - }; +export type StoreState = { + colorMode: ColorMode; + ImageComponent: ElementType; + LinkComponent: ElementType; + actions: { + setColorMode: (colorMode: ColorMode) => void; }; +}; -type PeristedStoreState = Pick; -type DefaultSiteState = Omit; +type PeristedStoreState = Pick; +export type DefaultStoreState = Omit; +export type InitialStoreState = Partial; -function getDefaultInitialState(): DefaultSiteState { +function getDefaultInitialState(initialState?: InitialStoreState): DefaultStoreState { return { - breadcrumbs: [], - sidebarData: [], - tableOfContents: [], - navigation: {}, - searchIndex: [], - searchConfig: {}, - sharedConfig: {}, - description: undefined, - layout: undefined, - route: undefined, - title: undefined, - colorMode: 'light' + colorMode: initialState?.colorMode || 'light', + ImageComponent: initialState?.ImageComponent || 'img', + LinkComponent: initialState?.LinkComponent || 'a' }; } -const StoreContext = createContext(undefined); -StoreContext.displayName = 'StoreContext'; -const StoreProvider = StoreContext.Provider; - const storeMiddlewares = stateCreatorFn => devtools( - persist(stateCreatorFn, { + persist(stateCreatorFn, { name: 'mosaic-theme-pref', - partialize: (state: SiteState) => ({ + skipHydration: true, + partialize: (state: StoreState) => ({ colorMode: state.colorMode }) }) ); -const initializeStore = (preloadedState: Partial = {}) => { - const mosaicStore = createStore( +export const createStore = (initialState?: InitialStoreState) => + createZustandStore( storeMiddlewares(set => ({ - ...getDefaultInitialState(), - ...preloadedState, + ...getDefaultInitialState(initialState), actions: { setColorMode: (colorMode: ColorMode) => set({ colorMode }) } })) ); - return mosaicStore; -}; - -function useCreateStore(serverInitialState: Partial, isSSR = false) { - // Server side code: For SSR & SSG, always use a new store. - if (typeof window === 'undefined' || isSSR) { - return () => initializeStore(serverInitialState); - } - // End of server side code - - // Client side code: - // Next.js always re-uses same store regardless of whether page is a SSR or SSG or CSR type. - const isReusingStore = Boolean(store); - store = store ?? initializeStore(serverInitialState); - - // When next.js re-renders _app while re-using an older store, then replace current state with - // the new state (in the next render cycle). - // (Why next render cycle? Because react cannot re-render while a render is already in progress. - // i.e. we cannot do a setState() as that will initiate a re-render) - // - // eslint complaining "React Hooks must be called in the exact same order in every component render" - // is ignorable as this code runs in same order in a given environment (i.e. client or server) - useLayoutEffect(() => { - // serverInitialState is undefined for CSR pages. It is up to you if you want to reset - // states on CSR page navigation or not. I have chosen not to, but if you choose to, - // then add `serverInitialState = getDefaultInitialState()` here. - if (serverInitialState && isReusingStore) { - // recombine the page props with the initial state so that if page props are missing something then the default gets applied - const pageState = { ...getDefaultInitialState(), ...serverInitialState }; - const { colorMode, actions, ...restStoreState } = store.getState(); - - store.setState( - { - // re-use functions from existing store - ...restStoreState, - // but reset all other properties. - ...pageState, - colorMode, - actions - }, - true // replace states, rather than shallow merging - ); - } - }); - - return () => store; -} - -/** - * Hook providing access to state stored in the site store - */ -function useStore( - selector: (state: SiteState) => T, - equalityFn?: (left: T, right: T) => boolean -): T { - const storeFromContext = useContext(StoreContext); - if (!storeFromContext) { - throw new Error('Missing StoreProvider in the tree'); - } - return useZustandStore(storeFromContext, selector, equalityFn); -} - -export { useCreateStore, StoreProvider, useStore, initializeStore }; diff --git a/packages/store/src/types/colorMode.ts b/packages/store/src/types/colorMode.ts deleted file mode 100644 index 3a5ba714..00000000 --- a/packages/store/src/types/colorMode.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const lightMode = 'light'; -export const darkMode = 'dark'; - -export type ColorMode = typeof lightMode | typeof darkMode; diff --git a/packages/store/src/types/index.ts b/packages/store/src/types/index.ts deleted file mode 100644 index 4fe2e957..00000000 --- a/packages/store/src/types/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './appHeader'; -export * from './breadcrumbs'; -export * from './footer'; -export * from './helpLinks'; -export * from './layout'; -export * from './meta'; -export * from './navigation'; -export * from './route'; -export * from './searchIndex'; -export * from './sharedConfig'; -export * from './sidebar'; -export * from './tableOfContents'; diff --git a/packages/store/src/types/layout.ts b/packages/store/src/types/layout.ts deleted file mode 100644 index 93b220e0..00000000 --- a/packages/store/src/types/layout.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * [[`LayoutSlice`]] specifies the page's anatomy - */ -export type LayoutSlice = { - /** Layout name that will define the page's anatomy */ - layout?: string; -}; diff --git a/packages/store/src/types/meta.ts b/packages/store/src/types/meta.ts deleted file mode 100644 index 28737478..00000000 --- a/packages/store/src/types/meta.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Breadcrumb } from './breadcrumbs'; - -/** - * [[`MetaSlice`]] specifies the page's head metadata - */ -export type MetaSlice = { - /** Page description */ - description?: string; - /** Page breadcrumbs */ - breadcrumbs?: Breadcrumb[]; - /** Page title */ - title?: string; -}; diff --git a/packages/store/src/types/route.ts b/packages/store/src/types/route.ts deleted file mode 100644 index 494db536..00000000 --- a/packages/store/src/types/route.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * [[`RouteSlice`]] specifies the page's route - */ -export type RouteSlice = { - /** Current page route */ - route?: string; -}; diff --git a/packages/store/src/useAppHeader.ts b/packages/store/src/useAppHeader.ts deleted file mode 100644 index 05479025..00000000 --- a/packages/store/src/useAppHeader.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { useStore } from './store'; -import { MenuItemType } from './types'; -import type { - AppHeaderSlice, - AppHeaderMenuLinkItem, - AppHeaderMenuLinksItem, - MenuLinkItem, - MenuLinksItem -} from './types'; - -function isMenu(menu: MenuLinkItem | MenuLinksItem): menu is MenuLinksItem { - return (menu as MenuLinksItem).links !== undefined; -} -function isMenuLink(menu: MenuLinkItem | MenuLinksItem): menu is MenuLinkItem { - return (menu as MenuLinkItem).link !== undefined; -} - -export type AppHeaderMenu = Array; - -export interface AppHeader extends Omit { - menu: AppHeaderMenu; -} - -export function useAppHeader(): AppHeader | undefined { - const appHeader = useStore(state => state.sharedConfig?.header); - if (!appHeader) { - return undefined; - } - const typedMenu: AppHeaderMenu = appHeader.menu.reduce((result, menu) => { - if (isMenu(menu)) { - const linksItem: AppHeaderMenuLinksItem = { ...menu, type: MenuItemType.MENU }; - return [...result, linksItem]; - } - if (isMenuLink(menu)) { - const linkItem: AppHeaderMenuLinkItem = { ...menu, type: MenuItemType.LINK }; - return [...result, linkItem]; - } - console.error('Unknown menu type passed to useAppHeader, ignoring', menu); - return result; - }, []); - - return { - ...appHeader, - menu: typedMenu - }; -} diff --git a/packages/store/src/useBreadcrumbs.ts b/packages/store/src/useBreadcrumbs.ts deleted file mode 100644 index d402cf37..00000000 --- a/packages/store/src/useBreadcrumbs.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { useStore } from './store'; - -export type { Breadcrumb } from './types'; - -export function useBreadcrumbs(minCrumbs = 1) { - const breadcrumbs = useStore(state => state.breadcrumbs); - return { - breadcrumbs: breadcrumbs || [], - enabled: breadcrumbs?.length > minCrumbs - }; -} diff --git a/packages/store/src/useColorMode.ts b/packages/store/src/useColorMode.ts index 66c34926..bcf0f842 100644 --- a/packages/store/src/useColorMode.ts +++ b/packages/store/src/useColorMode.ts @@ -1,8 +1,15 @@ -import { useStore } from './store'; +import { useStore } from './useStore'; -import { ColorMode } from './types/colorMode'; +export const lightMode = 'light'; +export const darkMode = 'dark'; -export function useColorMode(): ColorMode { - const colorMode = useStore(state => state.colorMode); - return colorMode; +export type ColorMode = typeof lightMode | typeof darkMode; +export type SetColorMode = (colorMode: ColorMode) => void; + +export function useColorMode(): { colorMode: ColorMode; setColorMode: SetColorMode } { + const result = useStore(state => ({ + colorMode: state.colorMode, + setColorMode: state.actions.setColorMode + })); + return result; } diff --git a/packages/store/src/useFooter.ts b/packages/store/src/useFooter.ts deleted file mode 100644 index da4e36fb..00000000 --- a/packages/store/src/useFooter.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { useStore } from './store'; -import type { FooterSlice } from './types'; - -type Footer = FooterSlice | undefined; - -export function useFooter(): Footer { - const footer = useStore(state => state.sharedConfig?.footer); - - return footer; -} diff --git a/packages/store/src/useImageComponent.ts b/packages/store/src/useImageComponent.ts new file mode 100644 index 00000000..96582b7b --- /dev/null +++ b/packages/store/src/useImageComponent.ts @@ -0,0 +1,7 @@ +import { ElementType } from 'react'; +import { useStore } from './useStore'; + +export function useImageComponent(): ElementType { + const component = useStore(state => state.ImageComponent); + return component; +} diff --git a/packages/store/src/useLayout.ts b/packages/store/src/useLayout.ts deleted file mode 100644 index 5c284cd8..00000000 --- a/packages/store/src/useLayout.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useStore } from './store'; -import type { LayoutSlice } from './types'; - -type Layout = LayoutSlice; - -export function useLayout(): Layout { - const layout = useStore(state => state.layout); - return { layout }; -} diff --git a/packages/store/src/useLinkComponent.ts b/packages/store/src/useLinkComponent.ts new file mode 100644 index 00000000..b1e234a9 --- /dev/null +++ b/packages/store/src/useLinkComponent.ts @@ -0,0 +1,7 @@ +import { ElementType } from 'react'; +import { useStore } from './useStore'; + +export function useLinkComponent(): ElementType { + const component = useStore(state => state.LinkComponent); + return component; +} diff --git a/packages/store/src/useMeta.ts b/packages/store/src/useMeta.ts deleted file mode 100644 index 5b3746f0..00000000 --- a/packages/store/src/useMeta.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useStore } from './store'; -import type { MetaSlice } from './types'; - -export type Meta = { - meta: MetaSlice; -}; - -export function useMeta(): Meta { - const meta = useStore(state => ({ - description: state.description, - breadcrumbs: state.breadcrumbs, - title: state.title - })); - return { - meta - }; -} diff --git a/packages/store/src/useNavigation.ts b/packages/store/src/useNavigation.ts deleted file mode 100644 index cd54fdac..00000000 --- a/packages/store/src/useNavigation.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { useStore } from './store'; -import type { Navigation } from './types'; - -export function useNavigation(): Navigation { - const { next, prev } = useStore(state => state.navigation) || {}; - return { - next, - prev - }; -} diff --git a/packages/store/src/useRoute.ts b/packages/store/src/useRoute.ts deleted file mode 100644 index d67286e5..00000000 --- a/packages/store/src/useRoute.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useStore } from './store'; -import type { RouteSlice } from './types'; - -export function useRoute(): RouteSlice { - const route = useStore(state => state.route); - return { - route - }; -} diff --git a/packages/store/src/useSearchIndex.ts b/packages/store/src/useSearchIndex.ts deleted file mode 100644 index 1f81fc9a..00000000 --- a/packages/store/src/useSearchIndex.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useStore } from './store'; - -export type { SearchIndexSlice } from './types'; - -export function useSearchIndex() { - const searchIndex = useStore(state => state.searchIndex); - const searchConfig = useStore(state => state.searchConfig); - - const searchEnabled = - searchConfig !== undefined && searchIndex !== undefined && searchIndex.length > 0; - - return { - searchEnabled, - searchIndex: searchEnabled ? searchIndex : [], - searchConfig: searchEnabled ? searchConfig : {} - }; -} diff --git a/packages/store/src/useSidebar.ts b/packages/store/src/useSidebar.ts deleted file mode 100644 index 3228fe31..00000000 --- a/packages/store/src/useSidebar.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { useStore } from './store'; -import { useBreadcrumbs } from './useBreadcrumbs'; -import { useRoute } from './useRoute'; -import type { Breadcrumb } from './types'; - -export function useSidebar() { - const menu = useStore(state => state.sidebarData) || []; - const { route } = useRoute(); - const { breadcrumbs } = useBreadcrumbs(); - - return { - menu, - selectedNodeId: route, - selectedGroupIds: getIds(breadcrumbs) - }; -} -function getIds(breadcrumbs: Breadcrumb[]) { - const pathIds = breadcrumbs.reduce( - (result, { id }) => [...result, id.replace(/\/[^\/]*$/, '')], - [] - ); - return new Set(pathIds); -} diff --git a/packages/store/src/useStore.ts b/packages/store/src/useStore.ts new file mode 100644 index 00000000..4549280d --- /dev/null +++ b/packages/store/src/useStore.ts @@ -0,0 +1,16 @@ +import { useContext } from 'react'; +import { useStore as useZustandStore } from 'zustand'; + +import { StoreState } from './store'; +import { StoreContext } from './StoreContext'; + +/** + * Hook providing access to state stored in the site store + */ +export function useStore(selector: (state: StoreState) => T): T { + const storeFromContext = useContext(StoreContext); + if (!storeFromContext) { + throw new Error('Missing StoreProvider in the tree'); + } + return useZustandStore(storeFromContext, selector); +} diff --git a/packages/store/src/useStoreActions.ts b/packages/store/src/useStoreActions.ts deleted file mode 100644 index 0230d6c0..00000000 --- a/packages/store/src/useStoreActions.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { useStore } from './store'; -export const useStoreActions = () => useStore(state => state.actions); diff --git a/packages/store/src/useTableOfContents.ts b/packages/store/src/useTableOfContents.ts deleted file mode 100644 index 959da2c0..00000000 --- a/packages/store/src/useTableOfContents.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { useStore } from './store'; - -export function useTableOfContents() { - const tableOfContents = useStore(state => state.tableOfContents) || []; - return { - tableOfContents - }; -} diff --git a/packages/theme/package.json b/packages/theme/package.json index 2e289222..f5fed832 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -30,7 +30,6 @@ "scripts": { "build": "npm-run-all --parallel build:*", "build:bundle": "node ./scripts/bundle.mjs", - "build:icons": "node ./scripts/buildIcons.mjs", "build:types": "tsc", "clean": "npx del-cli 'dist/**' && find . -type d -empty -delete", "lint": "eslint --ignore-pattern \"**/__tests__/**\"", @@ -39,19 +38,18 @@ "devDependencies": { "@vanilla-extract/esbuild-plugin": "^2.3.11", "esbuild": "0.23.1", - "typescript": "^4.8.3", + "typescript": "^5.2.2", "fast-glob": "^3.2.7" }, "dependencies": { - "@salt-ds/icons": "^1.12.1", - "@vanilla-extract/css": "^1.6.0", - "@vanilla-extract/css-utils": "^0.1.1", - "@vanilla-extract/sprinkles": "^1.3.0", - "@vanilla-extract/recipes": "^0.2.1", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/css-utils": "^0.1.3", + "@vanilla-extract/sprinkles": "^1.6.1", + "@vanilla-extract/recipes": "^0.5.1", "fast-deep-equal": "^3.1.3" }, "peerDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.46", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/theme/src/baseline/baseline.css.ts b/packages/theme/src/baseline/baseline.css.ts index 7e09bc12..f9be85be 100644 --- a/packages/theme/src/baseline/baseline.css.ts +++ b/packages/theme/src/baseline/baseline.css.ts @@ -1,5 +1,5 @@ import { globalStyle } from '@vanilla-extract/css'; -import { ssrClassName } from '../ssrClassName'; +import { config } from '../config'; globalStyle('html, body', { fontFamily: 'var(--salt-text-fontFamily, "Open Sans")', @@ -16,7 +16,7 @@ globalStyle('*', { boxSizing: 'border-box' }); -globalStyle('p,h1, h2, h3, h4, h5, h6, ul, ol, li, pre', { +globalStyle('p,h1, h2, h3, h4, h5, h6, ul, ol, li, pre, figure', { margin: 0, fontFamily: 'inherit' }); @@ -41,6 +41,6 @@ globalStyle('li > p', { display: 'inline' }); -globalStyle(`.${ssrClassName} svg, .${ssrClassName} img`, { +globalStyle(`.${config.ssrClassName} svg, .${config.ssrClassName} img`, { display: 'none' }); diff --git a/packages/theme/src/color/callout.css.ts b/packages/theme/src/color/callout.css.ts index 0bbe20be..072213dd 100644 --- a/packages/theme/src/color/callout.css.ts +++ b/packages/theme/src/color/callout.css.ts @@ -1,6 +1,5 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; - import { vars } from '../vars.css'; import { bothModeConditions } from './modes'; @@ -54,41 +53,3 @@ export const calloutColor = recipe({ } }); export type CalloutColorVariants = RecipeVariants; - -export const calloutBackgroundColor = recipe({ - variants: { - variant: { - note: calloutColorSprinkles({ - backgroundColor: { - lightMode: vars.color.light.callout.note, - darkMode: vars.color.dark.callout.note - } - }), - important: calloutColorSprinkles({ - backgroundColor: { - lightMode: vars.color.light.callout.important, - darkMode: vars.color.dark.callout.important - } - }), - tip: calloutColorSprinkles({ - backgroundColor: { - lightMode: vars.color.light.callout.tip, - darkMode: vars.color.dark.callout.tip - } - }), - caution: calloutColorSprinkles({ - backgroundColor: { - lightMode: vars.color.light.callout.caution, - darkMode: vars.color.dark.callout.caution - } - }), - warning: calloutColorSprinkles({ - backgroundColor: { - lightMode: vars.color.light.callout.warning, - darkMode: vars.color.dark.callout.warning - } - }) - } - } -}); -export type CalloutBackgroundColorVariants = RecipeVariants; diff --git a/packages/theme/src/config.ts b/packages/theme/src/config.ts index e26ec304..936321e4 100644 --- a/packages/theme/src/config.ts +++ b/packages/theme/src/config.ts @@ -1,7 +1,8 @@ /** Some values we want to make available to the JS code, rather than via CSS vars */ export const config = { appHeader: { height: 44 }, - main: { width: 1128, wideWidth: 1440 } + main: { width: 1128, wideWidth: 1440 }, + ssrClassName: 'mosaic-ssr' }; export type ThemeConfig = typeof config; diff --git a/packages/theme/src/gutter/index.css.ts b/packages/theme/src/gutter/index.css.ts new file mode 100644 index 00000000..65226c87 --- /dev/null +++ b/packages/theme/src/gutter/index.css.ts @@ -0,0 +1,23 @@ +import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; +import { calc } from '@vanilla-extract/css-utils'; + +import { vars } from '../vars.css'; + +export const gutterElement = recipe({ + variants: { + variant: { + anchor: { + marginLeft: vars.space.horizontal.anchor + }, + accent: { + marginLeft: vars.space.horizontal.gutter, + paddingLeft: calc(vars.space.horizontal.gutter) + .multiply(-1) + .subtract(vars.border.width.thick) + .toString() + } + } + } +}); + +export type GutterElementVariants = RecipeVariants; diff --git a/packages/theme/src/icon/index.ts b/packages/theme/src/icon/index.ts deleted file mode 100644 index 838008a0..00000000 --- a/packages/theme/src/icon/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './icons'; diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index a0228d1c..6069fee2 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -11,7 +11,6 @@ import { import { shadow } from './shadow'; import { vars } from './vars.css'; -export * from './ssrClassName'; export { themeClassName, vars } from './vars.css'; export * from './animation'; export * from './blockquote'; @@ -22,11 +21,12 @@ export * from './componentExample'; export * from './config'; export * from './feature'; export * from './grid'; +export * from './gutter/index.css'; export * from './hero'; -export * from './icon'; export * from './impact'; export * from './link'; export * from './list'; +export * from './pre/index.css'; export * from './responsive'; export * from './shadow'; export * from './sidebar'; diff --git a/packages/theme/src/pre/index.css.ts b/packages/theme/src/pre/index.css.ts new file mode 100644 index 00000000..7e350362 --- /dev/null +++ b/packages/theme/src/pre/index.css.ts @@ -0,0 +1,11 @@ +import { globalStyle } from '@vanilla-extract/css'; +import { spaceVars } from '../responsive/vars.css'; + +globalStyle('pre', { + overflowX: 'auto', + padding: `${spaceVars.vertical.x2} ${spaceVars.horizontal.none}` +}); + +globalStyle('pre [data-line]', { + overflowX: 'auto' +}); diff --git a/packages/theme/src/responsive/responsive.css.ts b/packages/theme/src/responsive/responsive.css.ts index 1e0a0363..462387c4 100644 --- a/packages/theme/src/responsive/responsive.css.ts +++ b/packages/theme/src/responsive/responsive.css.ts @@ -1,9 +1,7 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { calc } from '@vanilla-extract/css-utils'; import { breakpoint } from './breakpoint'; -import { vars } from '../vars.css'; +import { spaceVars } from './vars.css'; export const responsiveConditions = { mobile: { '@media': `screen and (min-width: ${breakpoint.mobile}px)` }, @@ -12,114 +10,46 @@ export const responsiveConditions = { desktop: { '@media': `screen and (min-width: ${breakpoint.desktop}px)` } }; -export const marginProperties = defineProperties({ - conditions: responsiveConditions, - defaultCondition: 'mobile', - responsiveArray: ['mobile', 'tablet', 'web', 'desktop'], - properties: { - marginTop: vars.space.vertical, - marginRight: vars.space.horizontal, - marginBottom: vars.space.vertical, - marginLeft: vars.space.horizontal - }, - shorthands: { - margin: ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'], - marginX: ['marginLeft', 'marginRight'], - marginY: ['marginTop', 'marginBottom'] - } -}); - -export const paddingProperties = defineProperties({ - conditions: responsiveConditions, - defaultCondition: 'mobile', - responsiveArray: ['mobile', 'tablet', 'web', 'desktop'], - properties: { - paddingTop: vars.space.vertical, - paddingRight: vars.space.horizontal, - paddingBottom: vars.space.vertical, - paddingLeft: vars.space.horizontal - }, - shorthands: { - padding: ['paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight'], - paddingX: ['paddingLeft', 'paddingRight'], - paddingY: ['paddingTop', 'paddingBottom'] - } -}); - -export const positionProperties = defineProperties({ - conditions: responsiveConditions, - defaultCondition: 'mobile', - responsiveArray: ['mobile', 'tablet', 'web', 'desktop'], - properties: { - top: vars.space.vertical, - right: vars.space.horizontal, - bottom: vars.space.vertical, - left: vars.space.horizontal - } -}); - export const responsiveProperties = defineProperties({ conditions: responsiveConditions, defaultCondition: 'mobile', responsiveArray: ['mobile', 'tablet', 'web', 'desktop'], properties: { + // margin + marginTop: spaceVars.vertical, + marginRight: spaceVars.horizontal, + marginBottom: spaceVars.vertical, + marginLeft: spaceVars.horizontal, + // padding + paddingTop: spaceVars.vertical, + paddingRight: spaceVars.horizontal, + paddingBottom: spaceVars.vertical, + paddingLeft: spaceVars.horizontal, + // position + top: spaceVars.vertical, + right: spaceVars.horizontal, + bottom: spaceVars.vertical, + left: spaceVars.horizontal, + // flexbox display: ['none', 'flex', 'initial', 'inherit'], flexDirection: ['row', 'row-reverse', 'column', 'column-reverse'], flexWrap: ['wrap', 'nowrap'], - width: ['100%'] - } -}); - -export const gapProperties = defineProperties({ - conditions: responsiveConditions, - defaultCondition: 'mobile', - responsiveArray: ['mobile', 'tablet', 'web', 'desktop'], - properties: { - columnGap: vars.space.horizontal, - rowGap: vars.space.vertical + width: ['100%'], + // gap + columnGap: spaceVars.horizontal, + rowGap: spaceVars.vertical }, shorthands: { + margin: ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'], + marginX: ['marginLeft', 'marginRight'], + marginY: ['marginTop', 'marginBottom'], + padding: ['paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight'], + paddingX: ['paddingLeft', 'paddingRight'], + paddingY: ['paddingTop', 'paddingBottom'], gap: ['columnGap', 'rowGap'] } }); -export const marginSprinkles = createSprinkles(marginProperties); -export type MarginSprinkles = Parameters[0]; - -export const paddingSprinkles = createSprinkles(paddingProperties); -export type PaddingSprinkles = Parameters[0]; - -export const positioningSprinkles = createSprinkles(positionProperties); -export type PositioningSprinkles = Parameters[0]; - -export const gapSprinkles = createSprinkles(gapProperties); -export type GapSprinkles = Parameters[0]; - -export const responsiveSprinkles = createSprinkles( - marginProperties, - paddingProperties, - positionProperties, - responsiveProperties, - gapProperties -); +export const responsiveSprinkles = createSprinkles(responsiveProperties); export type ResponsiveSprinkles = Parameters[0]; - -export const gutterElement = recipe({ - variants: { - variant: { - anchor: { - marginLeft: vars.space.horizontal.anchor - }, - accent: { - marginLeft: vars.space.horizontal.gutter, - paddingLeft: calc(vars.space.horizontal.gutter) - .multiply(-1) - .subtract(vars.border.width.thick) - .toString() - } - } - } -}); - -export type GutterElementVariants = RecipeVariants; diff --git a/packages/theme/src/typography/action.css.ts b/packages/theme/src/typography/action.css.ts index d25bba1e..81d9d79c 100644 --- a/packages/theme/src/typography/action.css.ts +++ b/packages/theme/src/typography/action.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; -import { vars } from '../vars.css'; +import { responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const actionProperties = defineProperties({ properties: { @@ -31,11 +33,7 @@ const actionProperties = defineProperties({ } }); -export const actionSprinkles = createSprinkles( - actionProperties, - marginProperties, - paddingProperties -); +export const actionSprinkles = createSprinkles(actionProperties); export type ActionSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/amount.css.ts b/packages/theme/src/typography/amount.css.ts index 61d274d0..de2c9efb 100644 --- a/packages/theme/src/typography/amount.css.ts +++ b/packages/theme/src/typography/amount.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; +import { responsiveSprinkles } from '../responsive'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const amountProperties = defineProperties({ properties: { @@ -20,11 +22,7 @@ const amountProperties = defineProperties({ } }); -export const amountSprinkles = createSprinkles( - amountProperties, - marginProperties, - paddingProperties -); +export const amountSprinkles = createSprinkles(amountProperties); export type AmountSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/caption.css.ts b/packages/theme/src/typography/caption.css.ts index daa4cca6..7acc8d84 100644 --- a/packages/theme/src/typography/caption.css.ts +++ b/packages/theme/src/typography/caption.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; -import { vars } from '../vars.css'; +import { responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const captionProperties = defineProperties({ properties: { @@ -29,11 +31,7 @@ const captionProperties = defineProperties({ } }); -export const captionSprinkles = createSprinkles( - captionProperties, - marginProperties, - paddingProperties -); +export const captionSprinkles = createSprinkles(captionProperties); export type CaptionSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/code.css.ts b/packages/theme/src/typography/code.css.ts index 1e4f84af..193e6e57 100644 --- a/packages/theme/src/typography/code.css.ts +++ b/packages/theme/src/typography/code.css.ts @@ -1,9 +1,12 @@ -import { style } from '@vanilla-extract/css'; +import { style, globalStyle } from '@vanilla-extract/css'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { backgroundColor, foregroundColor } from '../color'; +import { spaceVars } from '../responsive/vars.css'; import { neutralBorder } from '../border'; +import { fontSizeVars, fontWeightVars } from './vars.css'; +import { lightMode, darkMode, backgroundColor } from '../color'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; export const code = recipe({ variants: { @@ -11,19 +14,19 @@ export const code = recipe({ variant: { regular: style([ { + fontFamily: 'var(--salt-typography-fontFamily-code)', fontSize: vars.fontSize.s70, - paddingLeft: vars.space.horizontal.x2, - paddingRight: vars.space.horizontal.x2, - whiteSpace: 'nowrap', + paddingLeft: spaceVars.horizontal.x2, + paddingRight: spaceVars.horizontal.x2, + whiteSpace: 'pre-wrap', selectors: { ['code.&']: { fontWeight: vars.fontWeight.light } } }, - neutralBorder({ variant: 'low', borderWidth: 'thin' }), backgroundColor({ variant: 'emphasis' }), - foregroundColor({ variant: 'mid' }) + neutralBorder({ variant: 'low', borderWidth: 'thin' }) ]) } }, @@ -32,3 +35,23 @@ export const code = recipe({ } }); export type CodeVariants = RecipeVariants; + +/** + * Apply correct colors in light/dark mode + * https://rehype-pretty-code.netlify.app/#multiple-themes-dark-and-light-mode + */ +globalStyle( + `${lightMode} code[data-theme*=" "], + ${lightMode} code[data-theme*=" "] span`, + { + color: 'var(--shiki-light)' + } +); + +globalStyle( + `${darkMode} code[data-theme*=" "], + ${darkMode} code[data-theme*=" "] span`, + { + color: 'var(--shiki-dark)' + } +); diff --git a/packages/theme/src/typography/eyebrow.css.ts b/packages/theme/src/typography/eyebrow.css.ts index 1fd19ae0..885e02cb 100644 --- a/packages/theme/src/typography/eyebrow.css.ts +++ b/packages/theme/src/typography/eyebrow.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; +import { responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const eyebrowProperties = defineProperties({ properties: { @@ -20,11 +22,7 @@ const eyebrowProperties = defineProperties({ } }); -export const eyebrowSprinkles = createSprinkles( - eyebrowProperties, - marginProperties, - paddingProperties -); +export const eyebrowSprinkles = createSprinkles(eyebrowProperties); export type EyebrowSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/heading.css.ts b/packages/theme/src/typography/heading.css.ts index db7b148f..a713d1f4 100644 --- a/packages/theme/src/typography/heading.css.ts +++ b/packages/theme/src/typography/heading.css.ts @@ -1,13 +1,11 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { - marginProperties, - paddingProperties, - responsiveConditions, - responsiveSprinkles -} from '../responsive'; +import { spaceVars } from '../responsive/vars.css'; +import { responsiveConditions, responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const headingProperties = defineProperties({ conditions: responsiveConditions, @@ -39,11 +37,7 @@ const headingProperties = defineProperties({ } }); -export const headingSprinkles = createSprinkles( - headingProperties, - marginProperties, - paddingProperties -); +export const headingSprinkles = createSprinkles(headingProperties); export type HeadingSprinkles = Parameters[0]; @@ -110,7 +104,7 @@ export const heading = recipe({ context: 'markdown' }, style: { - marginTop: vars.space.vertical.none + marginTop: spaceVars.vertical.none } }, { @@ -119,7 +113,7 @@ export const heading = recipe({ context: 'markdown' }, style: { - marginTop: vars.space.vertical.none + marginTop: spaceVars.vertical.none } }, { @@ -128,7 +122,7 @@ export const heading = recipe({ context: 'markdown' }, style: { - marginTop: vars.space.vertical.x13 + marginTop: spaceVars.vertical.x13 } }, { @@ -137,7 +131,7 @@ export const heading = recipe({ context: 'markdown' }, style: { - marginTop: vars.space.vertical.x10 + marginTop: spaceVars.vertical.x10 } }, { @@ -146,7 +140,7 @@ export const heading = recipe({ context: 'markdown' }, style: { - marginTop: vars.space.vertical.x10 + marginTop: spaceVars.vertical.x10 } } ], diff --git a/packages/theme/src/typography/paragraph.css.ts b/packages/theme/src/typography/paragraph.css.ts index 405f3821..3f41c558 100644 --- a/packages/theme/src/typography/paragraph.css.ts +++ b/packages/theme/src/typography/paragraph.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; +import { responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const paragraphProperties = defineProperties({ properties: { @@ -29,11 +31,7 @@ const paragraphProperties = defineProperties({ } }); -export const paragraphSprinkles = createSprinkles( - paragraphProperties, - marginProperties, - paddingProperties -); +export const paragraphSprinkles = createSprinkles(paragraphProperties); export type ParagraphSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/subtitle.css.ts b/packages/theme/src/typography/subtitle.css.ts index d44e991c..e46b1583 100644 --- a/packages/theme/src/typography/subtitle.css.ts +++ b/packages/theme/src/typography/subtitle.css.ts @@ -1,8 +1,10 @@ import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; +import { responsiveSprinkles } from '../responsive'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const subtitleProperties = defineProperties({ properties: { @@ -25,11 +27,7 @@ const subtitleProperties = defineProperties({ } }); -export const subtitleSprinkles = createSprinkles( - subtitleProperties, - marginProperties, - paddingProperties -); +export const subtitleSprinkles = createSprinkles(subtitleProperties); export type SubtitleSprinkles = Parameters[0]; diff --git a/packages/theme/src/typography/watermark.css.ts b/packages/theme/src/typography/watermark.css.ts index 9172b22d..38bfbc0e 100644 --- a/packages/theme/src/typography/watermark.css.ts +++ b/packages/theme/src/typography/watermark.css.ts @@ -2,9 +2,11 @@ import { style } from '@vanilla-extract/css'; import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; import { recipe, RecipeVariants } from '@vanilla-extract/recipes'; -import { vars } from '../vars.css'; -import { marginProperties, paddingProperties, responsiveSprinkles } from '../responsive'; +import { responsiveSprinkles } from '../responsive'; import { opacity } from '../opacity'; +import { fontSizeVars, fontWeightVars } from './vars.css'; + +const vars = { fontSize: fontSizeVars, fontWeight: fontWeightVars }; const watermarkProperties = defineProperties({ properties: { @@ -22,11 +24,7 @@ const watermarkProperties = defineProperties({ } }); -export const watermarkSprinkles = createSprinkles( - watermarkProperties, - marginProperties, - paddingProperties -); +export const watermarkSprinkles = createSprinkles(watermarkProperties); export type WatermarkSprinkles = Parameters[0]; diff --git a/packages/types/src/Mode.ts b/packages/types/src/Mode.ts deleted file mode 100644 index f2bae09d..00000000 --- a/packages/types/src/Mode.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Mosaic mode dictates how content is loaded - * - * `active` - * In this mode, content is pulled from configured data sources and updates in real-time. - * After content is updated, Mosaic plugins create an enhanced, in-memory file object, representing the content - * - * `snapshot-file` - * In this mode, previously created snapshot files are loaded from a local directory. - * - * `snapshot-s3` - * In this mode, previously created snapshot files are loaded from an S3 bucket. - * - * (A snapshot is an immutable/persisted copy of `active` content, created separately) - */ -export type MosaicMode = 'active' | 'snapshot-file' | 'snapshot-s3'; diff --git a/packages/store/src/types/appHeader.ts b/packages/types/src/appHeader.ts similarity index 91% rename from packages/store/src/types/appHeader.ts rename to packages/types/src/appHeader.ts index 9d5db600..926a7a52 100644 --- a/packages/store/src/types/appHeader.ts +++ b/packages/types/src/appHeader.ts @@ -1,4 +1,4 @@ -import { SearchIndexSlice } from './searchIndex'; +import type { SearchConfig, SearchIndex } from './searchIndex.js'; /** * [[`MenuItemType`]] defines the type of App header Menu items @@ -76,5 +76,8 @@ export type AppHeaderSlice = { /** Search namespace, suffix used on env variable `process.env.SEARCH_ENDPOINT` to filter search results to a specific namespace. */ searchNamespace?: string; /** Search index, created by SearchIndexPlugin */ - searchIndex?: SearchIndexSlice; + searchIndex?: { + searchIndex?: SearchIndex; + searchConfig?: SearchConfig; + }; }; diff --git a/packages/store/src/types/breadcrumbs.ts b/packages/types/src/breadcrumbs.ts similarity index 61% rename from packages/store/src/types/breadcrumbs.ts rename to packages/types/src/breadcrumbs.ts index 8365db4a..ac5fc04f 100644 --- a/packages/store/src/types/breadcrumbs.ts +++ b/packages/types/src/breadcrumbs.ts @@ -11,11 +11,3 @@ export type Breadcrumb = { /** Breadcrumb label */ label: string; }; - -/** - * [[`BreadcrumbsSlice`]] is the associated [[`Breadcrumb`]] items - */ -export type BreadcrumbsSlice = { - /** Path described in breadcrumbs */ - breadcrumbs: Breadcrumb[]; -}; diff --git a/packages/store/src/types/footer.ts b/packages/types/src/footer.ts similarity index 87% rename from packages/store/src/types/footer.ts rename to packages/types/src/footer.ts index 0cd90f40..da0051f7 100644 --- a/packages/store/src/types/footer.ts +++ b/packages/types/src/footer.ts @@ -1,4 +1,4 @@ -import { HelpLinks } from './helpLinks'; +import { HelpLinks } from './helpLinks.js'; /** * [[`FooterSlice`]] specifies the footer props diff --git a/packages/store/src/types/helpLinks.ts b/packages/types/src/helpLinks.ts similarity index 100% rename from packages/store/src/types/helpLinks.ts rename to packages/types/src/helpLinks.ts diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index aed4209a..f4fcc21e 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -7,6 +7,15 @@ import type { SourceSchedule } from '@jpmorganchase/mosaic-schemas'; +export * from './tableOfContents.js'; +export * from './navigation.js'; +export * from './breadcrumbs.js'; +export * from './sidebar.js'; +export * from './helpLinks.js'; +export * from './appHeader.js'; +export * from './footer.js'; +export * from './sharedConfig.js'; +export * from './searchIndex.js'; export * from './Content.js'; export * from './IFileAccess.js'; export * from './Meta.js'; @@ -17,7 +26,6 @@ export * from './Serialiser.js'; export * from './Source.js'; export * from './Volume.js'; export * from './WorkerData.js'; -export * from './Mode.js'; export * from './Session.js'; export * from './SourceWorkflow.js'; diff --git a/packages/store/src/types/navigation.ts b/packages/types/src/navigation.ts similarity index 86% rename from packages/store/src/types/navigation.ts rename to packages/types/src/navigation.ts index 5e9936cb..fa28324d 100644 --- a/packages/store/src/types/navigation.ts +++ b/packages/types/src/navigation.ts @@ -19,7 +19,3 @@ export type Navigation = { /** previous page in sequence */ prev?: NavigationLink; }; - -export type NavigationSlice = { - navigation?: Navigation; -}; diff --git a/packages/store/src/types/searchIndex.ts b/packages/types/src/searchIndex.ts similarity index 78% rename from packages/store/src/types/searchIndex.ts rename to packages/types/src/searchIndex.ts index 3085cb16..4d20f93a 100644 --- a/packages/store/src/types/searchIndex.ts +++ b/packages/types/src/searchIndex.ts @@ -14,8 +14,3 @@ export type SearchConfig = { threshold?: number; keys?: string[] | { name: string; weight: number }[]; }; - -export type SearchIndexSlice = { - searchIndex?: SearchIndex; - searchConfig?: SearchConfig; -}; diff --git a/packages/store/src/types/sharedConfig.ts b/packages/types/src/sharedConfig.ts similarity index 54% rename from packages/store/src/types/sharedConfig.ts rename to packages/types/src/sharedConfig.ts index 2f3fd8da..d5d70572 100644 --- a/packages/store/src/types/sharedConfig.ts +++ b/packages/types/src/sharedConfig.ts @@ -1,5 +1,5 @@ -import type { AppHeaderSlice } from './appHeader'; -import type { FooterSlice } from './footer'; +import type { AppHeaderSlice } from './appHeader.js'; +import type { FooterSlice } from './footer.js'; export type SharedConfig = { /** Footer props */ @@ -9,7 +9,3 @@ export type SharedConfig = { /** Sidebar props */ sidebar?: Pick; }; - -export type SharedConfigSlice = { - sharedConfig?: SharedConfig; -}; diff --git a/packages/store/src/types/sidebar.ts b/packages/types/src/sidebar.ts similarity index 83% rename from packages/store/src/types/sidebar.ts rename to packages/types/src/sidebar.ts index f7828286..13b6f834 100644 --- a/packages/store/src/types/sidebar.ts +++ b/packages/types/src/sidebar.ts @@ -27,14 +27,6 @@ export interface SidebarGroup { name: string; /** Whether the item is hidden */ hidden: boolean; -} +}; export type SidebarItem = SidebarNode | SidebarGroup; - -/** - * [[`SidebarSlice`]] specifies sidebar content - */ -export type SidebarSlice = { - /** Sidebar items */ - sidebarData: SidebarItem[]; -}; diff --git a/packages/store/src/types/tableOfContents.ts b/packages/types/src/tableOfContents.ts similarity index 100% rename from packages/store/src/types/tableOfContents.ts rename to packages/types/src/tableOfContents.ts diff --git a/tsconfig.bundle.json b/tsconfig.bundle.json index 3d2d1d6e..aec647f4 100644 --- a/tsconfig.bundle.json +++ b/tsconfig.bundle.json @@ -2,7 +2,8 @@ "extends": "./tsconfig", "compilerOptions": { "lib": ["es2022", "DOM", "DOM.iterable"], - "jsx": "react", + "jsx": "react-jsx", + "module": "ESNext", "moduleResolution": "node", "noImplicitAny": false, "emitDeclarationOnly": true, diff --git a/tsconfig.json b/tsconfig.json index cff240f6..3d4f7fd2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,11 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, - "module": "es2022", + "module": "NodeNext", "target": "es2022", "lib": ["es2022"], "esModuleInterop": true, - "moduleResolution": "Node16", + "moduleResolution": "NodeNext", "isolatedModules": true, "sourceMap": true, "declaration": true, diff --git a/turbo.json b/turbo.json index 9145b1d9..c497d88e 100644 --- a/turbo.json +++ b/turbo.json @@ -52,11 +52,8 @@ "//#gen:site": { "cache": false }, - "//#gen:snapshot": { - "outputs": ["./packages/site/public/snapshots/[0-9]*/**"] - }, - "gen:snapshot": { - "outputs": ["./packages/site/public/snapshots/latest/**"] + "export:static": { + "cache": false }, "lint": {}, "lint:fix": {}, @@ -65,6 +62,10 @@ "serve": { "outputs": [] }, + "//#serve:static": {}, + "serve:static": { + "outputs": [] + }, "//#serve:rig": {}, "serve:rig": { "outputs": [] diff --git a/yarn.lock b/yarn.lock index 0fa3b782..f5340df4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,16 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + "@adobe/css-tools@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" @@ -18,7 +28,7 @@ "@apidevtools/json-schema-ref-parser@^10.1.0": version "10.1.0" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz#bf54494039a56fa7f77fed17dc6f01dfde50f64c" - integrity sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA== + integrity sha1-v1RJQDmlb6f3f+0X3G8B395Q9kw= dependencies: "@jsdevtools/ono" "^7.1.3" "@types/json-schema" "^7.0.11" @@ -562,11 +572,12 @@ tslib "^2.6.2" "@aws-sdk/types@^3.222.0": - version "3.254.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.254.0.tgz#760b4a876efa2edcec191dd8b18b989fa717a42e" - integrity sha512-xDEDk6ZAGFO0URPgB6R2mvQANYlojHLjLC9zzOzl07F+uqYS30yZDIg4UFcqPt/x48v7mxlKZpbaZgYI2ZLgGA== + version "3.370.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.370.0.tgz#79e0e4927529c957b5c5c2a00f7590a76784a5e4" + integrity sha1-eeDkknUpyVe1xcKgD3WQp2eEpeQ= dependencies: - tslib "^2.3.1" + "@smithy/types" "^1.1.0" + tslib "^2.5.0" "@aws-sdk/util-arn-parser@3.568.0": version "3.568.0" @@ -586,11 +597,11 @@ tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz#0f598fc238a1256e4bcb64d01459f03a922dd4c3" - integrity sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg== + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" + integrity sha1-sHG68FAwGt7okFEDK9QTm7oyzEA= dependencies: - tslib "^2.3.1" + tslib "^2.5.0" "@aws-sdk/util-user-agent-browser@3.609.0": version "3.609.0" @@ -620,13 +631,6 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8= - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -634,7 +638,7 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.7": +"@babel/code-frame@^7.10.4": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== @@ -642,10 +646,19 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.25.2": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" - integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.25.9": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.9": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" + integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== "@babel/core@^7.23.9": version "7.25.2" @@ -668,63 +681,60 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" - integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== +"@babel/generator@^7.25.0", "@babel/generator@^7.25.9": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" + integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== dependencies: - "@babel/types" "^7.25.6" + "@babel/parser" "^7.26.2" + "@babel/types" "^7.26.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" + jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/helper-plugin-utils@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" @@ -735,20 +745,25 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== "@babel/helpers@^7.25.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" - integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": +"@babel/highlight@^7.16.7": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" integrity sha1-JX3lbuWvvSBFGsCnVoa2tAQlc1E= @@ -767,13 +782,20 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.4", "@babel/parser@^7.25.6": +"@babel/parser@^7.23.9", "@babel/parser@^7.25.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== dependencies: "@babel/types" "^7.25.6" +"@babel/parser@^7.25.0", "@babel/parser@^7.25.9", "@babel/parser@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" + integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== + dependencies: + "@babel/types" "^7.26.0" + "@babel/plugin-syntax-typescript@^7.23.3": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" @@ -790,43 +812,80 @@ regenerator-runtime "^0.13.10" "@babel/runtime-corejs3@^7.20.13", "@babel/runtime-corejs3@^7.20.7", "@babel/runtime-corejs3@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz#bbc769b48edb2bdfd404b65ad1fc3952bf33e3c2" - integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz#e8e625eb3db29491e0326b3aeb9929c43b270ae4" + integrity sha1-6OYl6z2ylJHgMms665kpxDsnCuQ= dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== +"@babel/runtime-corejs3@^7.22.15", "@babel/runtime-corejs3@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.8.tgz#b8aa3d47570bdd08fed77fdfd69542118af0df26" + integrity sha1-uKo9R1cL3Qj+13/f1pVCEYrw3yY= dependencies: + core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.13", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" + regenerator-runtime "^0.13.11" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" - integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== +"@babel/runtime@^7.1.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha1-OPRklMz2zwIL1O7XEktCXoPlI7g= dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.6" - "@babel/parser" "^7.25.6" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.12.1": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha1-V9ZLmuPP8dZ+sGeuEX2sCH9b1Dg= + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.20.7": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.0", "@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.2", "@babel/traverse@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" + integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/template" "^7.25.9" + "@babel/types" "^7.25.9" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.4", "@babel/types@^7.25.6": +"@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" + integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@babel/types@^7.25.4", "@babel/types@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== @@ -835,7 +894,7 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@braintree/sanitize-url@=6.0.2", "@braintree/sanitize-url@^6.0.0": +"@braintree/sanitize-url@=6.0.2", "@braintree/sanitize-url@=7.0.0", "@braintree/sanitize-url@^6.0.0": version "6.0.2" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== @@ -1061,6 +1120,16 @@ human-id "^1.0.2" prettier "^2.7.1" +"@daviereid/next-mdx-remote@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@daviereid/next-mdx-remote/-/next-mdx-remote-4.4.2.tgz#eb3ae1ecc4f9e6f321e56dd364776cfd45956fa8" + integrity sha512-uhQ8PpQSySd3Jw2vI0FvAJ0u+d/XlUJwdeT4clIWjNuuYqQ0sMwtFxwjuO1m1k/m0X01NoI5v/DYxiY569EneQ== + dependencies: + "@mdx-js/mdx" "^3.0.0" + "@mdx-js/react" "^3.0.0" + vfile "^6.0.0" + vfile-matter "^5.0.0" + "@emotion/hash@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" @@ -1186,69 +1255,112 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== -"@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.5.1": +"@eslint-community/regexpp@^4.10.0": version "4.11.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha1-nkKYHvA1vrPdSa3ResuW6P9vOUw= +"@eslint-community/regexpp@^4.6.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" + integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" + integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== + +"@fastify/accept-negotiator@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" + integrity sha1-wcZrO3ccCXQqVN1byHxYL2sGMP8= + "@fastify/ajv-compiler@^3.5.0": version "3.5.0" resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" - integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== + integrity sha1-RZv/AP77+GyW7DDmLpM9I3nkZnA= dependencies: ajv "^8.11.0" ajv-formats "^2.1.1" fast-uri "^2.0.0" +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha1-Bwnp9MslI1HGCcbm2NZ3mo0l7f8= + "@fastify/deepmerge@^1.0.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" - integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A== + integrity sha1-gRaFgQjwx9n9Rg0Fp9Y3oT/jI5o= "@fastify/error@^3.2.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.3.0.tgz#eba790082e1144bfc8def0c2c8ef350064bc537b" - integrity sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.0.tgz#30df6601f4edce57a05ec5caaa90a28025a8554a" + integrity sha1-MN9mAfTtzlegXsXKqpCigCWoVUo= "@fastify/fast-json-stringify-compiler@^4.3.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" - integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== + integrity sha1-XfifpNFZLLuHgPeJmDVf60cWRtU= dependencies: fast-json-stringify "^5.7.0" "@fastify/middie@^8.3.0": version "8.3.0" resolved "https://registry.yarnpkg.com/@fastify/middie/-/middie-8.3.0.tgz#1325e9e4373c98d69366d1e38211337dee1b9ccd" - integrity sha512-h+zBxCzMlkEkh4fM7pZaSGzqS7P9M0Z6rXnWPdUEPfe7x1BCj++wEk/pQ5jpyYY4pF8AknFqb77n7uwh8HdxEA== + integrity sha1-EyXp5Dc8mNaTZtHjghEzfe4bnM0= dependencies: "@fastify/error" "^3.2.0" fastify-plugin "^4.0.0" path-to-regexp "^6.1.0" reusify "^1.0.4" +"@fastify/send@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/send/-/send-2.1.0.tgz#1aa269ccb4b0940a2dadd1f844443b15d8224ea0" + integrity sha1-GqJpzLSwlAotrdH4REQ7FdgiTqA= + dependencies: + "@lukeed/ms" "^2.0.1" + escape-html "~1.0.3" + fast-decode-uri-component "^1.0.1" + http-errors "2.0.0" + mime "^3.0.0" + +"@fastify/static@^6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@fastify/static/-/static-6.11.2.tgz#1fe40c40daf055a28d29db807b459fcff431d9b6" + integrity sha1-H+QMQNrwVaKNKduAe0Wfz/Qx2bY= + dependencies: + "@fastify/accept-negotiator" "^1.0.0" + "@fastify/send" "^2.0.0" + content-disposition "^0.5.3" + fastify-plugin "^4.0.0" + glob "^8.0.1" + p-limit "^3.1.0" + "@fastify/websocket@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@fastify/websocket/-/websocket-8.2.0.tgz#2f5785a88e8188bff9cc17821d5d3d09458a6714" @@ -1264,6 +1376,13 @@ dependencies: "@floating-ui/utils" "^0.2.3" +"@floating-ui/core@^1.6.0": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" + integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== + dependencies: + "@floating-ui/utils" "^0.2.8" + "@floating-ui/dom@^1.0.0": version "1.6.6" resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.6.tgz#be54c1ab2d19112ad323e63dbeb08185fed0ffd3" @@ -1272,6 +1391,21 @@ "@floating-ui/core" "^1.0.0" "@floating-ui/utils" "^0.2.3" +"@floating-ui/dom@^1.2.1": + version "1.6.12" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" + integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/react-dom@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-1.3.0.tgz#4d35d416eb19811c2b0e9271100a6aa18c1579b3" + integrity sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g== + dependencies: + "@floating-ui/dom" "^1.2.1" + "@floating-ui/react-dom@^2.0.6", "@floating-ui/react-dom@^2.1.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" @@ -1279,6 +1413,15 @@ dependencies: "@floating-ui/dom" "^1.0.0" +"@floating-ui/react@^0.23.0": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.23.1.tgz#04da0621b042e02fdead26a7accd291f3134fc83" + integrity sha512-OCc2ViQOBUKOGcE9NLAbpyqB+8Zz92IKIhxgz7XAkynKkVzcVSKtkWOcgyvO4SAzB2OybgRwk3WdzdzDRdh2QQ== + dependencies: + "@floating-ui/react-dom" "^1.3.0" + aria-hidden "^1.1.3" + tabbable "^6.0.1" + "@floating-ui/react@^0.26.5": version "0.26.18" resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.18.tgz#4231c9e76a88212524fce783007ca7fc3e7630fa" @@ -1302,67 +1445,72 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.3.tgz#506fcc73f730affd093044cb2956c31ba6431545" integrity sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww== -"@fluentui/keyboard-keys@^9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@fluentui/keyboard-keys/-/keyboard-keys-9.0.3.tgz#e7ab9592b38466a071994a43edfc84bfe830ae79" - integrity sha512-40KBVJ9HzsvmPL3rwYaAvxCacNS0xnTmOt6TLxxrAVgVrZ1X7DLgd8OGFZcWROs0dhHdCk2D51bl4nK8Q1r3mQ== +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + +"@fluentui/keyboard-keys@^9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@fluentui/keyboard-keys/-/keyboard-keys-9.0.4.tgz#486d94ae3908f44fd11ebb496ca3e4b31163f32e" + integrity sha1-SG2UrjkI9E/RHrtJbKPksxFj8y4= dependencies: - "@swc/helpers" "^0.4.14" + "@swc/helpers" "^0.5.1" -"@fluentui/priority-overflow@^9.1.3": - version "9.1.3" - resolved "https://registry.yarnpkg.com/@fluentui/priority-overflow/-/priority-overflow-9.1.3.tgz#430ab8054160ad4c61c8ff814a3143969bedd9e5" - integrity sha512-enc0HxrnXfRqKectOZ+LWBbYjN1vpENKnbSuyh2SeDwW8JpRC+oMsCHyRcf43hXZbAqllr60HggnQc6gvqJPRg== +"@fluentui/priority-overflow@^9.1.5": + version "9.1.5" + resolved "https://registry.yarnpkg.com/@fluentui/priority-overflow/-/priority-overflow-9.1.5.tgz#1cab1cc9baac1048d67b702649f9b662a1b9968e" + integrity sha1-HKscybqsEEjWe3AmSfm2YqG5lo4= dependencies: - "@swc/helpers" "^0.4.14" + "@swc/helpers" "^0.5.1" -"@fluentui/react-context-selector@^9.1.27": - version "9.1.27" - resolved "https://registry.yarnpkg.com/@fluentui/react-context-selector/-/react-context-selector-9.1.27.tgz#eff469598e7cbcfc7f7aab39365d5741c0fdd7f0" - integrity sha512-l6YypPlNQRtGkavDJTXqdZbQCpS69L7/1mx8GU5aqzcWYyfUyfP4Y0lPpgXjlm1dvHnz/5k6gprEB0dWkfCpxA== +"@fluentui/react-context-selector@^9.1.34": + version "9.1.34" + resolved "https://registry.yarnpkg.com/@fluentui/react-context-selector/-/react-context-selector-9.1.34.tgz#85a2711be17cf56cc2ee32764c4c5d50b3e02e7e" + integrity sha1-haJxG+F89WzC7jJ2TExdULPgLn4= dependencies: - "@fluentui/react-utilities" "^9.11.0" - "@swc/helpers" "^0.4.14" + "@fluentui/react-utilities" "^9.13.3" + "@swc/helpers" "^0.5.1" "@fluentui/react-overflow@^9.0.19": - version "9.0.26" - resolved "https://registry.yarnpkg.com/@fluentui/react-overflow/-/react-overflow-9.0.26.tgz#240f3f231e7776dae030d86c75f13e1024f13a98" - integrity sha512-TB0x+gvDKHFQj/GpZldvFJ3QuFWoygd4cZuiKFUTU00i2C/WCLN37nGJ8/JxTP4+JeSIV/jYmkE8+be7rP/TLw== - dependencies: - "@fluentui/priority-overflow" "^9.1.3" - "@fluentui/react-context-selector" "^9.1.27" - "@fluentui/react-theme" "^9.1.11" - "@fluentui/react-utilities" "^9.11.0" + version "9.0.33" + resolved "https://registry.yarnpkg.com/@fluentui/react-overflow/-/react-overflow-9.0.33.tgz#9c282e1c150208ad11e0f08c6c64e56294012a32" + integrity sha1-nCguHBUCCK0R4PCMbGTlYpQBKjI= + dependencies: + "@fluentui/priority-overflow" "^9.1.5" + "@fluentui/react-context-selector" "^9.1.34" + "@fluentui/react-theme" "^9.1.12" + "@fluentui/react-utilities" "^9.13.3" "@griffel/react" "^1.5.14" - "@swc/helpers" "^0.4.14" + "@swc/helpers" "^0.5.1" -"@fluentui/react-theme@^9.1.11": - version "9.1.11" - resolved "https://registry.yarnpkg.com/@fluentui/react-theme/-/react-theme-9.1.11.tgz#58afe321998ac13615307d47d7f6150d5b825d9e" - integrity sha512-4rjYtMONBB1KZ4AdhuT7QVc4OZ2tMlhuk8BtqNrlX9C4C7NzsEWvKfuIX05e9yCBKnOeVuscsIUfGr7zJvhwdA== +"@fluentui/react-theme@^9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@fluentui/react-theme/-/react-theme-9.1.12.tgz#f38da07a04eb80adf79ff85679effab9bcd88dc4" + integrity sha1-842gegTrgK33n/hWee/6ubzYjcQ= dependencies: - "@fluentui/tokens" "1.0.0-alpha.8" - "@swc/helpers" "^0.4.14" + "@fluentui/tokens" "1.0.0-alpha.9" + "@swc/helpers" "^0.5.1" -"@fluentui/react-utilities@^9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@fluentui/react-utilities/-/react-utilities-9.11.0.tgz#926eea60175698c696b1d96e9c467303b4cf9a09" - integrity sha512-+lK8OU7jX5QFNfvMPwekQk9NPStETi3rHknb7S9oSEhXAnKFvH7L8Jp9LD+/CCeKrbkoGUX4t8AyDgBhtgx40g== +"@fluentui/react-utilities@^9.13.3": + version "9.13.3" + resolved "https://registry.yarnpkg.com/@fluentui/react-utilities/-/react-utilities-9.13.3.tgz#3c7c5037a0e50e4c7f6bdd85e5d8f853fb27d087" + integrity sha1-PHxQN6DlDkx/a92F5dj4U/sn0Ic= dependencies: - "@fluentui/keyboard-keys" "^9.0.3" - "@swc/helpers" "^0.4.14" + "@fluentui/keyboard-keys" "^9.0.4" + "@swc/helpers" "^0.5.1" -"@fluentui/tokens@1.0.0-alpha.8": - version "1.0.0-alpha.8" - resolved "https://registry.yarnpkg.com/@fluentui/tokens/-/tokens-1.0.0-alpha.8.tgz#83463604a8eb114bc977cf220105cb0f36af9fd3" - integrity sha512-4n3/DRdD0MzojsOLJterivLdnzsrIuVy+z5LMPuG2gxzbx06E19XJgZU9tqlqCFESJ/xUFREL6dQKEluw1c0Kw== +"@fluentui/tokens@1.0.0-alpha.9": + version "1.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/@fluentui/tokens/-/tokens-1.0.0-alpha.9.tgz#cf9cf2675eb7e57b6986331d8eff72b677128a30" + integrity sha1-z5zyZ1635XtphjMdjv9ytncSijA= dependencies: - "@swc/helpers" "^0.4.14" + "@swc/helpers" "^0.5.1" "@griffel/core@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@griffel/core/-/core-1.14.1.tgz#1efe8f5cd5c4b348636264061c3a6cf4040b08f4" - integrity sha512-KQ6yueap1zff9TJrn7MdfSAHDMDVP6Ec97gnpCi4NOeKiyCyT13MwPCmkkK0o/poaV1f9MdHhUTQZCpK0QtxzQ== + integrity sha1-Hv6PXNXEs0hjYmQGHDps9AQLCPQ= dependencies: "@emotion/hash" "^0.9.0" "@griffel/style-types" "^1.0.1" @@ -1374,7 +1522,7 @@ "@griffel/react@^1.5.14": version "1.5.14" resolved "https://registry.yarnpkg.com/@griffel/react/-/react-1.5.14.tgz#ea58ebd82007d421d16da49b7e57eccba391d609" - integrity sha512-/x6cy6xMtpow1r+Zrw/hMKHwo+imFAgKaZ3A/+M8GyT3L9AFxK1Kyg4JvARPjLBAn9Q2q5dkCr78jOguuVSScg== + integrity sha1-6ljr2CAH1CHRbaSbflfsy6OR1gk= dependencies: "@griffel/core" "^1.14.1" tslib "^2.1.0" @@ -1382,23 +1530,28 @@ "@griffel/style-types@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@griffel/style-types/-/style-types-1.0.1.tgz#4e7bca38d54c7371114309a5697869099a693e84" - integrity sha512-nhVryiNHhoBt5L93tfDYGoE4KtWvhBvY7y1yR1n6WKpRjasgw3GI2pBwiMiVt68bycnyvXIvcJjJTr0QM22VLQ== + integrity sha1-TnvKONVMc3ERQwmlaXhpCZppPoQ= dependencies: csstype "^3.1.2" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha1-FAeWfUxu7Nc4j4Os8er00Mbljvk= +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha1-tSBSnsIdjllFoYUd/Rwy6U45/0U= + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@icons/material@^0.2.4": version "0.2.4" @@ -1468,14 +1621,31 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg= -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + jest-get-type "^29.6.3" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" @@ -1486,36 +1656,26 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha1-tkYfsMKWQ1bEaeEV9QTJWtl6uIw= +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1524,14 +1684,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha1-3P4+lfIkyP6XqHpSNd7+yZmqkuo= - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jsdevtools/ono@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" @@ -1738,6 +1890,11 @@ "@lexical/offset" "0.17.1" lexical "0.17.1" +"@lukeed/ms@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.1.tgz#3c2bbc258affd9cc0e0cc7828477383c73afa6ee" + integrity sha1-PCu8JYr/2cwODMeChHc4PHOvpu4= + "@manypkg/find-root@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" @@ -1760,7 +1917,7 @@ globby "^11.0.0" read-yaml-file "^1.1.0" -"@mdx-js/mdx@^3.0.1": +"@mdx-js/mdx@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.0.1.tgz#617bd2629ae561fdca1bb88e3badd947f5a82191" integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA== @@ -1789,13 +1946,35 @@ unist-util-visit "^5.0.0" vfile "^6.0.0" -"@mdx-js/react@^3.0.1": +"@mdx-js/react@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.0.1.tgz#997a19b3a5b783d936c75ae7c47cfe62f967f746" integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== dependencies: "@types/mdx" "^2.0.0" +"@mswjs/cookies@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.2.tgz#b4e207bf6989e5d5427539c2443380a33ebb922b" + integrity sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g== + dependencies: + "@types/set-cookie-parser" "^2.4.0" + set-cookie-parser "^2.4.6" + +"@mswjs/interceptors@^0.17.5": + version "0.17.10" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.17.10.tgz#857b41f30e2b92345ed9a4e2b1d0a08b8b6fcad4" + integrity sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw== + dependencies: + "@open-draft/until" "^1.0.3" + "@types/debug" "^4.1.7" + "@xmldom/xmldom" "^0.8.3" + debug "^4.3.3" + headers-polyfill "3.2.5" + outvariant "^1.2.1" + strict-event-emitter "^0.2.4" + web-encoding "^1.1.5" + "@mswjs/interceptors@^0.29.0": version "0.29.1" resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.29.1.tgz#e77fc58b5188569041d0440b25c9e9ebb1ccd60a" @@ -1808,62 +1987,76 @@ outvariant "^1.2.1" strict-event-emitter "^0.5.1" -"@next/env@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.7.tgz#40fcd6ccdd53fd7e6788a0604f39032c84bea112" - integrity sha512-OTx9y6I3xE/eih+qtthppwLytmpJVPM5PPoJxChFsbjIEFXIayG0h/xLzefHGJviAa3Q5+Fd+9uYojKkHDKxoQ== - -"@next/eslint-plugin-next@14.2.8", "@next/eslint-plugin-next@^14.0.0": - version "14.2.8" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.8.tgz#eccae5b08b323b2be24cced6188394e8716890ed" - integrity sha512-ue5vcq9Fjk3asACRDrzYjcGMEN7pMMDQ5zUD+FenkqvlPCVUD1x7PxBNOLfPYDZOrk/Vnl4GHmjj2mZDqPW8TQ== - dependencies: - glob "10.3.10" - -"@next/swc-darwin-arm64@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.7.tgz#6cd39ba5d5f43705de44e389d4b4f5d2df391927" - integrity sha512-UhZGcOyI9LE/tZL3h9rs/2wMZaaJKwnpAyegUVDGZqwsla6hMfeSj9ssBWQS9yA4UXun3pPhrFLVnw5KXZs3vw== - -"@next/swc-darwin-x64@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.7.tgz#a1d191a293443cf8df9451b8f13a348caa718cb7" - integrity sha512-ys2cUgZYRc+CbyDeLAaAdZgS7N1Kpyy+wo0b/gAj+SeOeaj0Lw/q+G1hp+DuDiDAVyxLBCJXEY/AkhDmtihUTA== - -"@next/swc-linux-arm64-gnu@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.7.tgz#9da3f993b3754b900fe7b469de51898fc51112f2" - integrity sha512-2xoWtE13sUJ3qrC1lwE/HjbDPm+kBQYFkkiVECJWctRASAHQ+NwjMzgrfqqMYHfMxFb5Wws3w9PqzZJqKFdWcQ== - -"@next/swc-linux-arm64-musl@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.7.tgz#f75662bdedd2d91ad7e05778274fa17659f1f02f" - integrity sha512-+zJ1gJdl35BSAGpkCbfyiY6iRTaPrt3KTl4SF/B1NyELkqqnrNX6cp4IjjjxKpd64/7enI0kf6b9O1Uf3cL0pw== - -"@next/swc-linux-x64-gnu@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.7.tgz#3c6c5b551a5af4fc8178bd5733c8063266034e79" - integrity sha512-m6EBqrskeMUzykBrv0fDX/28lWIBGhMzOYaStp0ihkjzIYJiKUOzVYD1gULHc8XDf5EMSqoH/0/TRAgXqpQwmw== - -"@next/swc-linux-x64-musl@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.7.tgz#16f92f00263d1fce91ae80e5f230eb1feea484e4" - integrity sha512-gUu0viOMvMlzFRz1r1eQ7Ql4OE+hPOmA7smfZAhn8vC4+0swMZaZxa9CSIozTYavi+bJNDZ3tgiSdMjmMzRJlQ== - -"@next/swc-win32-arm64-msvc@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.7.tgz#1224cb8a04cd9caad785a2187df9e85b49414a42" - integrity sha512-PGbONHIVIuzWlYmLvuFKcj+8jXnLbx4WrlESYlVnEzDsa3+Q2hI1YHoXaSmbq0k4ZwZ7J6sWNV4UZfx1OeOlbQ== - -"@next/swc-win32-ia32-msvc@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.7.tgz#9494aaf9cc50ddef600f8c1b2ed0f216b19f9294" - integrity sha512-BiSY5umlx9ed5RQDoHcdbuKTUkuFORDqzYKPHlLeS+STUWQKWziVOn3Ic41LuTBvqE0TRJPKpio9GSIblNR+0w== - -"@next/swc-win32-x64-msvc@14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.7.tgz#75e1d90758cb10a547e1cdfb878871da28123682" - integrity sha512-pxsI23gKWRt/SPHFkDEsP+w+Nd7gK37Hpv0ngc5HpWy2e7cKx9zR/+Q2ptAUqICNTecAaGWvmhway7pj/JLEWA== +"@next/bundle-analyzer@14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-14.0.0.tgz#40b1681ec9958cb17da44a81584ffefc70d1e70f" + integrity sha512-a1Wbs0eXCMj30vxTfaGEO4DP3NjrqN+ge6rMhKZ43VtsXEjiVX95d7XFr7VkNps9lvlkofBF54RnIHhTJ2Ls0Q== + dependencies: + webpack-bundle-analyzer "4.7.0" + +"@next/env@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0" + integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA== + +"@next/eslint-plugin-next@14.0.0", "@next/eslint-plugin-next@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.0.tgz#b299e61292b8abede7ecb37499feb817385801e6" + integrity sha512-Ye37nNI09V3yt7pzuzSQtwlvuJ2CGzFszHXkcTHHZgNr7EhTMFLipn3VSJChy+e5+ahTdNApPphc3qCPUsn10A== + dependencies: + glob "7.1.7" + +"@next/mdx@^14.0.0": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-14.0.3.tgz#2b6727e36e06d688ff8417486855dc63c6320326" + integrity sha512-RhiANppBndB7ELjPc3SEdEywLWgsy69Vj1bJtfDWqCl8yIVX9aps1D7kwby1pBAweHvZVpiI91Xu/78citVQrQ== + dependencies: + source-map "^0.7.0" + +"@next/swc-darwin-arm64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz#db1a05eb88c0224089b815ad10ac128ec79c2cdb" + integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A== + +"@next/swc-darwin-x64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz#a3f8af05b5f9a52ac3082e66ac29e125ab1d7b9c" + integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA== + +"@next/swc-linux-arm64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz#4e63f43879285b52554bfd39e6e0cc78a9b27bbf" + integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA== + +"@next/swc-linux-arm64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz#ebdaed26214448b1e6f2c3e8b3cd29bfba387990" + integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw== + +"@next/swc-linux-x64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz#19e3bcc137c3b582a1ab867106817e5c90a20593" + integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w== + +"@next/swc-linux-x64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz#794a539b98e064169cf0ff7741b2a4fb16adec7d" + integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ== + +"@next/swc-win32-arm64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz#eda9fa0fbf1ff9113e87ac2668ee67ce9e5add5a" + integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A== + +"@next/swc-win32-ia32-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz#7c1190e3f640ab16580c6bdbd7d0e766b9920457" + integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw== + +"@next/swc-win32-x64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz#2be4e39ee25bfbd85be78eea17c0e7751dc4323c" + integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1878,7 +2071,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= @@ -1886,11 +2079,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nolyfill/is-core-module@1.0.39": - version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" - integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== - "@octokit/auth-token@^5.0.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" @@ -1968,6 +2156,11 @@ is-node-process "^1.2.0" outvariant "^1.4.0" +"@open-draft/until@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" + integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== + "@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" @@ -1993,6 +2186,11 @@ optionalDependencies: fsevents "2.3.2" +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.24" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== + "@rollup/rollup-android-arm-eabi@4.21.2": version "4.21.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz#0412834dc423d1ff7be4cb1fc13a86a0cd262c11" @@ -2073,15 +2271,21 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz#e4291e3c1bc637083f87936c333cdbcad22af63b" integrity sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA== -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - "@rushstack/eslint-patch@^1.3.3": - version "1.10.4" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" - integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== + version "1.5.1" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz#5f1b518ec5fa54437c0b7c4a821546c64fed6922" + integrity sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA== + +"@salt-ds/core@^1.13.3": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@salt-ds/core/-/core-1.13.3.tgz#f57ba2fdd5927782338ec2ed7250d5d403783e3b" + integrity sha512-C/i3b74fNC87+dLqZlmvotLQIIlacV3tmZyBXW0njUtrhnHKnQ5X8lP2d5p3Y8P7xSSt9iRNs0dbpS91WDKmBw== + dependencies: + "@floating-ui/react" "^0.23.0" + "@salt-ds/icons" "^1.9.1" + "@salt-ds/styles" "^0.2.1" + "@salt-ds/window" "^0.1.1" + clsx "^2.0.0" "@salt-ds/core@^1.33.0": version "1.33.0" @@ -2103,6 +2307,15 @@ "@salt-ds/window" "^0.1.1" clsx "^2.0.0" +"@salt-ds/icons@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@salt-ds/icons/-/icons-1.9.1.tgz#f3b8902d41d6b2e316d1cecc9e9f649c65458c1f" + integrity sha512-ck1tL+vmBFUziFKB973pVLcLLvZIh5N1gDwS1dwm9DRKefXSS0ZtaB4KjrYvw/7LhVG8rqrcwtCSmvqo/3M4rg== + dependencies: + "@salt-ds/styles" "^0.2.1" + "@salt-ds/window" "^0.1.1" + clsx "^2.0.0" + "@salt-ds/lab@1.0.0-alpha.50": version "1.0.0-alpha.50" resolved "https://registry.yarnpkg.com/@salt-ds/lab/-/lab-1.0.0-alpha.50.tgz#b414f258ba345eccf2a2c6c1ca43ff556d321840" @@ -2141,55 +2354,23 @@ "@salt-ds/window@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@salt-ds/window/-/window-0.1.1.tgz#1c26ab1b3e7457d271b2dd8a58bfbb423aee2cbe" - integrity sha512-DKVRbu7YeHdqFECGhC4W3KOF1eWCyGkFyZUEUNZyK4bvPLK1NI8z5JoxGU70dLVsFgjhk4wj3i1MmAVhdXu4lA== + integrity sha1-HCarGz50V9Jxst2KWL+7QjruLL4= + +"@shikijs/core@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.1.1.tgz#0268aaf411f382aee9b3092253af73469e5ae7cd" + integrity sha512-WSHuW0i4W04+UZgim378oxHBAp4S5X3hVI2zXh+t5v2fx2u/7QXz9VNisoOD/CA4O9Lc6Zs97TrKiDbWyZua6Q== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^5.2.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha1-OALd0hpQqUm2ch3dcto25n5/Gy0= - dependencies: - type-detect "4.0.8" - -"@sinonjs/commons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" - integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" - integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== - dependencies: - "@sinonjs/commons" "^2.0.0" - -"@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/samsam@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" - integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== - dependencies: - "@sinonjs/commons" "^2.0.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" - -"@sinonjs/text-encoding@^0.7.1": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" - integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== - "@smithy/abort-controller@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" @@ -2515,6 +2696,13 @@ "@smithy/util-stream" "^3.1.3" tslib "^2.6.2" +"@smithy/types@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.1.1.tgz#949394a22e13e7077471bae0d18c146e5f62c456" + integrity sha1-lJOUoi4T5wd0cbrg0YwUbl9ixFY= + dependencies: + tslib "^2.5.0" + "@smithy/types@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.3.0.tgz#fae037c733d09bc758946a01a3de0ef6e210b16b" @@ -2683,7 +2871,7 @@ "@swagger-api/apidom-ast@^0.70.0": version "0.70.0" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ast/-/apidom-ast-0.70.0.tgz#8665af62ab8b6b02c7851429d2fe15dc4780e188" - integrity sha512-zQ1RUkXjx5NPYv1bmkoXwlQi7oJC7DJqYi0syTQKswJZDbOkHCwz8cDP/YystOEOL+yyIN7i5EQBIHfy5yAMmA== + integrity sha1-hmWvYquLawLHhRQp0v4V3EeA4Yg= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@types/ramda" "~0.29.1" @@ -2692,10 +2880,23 @@ stampit "^4.3.2" unraw "^2.0.1" +"@swagger-api/apidom-ast@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ast/-/apidom-ast-0.92.0.tgz#58faf1bbc88fa161cabe40fa16bd837f3570fd28" + integrity sha1-WPrxu8iPoWHKvkD6Fr2DfzVw/Sg= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-error" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + unraw "^3.0.0" + "@swagger-api/apidom-core@>=0.70.1 <1.0.0", "@swagger-api/apidom-core@^0.70.1": version "0.70.1" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-core/-/apidom-core-0.70.1.tgz#7982e46da071a3bc7560ffee3c1590f1f176861a" - integrity sha512-doE6escw5LYVxIp5/lfdeNC8jF39JohKeYQ/YuH5wbo5T06uy8nZ3VxcjPHymmQmLlHdEegUIiirp7dSZFZlIg== + integrity sha1-eYLkbaBxo7x1YP/uPBWQ8fF2hho= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-ast" "^0.70.0" @@ -2706,10 +2907,32 @@ short-unique-id "^4.4.4" stampit "^4.3.2" +"@swagger-api/apidom-core@>=0.90.0 <1.0.0", "@swagger-api/apidom-core@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-core/-/apidom-core-0.92.0.tgz#44bb5d58f0a551ec7529617df10a23093eac2a06" + integrity sha1-RLtdWPClUex1KWF98QojCT6sKgY= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@types/ramda" "~0.29.6" + minim "~0.23.8" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + short-unique-id "^5.0.2" + stampit "^4.3.2" + +"@swagger-api/apidom-error@>=0.90.0 <1.0.0", "@swagger-api/apidom-error@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-error/-/apidom-error-0.92.0.tgz#a5e93e98f689cf346b9d3d12ea31e20bb67376b1" + integrity sha1-pek+mPaJzzRrnT0S6jHiC7ZzdrE= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-json-pointer@>=0.70.1 <1.0.0", "@swagger-api/apidom-json-pointer@^0.70.1": version "0.70.1" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.70.1.tgz#bcf72aa550bf06471fca01eca708bdcaf625cf43" - integrity sha512-9NyeflCD0Vy8rce3Eag/Xdu2SGF4nr/mnQ6/vb4VbV9pID12z6EbBWvF9p9l0/sRdA6IePj39B3uBLcPl5b4Dg== + integrity sha1-vPcqpVC/BkcfygHspwi9yvYlz0M= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2717,10 +2940,22 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-json-pointer@>=0.90.0 <1.0.0", "@swagger-api/apidom-json-pointer@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.92.0.tgz#68188d7e1ae2988b9a8c0107e7201b9545a77764" + integrity sha1-aBiNfhrimIuajAEH5yAblUWnd2Q= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-ns-api-design-systems@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.70.3.tgz#dc72c042f76633887f0abdff614842e0623e2e14" - integrity sha512-61qffrU0AX/7DxaQ6eFz+gSChlI/6dRU8YaBi4N38ZrwaMkRm/ksy8VWUoMcs2qHrqWh8vBijnpKBXi9JHNGKA== + integrity sha1-3HLAQvdmM4h/Cr3/YUhC4GI+LhQ= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2730,10 +2965,24 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-api-design-systems@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.92.0.tgz#b99dc79b96a9b444e20ccb45aec49b0aa16e8996" + integrity sha1-uZ3Hm5aptETiDMtFrsSbCqFuiZY= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-asyncapi-2@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.70.3.tgz#8cda28a72ee560c3fac3fdf3d488d875e5a823d7" - integrity sha512-Z2xhws7MfclZ2IzFjsfohpRueTZBde6x0GGtWC3dmgq506IhYpA+cpGYUpGHgwzdwLJOzLdwXnafuuXIoVkvJw== + integrity sha1-jNoopy7lYMP6w/3z1IjYdeWoI9c= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2743,10 +2992,23 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-asyncapi-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.92.0.tgz#872fc6ef5548bacb88b3c3550ac7350e12830331" + integrity sha1-hy/G71VIusuIs8NVCsc1DhKDAzE= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-json-schema-draft-7" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-json-schema-draft-4@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.70.3.tgz#5ac39828ac14fb4d547374069c41f8321e3390bb" - integrity sha512-y/WJTQCzm59p8wVPb034AcydzgXNEOVdh+S/OGuHJ+HYUFmVT5NWvBGWC7Ikc9ixXN0v585dzq1QvE2T7H0ZfQ== + integrity sha1-WsOYKKwU+01Uc3QGnEH4Mh4zkLs= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-ast" "^0.70.0" @@ -2756,10 +3018,23 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-json-schema-draft-4@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.92.0.tgz#11c6fede3eef005efe8b5c9d61001d24916b7633" + integrity sha1-Ecb+3j7vAF7+i1ydYQAdJJFrdjM= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.92.0" + "@swagger-api/apidom-core" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-json-schema-draft-6@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.70.3.tgz#97ab3cbc45258500d893980c056517d689da2ba2" - integrity sha512-6u6fB9LIM3z+K9miAAWsOT13LOCQc5G0d/lkRSpVSendvgAWpOCEx1BSgiIoURwkcBl2FB46vYyXefolxTOK7w== + integrity sha1-l6s8vEUlhQDYk5gMBWUX1onaK6I= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2769,10 +3044,24 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-json-schema-draft-6@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.92.0.tgz#59c37e8064c72b5e88939d71b6abd6a8312a94c4" + integrity sha1-WcN+gGTHK16Ik51xtqvWqDEqlMQ= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-ns-json-schema-draft-4" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-json-schema-draft-7@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.70.3.tgz#6e1b27b7b7fe6611715b44efd753c775d3b070fc" - integrity sha512-fVTxhfuHieXyEL4BwoQidXNGAkXjO9N8QekfUpdYDKLxs7Sq80itPZxlq/fbagomS+Q1n5LYfB5h2n5lLOGJDQ== + integrity sha1-bhsnt7f+ZhFxW0Tv11PHddOwcPw= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2782,10 +3071,38 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-json-schema-draft-7@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.92.0.tgz#7d833b1b8b968aa16c8313a8594ed8b309758d3f" + integrity sha1-fYM7G4uWiqFsgxOoWU7Yswl1jT8= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-ns-json-schema-draft-6" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-openapi-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-0.92.0.tgz#b61cc851f21fc14fcc58fef15a0bea0ab57b87e6" + integrity sha1-thzIUfIfwU/MWP7xWgvqCrV7h+Y= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-ns-json-schema-draft-4" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-openapi-3-0@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.70.3.tgz#5d5594accb1ae856c3aa5c357e526c8458eb3568" - integrity sha512-ci5GNSf1cA/Xc2/1Kjlo2u78McevOYsH6+weEPW4JlHa3hMJyi6dlw16yHBRl7lzdxiO0D64+r0JVX0bOBhqyw== + integrity sha1-XVWUrMsa6FbDqlw1flJshFjrNWg= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2795,10 +3112,24 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-openapi-3-0@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.92.0.tgz#f8e9a62cc06e758a7d3b8cc8b030c28f5457281a" + integrity sha1-+OmmLMBudYp9O4zIsDDCj1RXKBo= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-ns-json-schema-draft-4" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-ns-openapi-3-1@>=0.70.2 <1.0.0", "@swagger-api/apidom-ns-openapi-3-1@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.70.3.tgz#411d4233eb7ae9250cdc366d6d8f31a9c246ed1a" - integrity sha512-/AwVei3FJeC4wAnmNMywyK8zjKiP8CzuuA58G9xqWk2asOH2qjppYjaFAE6BeJ7of7juR5+BvdQg1wXYz8sutA== + integrity sha1-QR1CM+t66SUM3DZtbY8xqcJG7Ro= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-ast" "^0.70.0" @@ -2809,10 +3140,37 @@ ramda-adjunct "^4.0.0" stampit "^4.3.2" +"@swagger-api/apidom-ns-openapi-3-1@>=0.90.0 <1.0.0", "@swagger-api/apidom-ns-openapi-3-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.92.0.tgz#3a393c9c56672471233198079a1e15354629dfdd" + integrity sha1-Ojk8nFZnJHEjMZgHmh4VNUYp390= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.92.0" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-workflows-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-0.92.0.tgz#8ee3d51bd0014fcf8dfc0b58ba03d97b8427b9c3" + integrity sha1-juPVG9ABT8+N/AtYugPZe4QnucM= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + "@swagger-api/apidom-parser-adapter-api-design-systems-json@^0.70.4": version "0.70.4" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.70.4.tgz#612350a9a48269305cff3e0c56725605c252cdbc" - integrity sha512-xo7mr8/UgVpqe1AMUbNPRnXM3CDgvIXktz7y1abAbRjJ/qhBWsRHBeqf8KQBJjKfJc58i+yMnDXC8hapZplHeA== + integrity sha1-YSNQqaSCaTBc/z4MVnJWBcJSzbw= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2822,10 +3180,23 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-api-design-systems-json@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.92.0.tgz#9437cae4c06dc8933345830ff1d055eaea314cda" + integrity sha1-lDfK5MBtyJMzRYMP8dBV6uoxTNo= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-api-design-systems" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.70.3.tgz#6ed0cebc67914ba5796c3692e0ef888995bb2b6d" - integrity sha512-DJJjwv3KuL5hnMfQgpD7S2tbwxalyTsjkaFF6uxcIMJRr9hdKKNDkvJkel/r56FE2pp9WCBhP6Wm1JK6PGI3Pg== + integrity sha1-btDOvGeRS6V5bDaS4O+IiZW7K20= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2835,10 +3206,23 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.92.0.tgz#72d97d3cef6d30c30a7de61dbdd67321b1913d59" + integrity sha1-ctl9PO9tMMMKfeYdvdZzIbGRPVk= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-api-design-systems" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2@^0.70.4": version "0.70.4" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.70.4.tgz#245fb13af319303cab2d7f1fdefe787ef5177d94" - integrity sha512-eaqQ/93xxVFM+138AL2z5jODyXJlpf5RNRXrE/HaG3PWLB+a7CN9eCy+czP1E6VgC0Wia1kuYf/Bx9aIgNQ6sQ== + integrity sha1-JF+xOvMZMDyrLX8f3v54fvUXfZQ= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2848,10 +3232,23 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.92.0.tgz#4996bc69e9f7e17a9f4d1b8316429d5373043918" + integrity sha1-SZa8aen34XqfTRuDFkKdU3MEORg= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.70.3.tgz#654c5243c2700309c4a9bc6be13085057513f1dc" - integrity sha512-UQxxPoxWcgp9laW8kOdzd7991/wgYJ2b7lb3XBhmVydRbPM1AD5L3G/zM5ItVBQZIZ398kDX/mfGTKAJr5pJrA== + integrity sha1-ZUxSQ8JwAwnEqbxr4TCFBXUT8dw= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2861,10 +3258,23 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.92.0.tgz#29eef57f3632570cdd4d8e8ba0b22fc8e046c44c" + integrity sha1-Ke71fzYyVwzdTY6LoLIvyOBGxEw= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-json@^0.70.4": version "0.70.4" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.70.4.tgz#8b08640088f19f38a3374aaa7d1dd56be36d0cfd" - integrity sha512-Clr4VHocpdDi/bQ4ZSuhN3Ak3g8oLjKtCqjQO34YDrFrKPD2twznALBdVjIHa9D+g5YJYkAQ+5wOrK5uvo/5lQ== + integrity sha1-iwhkAIjxnzijN0qqfR3Va+NtDP0= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-ast" "^0.70.0" @@ -2877,23 +3287,65 @@ tree-sitter-json "=0.20.0" web-tree-sitter "=0.20.3" -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^0.70.4": - version "0.70.4" - resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.70.4.tgz#96504e559d976f53926d80a5d458e59bc7b5bfe0" - integrity sha512-VfSR/TkB7rN5qAm6nGBrJzGuwhvFH03wojPVtjQEUUlDfmiFK0Snhdzq/65qK8WxSYidIBVgWHEreYif28AhBQ== +"@swagger-api/apidom-parser-adapter-json@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.92.0.tgz#52af0254d3c27f601d6bee5af7f6e78c2b15f939" + integrity sha1-Uq8CVNPCf2Ada+5a9/bnjCsV+Tk= dependencies: "@babel/runtime-corejs3" "^7.20.7" - "@swagger-api/apidom-core" "^0.70.1" - "@swagger-api/apidom-ns-openapi-3-0" "^0.70.3" - "@swagger-api/apidom-parser-adapter-json" "^0.70.4" - "@types/ramda" "~0.29.1" - ramda "~0.29.0" + "@swagger-api/apidom-ast" "^0.92.0" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + tree-sitter "=0.20.4" + tree-sitter-json "=0.20.1" + web-tree-sitter "=0.20.3" + +"@swagger-api/apidom-parser-adapter-openapi-json-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-0.92.0.tgz#ccaac1c6129f284aad40d6ff75a2559cbd3bcd73" + integrity sha1-zKrBxhKfKEqtQNb/daJVnL07zXM= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^0.70.4": + version "0.70.4" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.70.4.tgz#96504e559d976f53926d80a5d458e59bc7b5bfe0" + integrity sha1-llBOVZ2Xb1OSbYCl1Fjlm8e1v+A= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.70.1" + "@swagger-api/apidom-ns-openapi-3-0" "^0.70.3" + "@swagger-api/apidom-parser-adapter-json" "^0.70.4" + "@types/ramda" "~0.29.1" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.92.0.tgz#7115ba14ee1fd303ae0d40f6ee813c14bcd69819" + integrity sha1-cRW6FO4f0wOuDUD27oE8FLzWmBk= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" ramda-adjunct "^4.0.0" "@swagger-api/apidom-parser-adapter-openapi-json-3-1@^0.70.4": version "0.70.4" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.70.4.tgz#a51e8df9842bc0988b089501f4e73dc079933b07" - integrity sha512-XB5owOAI7YtRi7lD1R5vI3zFn7EbjKn/FkSMjC0m4CfienX9f9EkromSWE5i5dQGpCfkpHp/iOJ00xODly1nUQ== + integrity sha1-pR6N+YQrwJiLCJUB9Oc9wHmTOwc= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2903,10 +3355,36 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.92.0.tgz#f72ef7ddd55bd692d856e056795ee338ce0769e4" + integrity sha1-9y733dVb1pLYVuBWeV7jOM4HaeQ= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-0.92.0.tgz#66449fcfc680ccd59c9d1023f407529b27f7e247" + integrity sha1-ZkSfz8aAzNWcnRAj9AdSmyf34kc= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.70.3.tgz#9cfbcaae9c02f0c53f38619f97f8c28c98d1eeb6" - integrity sha512-4vkN+jy4HKYQJc0M7sVD4pqT5n2a7nIwswtHujdMVR2YXXY8RTzBg4DO28qVUoAWUsE0C8Tp+hopDPeCtpYduA== + integrity sha1-nPvKrpwC8MU/OGGfl/jCjJjR7rY= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2916,10 +3394,23 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.92.0.tgz#233ea2e347943c98cb0961ed025f16f6fe8f40f4" + integrity sha1-Iz6i40eUPJjLCWHtAl8W9v6PQPQ= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.70.3.tgz#1ebd92b90e06e1c39f5b9e9777f06f95fc87ca2c" - integrity sha512-4xoyOYrG3YBdr/mjNLzDAIdOxFSYR0gh3lRx3/IVkwmhp0rSVrGdD2hFtgoVrj2MiKR60SUbzcnCXJ4MLVmUbQ== + integrity sha1-Hr2SuQ4G4cOfW56Xd/BvlfyHyiw= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2929,10 +3420,49 @@ ramda "~0.29.0" ramda-adjunct "^4.0.0" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.92.0.tgz#96a4a4f3baeaf2349043ba8bb2b4b5a22717a26b" + integrity sha1-lqSk87rq8jSQQ7qLsrS1oicXoms= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-workflows-json-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-0.92.0.tgz#e31454a5b5a6ec38281a8aa4aeaf430b8fd61db7" + integrity sha1-4xRUpbWm7DgoGoqkrq9DC4/WHbc= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-workflows-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-workflows-yaml-1@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-0.92.0.tgz#c4bde8ebf67f1a7bde3998145830dfa6b81ce245" + integrity sha1-xL3o6/Z/GnveOZgUWDDfprgc4kU= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-ns-workflows-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.0.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2@^0.70.3": version "0.70.3" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.70.3.tgz#a8436c5dc10279f84fe92e5eaeb0798288f4be49" - integrity sha512-e+lGfUfduduIT+nyJtxDFXLqoulvz2sWB9vt+4gmq/SMc0uvFBEcffAeBUOPw4J3d4pMux2eRRzA29YF7/lXng== + integrity sha1-qENsXcECefhP6S5errB5goj0vkk= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-ast" "^0.70.0" @@ -2945,10 +3475,26 @@ tree-sitter-yaml "=0.5.0" web-tree-sitter "=0.20.3" +"@swagger-api/apidom-parser-adapter-yaml-1-2@^0.92.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.92.0.tgz#52cf595aa07289a4eadd1850e58d796e0ff0c59e" + integrity sha1-Us9ZWqByiaTq3RhQ5Y15bg/wxZ4= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.92.0" + "@swagger-api/apidom-core" "^0.92.0" + "@swagger-api/apidom-error" "^0.92.0" + "@types/ramda" "~0.29.6" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + tree-sitter "=0.20.4" + tree-sitter-yaml "=0.5.0" + web-tree-sitter "=0.20.3" + "@swagger-api/apidom-reference@>=0.70.2 <1.0.0": version "0.70.4" resolved "https://registry.yarnpkg.com/@swagger-api/apidom-reference/-/apidom-reference-0.70.4.tgz#5579b8528b0cf80ecf4b60a669032d96c3dee4b9" - integrity sha512-+jrDtbJc7zVqHumyDu1rGXZD3BwrD8qu+FaC7+9iZThU2GAEOs4VvTcCkPQLfVtpIrv1fPvNkzean27MJZxpkw== + integrity sha1-VXm4UosM+A7PS2CmaQMtlsPe5Lk= dependencies: "@babel/runtime-corejs3" "^7.20.7" "@swagger-api/apidom-core" "^0.70.1" @@ -2975,6 +3521,43 @@ "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^0.70.3" "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.70.3" +"@swagger-api/apidom-reference@>=0.90.0 <1.0.0": + version "0.92.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-reference/-/apidom-reference-0.92.0.tgz#11054a13e438bf15736200c6826cae845c12e465" + integrity sha1-EQVKE+Q4vxVzYgDGgmyuhFwS5GU= + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.92.0" + "@types/ramda" "~0.29.6" + axios "^1.4.0" + minimatch "^7.4.3" + process "^0.11.10" + ramda "~0.29.1" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + optionalDependencies: + "@swagger-api/apidom-error" "^0.92.0" + "@swagger-api/apidom-json-pointer" "^0.92.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.92.0" + "@swagger-api/apidom-ns-openapi-2" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.92.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.92.0" + "@swagger-api/apidom-ns-workflows-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-json" "^0.92.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml" "^0.92.0" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-json" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-json-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-0" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-2" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0" "^0.92.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-workflows-json-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-workflows-yaml-1" "^0.92.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.92.0" + "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" @@ -2995,6 +3578,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.1": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" + integrity sha1-heoMdkULYa19EKNwUCie3teDwn0= + dependencies: + tslib "^2.4.0" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -3016,6 +3606,35 @@ lz-string "^1.5.0" pretty-format "^27.0.2" +"@testing-library/dom@^8.5.0": + version "8.20.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" + integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.16.5": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" + integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== + dependencies: + "@adobe/css-tools" "^4.0.1" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + "@testing-library/jest-dom@^6.0.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" @@ -3029,6 +3648,15 @@ lodash "^4.17.21" redent "^3.0.0" +"@testing-library/react@^13.4.0": + version "13.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" + "@testing-library/react@^16.0.0": version "16.0.1" resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.0.1.tgz#29c0ee878d672703f5e7579f239005e4e0faa875" @@ -3053,12 +3681,17 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + "@types/cookie@^0.6.0": version "0.6.0" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== -"@types/debug@^4.0.0": +"@types/debug@^4.0.0", "@types/debug@^4.1.7": version "4.1.7" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" integrity sha1-fMDqdhUJEkcJuLLRCQ2PbBeq24I= @@ -3102,6 +3735,13 @@ "@types/unist" "*" "@types/hast@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.3.tgz#7f75e6b43bc3f90316046a287d9ad3888309f7e1" + integrity sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ== + dependencies: + "@types/unist" "*" + +"@types/hast@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== @@ -3111,7 +3751,7 @@ "@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + integrity sha1-ESSq/lEYy1kZd66xzqrtEHDrA58= dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" @@ -3135,10 +3775,42 @@ dependencies: ci-info "^3.1.0" -"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.12": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha1-hGfUs8CHgF1jWASAiQeRJ3zjXEQ= + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha1-kVP+mLuivVZaY63ZQ21vDX+EaP8= + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*": + version "29.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.3.tgz#f5fd88e43e5a9e4221ca361e23790d48fcf0a211" + integrity sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/js-levenshtein@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" + integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== + +"@types/json-schema@^7.0.11": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha1-1w+rpwOdX8pUyDx9urQQUdK29ss= "@types/json5@^0.0.29": version "0.0.29" @@ -3155,7 +3827,7 @@ "@types/lodash.clonedeep@^4.5.7": version "4.5.7" resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz#0e119f582ed6f9e6b373c04a644651763214f197" - integrity sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw== + integrity sha1-DhGfWC7W+eazc8BKZEZRdjIU8Zc= dependencies: "@types/lodash" "*" @@ -3228,10 +3900,15 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae" integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== -"@types/node@^17.0.24": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha1-LA+v14cF56GLeQa1IBpSJxncUZA= +"@types/node@^18.0.0": + version "18.18.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.4.tgz#519fef47a13cf869be290c20fc6ae9b7fe887aa7" + integrity sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ== + +"@types/node@^18.15.3": + version "18.16.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" + integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== "@types/node@^18.7.19": version "18.11.10" @@ -3250,22 +3927,24 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE= -"@types/prismjs@^1.26.0": - version "1.26.4" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.4.tgz#1a9e1074619ce1d7322669e5b46fbe823925103a" - integrity sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg== - "@types/prop-types@*": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/ramda@~0.29.1": - version "0.29.3" - resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.29.3.tgz#6e4d4066df900a3456cf402bcef9b78b6990a754" - integrity sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q== +"@types/ramda@~0.29.1", "@types/ramda@~0.29.6": + version "0.29.12" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.29.12.tgz#fd8a23849176c6c1b3510243b64084c067e6a48f" + integrity sha512-sgIEjpJhdQPB52gDF4aphs9nl0xe54CR22DPdWqT8gQHjZYmVApgA0R3/CpMbl0Y8az2TEZrPNL2zy0EvjbkLA== dependencies: - types-ramda "^0.29.4" + types-ramda "^0.29.10" + +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18": + version "18.2.18" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" + integrity sha1-FpRubNQ5cSVth0vD0KcgdLuFcd0= + dependencies: + "@types/react" "*" "@types/react-window@^1.8.2": version "1.8.8" @@ -3274,10 +3953,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.0.26": - version "18.0.26" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" - integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== +"@types/react@*", "@types/react@^18.2.46": + version "18.2.46" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.46.tgz#f04d6c528f8f136ea66333bc66abcae46e2680df" + integrity sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3293,22 +3972,17 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/sinon@^10.0.10": - version "10.0.13" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.13.tgz#60a7a87a70d9372d0b7b38cc03e825f46981fb83" - integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== +"@types/set-cookie-parser@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" + integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== dependencies: - "@types/sinonjs__fake-timers" "*" + "@types/node" "*" -"@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/statuses@^2.0.4": version "2.0.5" @@ -3332,10 +4006,17 @@ "@types/swagger-ui-react@^4.18.0": version "4.18.0" resolved "https://registry.yarnpkg.com/@types/swagger-ui-react/-/swagger-ui-react-4.18.0.tgz#6668a7f44c825f9dbd46e3ecb8a9a40f745ce861" - integrity sha512-XtvFXmj46Zibe89tFQwSQknrq1NxEtOep2rZuxth7K88tyPEP00FnoA6H7ATYhocAEA4XUWaNHNFWFRl1KX8aQ== + integrity sha1-Zmin9EyCX529RuPsuKmkD3Rc6GE= dependencies: "@types/react" "*" +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" + integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== + dependencies: + "@types/jest" "*" + "@types/through@*": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" @@ -3361,7 +4042,7 @@ "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + integrity sha1-tnJdX0rySs4zs2+v0pUTbnVQn0M= "@types/uuid@^8.3.4": version "8.3.4" @@ -3380,22 +4061,17 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" - integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/type-utils" "7.2.0" - "@typescript-eslint/utils" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== + dependencies: + "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.0.0": version "7.18.0" @@ -3412,15 +4088,15 @@ natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" - integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.5.tgz#8d7ca3d1fbd9d5a58cc4d30b2aa797a760137886" + integrity sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw== dependencies: - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/typescript-estree" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" debug "^4.3.4" "@typescript-eslint/parser@^7.0.0": @@ -3434,6 +4110,14 @@ "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" +"@typescript-eslint/scope-manager@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711" + integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A== + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/scope-manager@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" @@ -3442,14 +4126,6 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/scope-manager@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" - integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - "@typescript-eslint/type-utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" @@ -3460,25 +4136,28 @@ debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/type-utils@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz#7be5c30e9b4d49971b79095a1181324ef6089a19" - integrity sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA== - dependencies: - "@typescript-eslint/typescript-estree" "7.2.0" - "@typescript-eslint/utils" "7.2.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" +"@typescript-eslint/types@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790" + integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ== "@typescript-eslint/types@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/types@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" - integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== +"@typescript-eslint/typescript-estree@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39" + integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg== + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" @@ -3494,20 +4173,6 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" - integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - "@typescript-eslint/utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" @@ -3518,18 +4183,13 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/utils@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" - integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== +"@typescript-eslint/visitor-keys@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1" + integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/typescript-estree" "7.2.0" - semver "^7.5.4" + "@typescript-eslint/types" "6.7.5" + eslint-visitor-keys "^3.4.1" "@typescript-eslint/visitor-keys@7.18.0": version "7.18.0" @@ -3539,14 +4199,6 @@ "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" - integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== - dependencies: - "@typescript-eslint/types" "7.2.0" - eslint-visitor-keys "^3.4.1" - "@ungap/structured-clone@^1.0.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -3559,12 +4211,29 @@ dependencies: "@babel/core" "^7.23.9" -"@vanilla-extract/css-utils@^0.1.1": +"@vanilla-extract/css-utils@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@vanilla-extract/css-utils/-/css-utils-0.1.3.tgz#cadeb6bc563547b20e9b903647d8b334d3a79ef8" integrity sha512-PZAcHROlgtCUGI2y0JntdNwvPwCNyeVnkQu6KTYKdmxBbK3w72XJUmLFYapfaFfgami4I9CTLnrJTPdtmS3gpw== -"@vanilla-extract/css@^1.16.0", "@vanilla-extract/css@^1.6.0": +"@vanilla-extract/css@^1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.14.0.tgz#45fab9c04d893e3e363cf2cde7559d21233b7f63" + integrity sha512-rYfm7JciWZ8PFzBM/HDiE2GLnKI3xJ6/vdmVJ5BSgcCZ5CxRlM9Cjqclni9lGzF3eMOijnUhCd/KV8TOzyzbMA== + dependencies: + "@emotion/hash" "^0.9.0" + "@vanilla-extract/private" "^1.0.3" + chalk "^4.1.1" + css-what "^6.1.0" + cssesc "^3.0.0" + csstype "^3.0.7" + deep-object-diff "^1.1.9" + deepmerge "^4.2.2" + media-query-parser "^2.0.2" + modern-ahocorasick "^1.0.0" + outdent "^0.8.0" + +"@vanilla-extract/css@^1.16.0": version "1.16.0" resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.16.0.tgz#d88276a7beae8953024b9b8dc4ae127dd6f9ab3a" integrity sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg== @@ -3607,20 +4276,25 @@ vite "^5.0.11" vite-node "^1.2.0" +"@vanilla-extract/private@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.3.tgz#7ec72bc2ff6fe51f9d650f962e8d1989b073690f" + integrity sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ== + "@vanilla-extract/private@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== -"@vanilla-extract/recipes@^0.2.1": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.2.5.tgz#40314b6db7319707303cccfb2c7200d919c313a8" - integrity sha512-OWXUUiFJdswD3+Xg8f8avuw/vAHZRFS4oHqFeoV1TcO8cfbDQ0zmkreBHvyspoJU+qsyWK48yPHKSptqNRPy9Q== +"@vanilla-extract/recipes@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.5.1.tgz#617d1a0375af60835341770397810317d2f61998" + integrity sha512-7dCuBgPQQ/89siQ0w2lkfjgkmToPUUDzFlHf5DRmt9ykiiycfA52tmPJ2RI/mr7jXi7U/vEN2aGP9QJSXEpGlA== -"@vanilla-extract/sprinkles@^1.3.0": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.5.1.tgz#3e226e99c597af8bfeafc8f76a7a720b210a29cf" - integrity sha512-xPYpeEZEC1mhiPqWCBPGdIHkpFaaQIbaAfG9W2JyIW0byqTP7CoaxdYNMPjhZuoV5lkTI14SJg8Bt+fZqmV5yQ== +"@vanilla-extract/sprinkles@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.6.1.tgz#2c8a832757a0d8104dc6bd5d961db2c70d1dbdcb" + integrity sha512-N/RGKwGAAidBupZ436RpuweRQHEFGU+mvAqBo8PRMAjJEmHoPDttV8RObaMLrJHWLqvX+XUMinHUnD0hFRQISw== "@vitest/coverage-istanbul@^2.1.4": version "2.1.4" @@ -3697,38 +4371,68 @@ loupe "^3.1.2" tinyrainbow "^1.2.0" +"@xmldom/xmldom@^0.8.3": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +"@zxing/text-encoding@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" + integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + integrity sha1-6vVNU7YrrkE46AnKIlyEOabvs5I= dependencies: event-target-shim "^5.0.0" abstract-logging@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" - integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + integrity sha1-aww3HfIS23EptX0uf88oK4vxyDk= -acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: +acorn-jsx@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns= -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" + integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== + +acorn@^8.0.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +acorn@^8.0.4: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -acorn@^8.0.0, acorn@^8.12.1: +acorn@^8.12.1: version "8.14.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -3762,11 +4466,11 @@ aggregate-error@^4.0.0: ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + integrity sha1-bmaUAGWet0lzu/LjMycYCgmWtSA= dependencies: ajv "^8.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= @@ -3779,17 +4483,7 @@ ajv@^6.10.0, ajv@^6.12.4: ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha1-l36R3ZbKZp9UoR4j43jjO4hKVl8= + integrity sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE= dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3842,11 +4536,6 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -3858,7 +4547,7 @@ anymatch@~3.1.2: archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" @@ -3879,7 +4568,21 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@5.3.0: +aria-hidden@^1.1.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" + +aria-query@5.1.3, aria-query@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +aria-query@5.3.0, aria-query@^5.1.3: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== @@ -3894,12 +4597,13 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -aria-query@^5.0.0, aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== dependencies: - deep-equal "^2.0.5" + call-bind "^1.0.2" + is-array-buffer "^3.0.1" array-buffer-byte-length@^1.0.1: version "1.0.1" @@ -3931,46 +4635,21 @@ array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" -array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== +array.prototype.findlastindex@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5: version "1.3.0" @@ -3982,7 +4661,7 @@ array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -3992,17 +4671,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -4012,7 +4681,7 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.4: +array.prototype.tosorted@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== @@ -4023,6 +4692,19 @@ array.prototype.tosorted@^1.1.4: es-errors "^1.3.0" es-shim-unscopables "^1.0.2" +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" @@ -4052,11 +4734,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -4067,6 +4744,13 @@ astring@^1.8.0: resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.3.tgz#1a0ae738c7cc558f8e5ddc8e3120636f5cebcb85" integrity sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4080,7 +4764,7 @@ at-least-node@^1.0.0: atomic-sleep@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + integrity sha1-64W3emAfyTLP5DLFrNNkqeLJB1s= attr-accept@^2.0.0: version "2.2.2" @@ -4109,35 +4793,26 @@ available-typed-arrays@^1.0.7: avvio@^8.2.1: version "8.2.1" resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.2.1.tgz#b5a482729847abb84d5aadce06511c04a0a62f82" - integrity sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw== + integrity sha1-taSCcphHq7hNWq3OBlEcBKCmL4I= dependencies: archy "^1.0.0" debug "^4.0.0" fastq "^1.6.1" -aws-sdk-client-mock@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/aws-sdk-client-mock/-/aws-sdk-client-mock-2.0.1.tgz#c37ec569fa88688d8d88d7a7f028af26d6d2086e" - integrity sha512-Ib/AnI8ZdoIxOBbKSs28TUwJb7FI/AYVYn48PcXx6guk5fBs4GZJJEc+Ci9aImRtVmgO6jHN/6Etz17fr6j3qw== - dependencies: - "@types/sinon" "^10.0.10" - sinon "^14.0.2" - tslib "^2.1.0" - -axe-core@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" - integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== - axe-core@^4.4.3: version "4.5.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.0.tgz#6efe2ecdba205fcc9d7ddb3d48c2cf630f70eb5e" integrity sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A== +axe-core@^4.6.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" + integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g== + axios@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" - integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha1-OKe/EiTNMI3icRRgOLVR1yXwvh8= dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -4148,10 +4823,12 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -axobject-query@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" - integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" bail@^2.0.0: version "2.0.2" @@ -4188,7 +4865,7 @@ binary-extensions@^2.0.0: bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -4197,7 +4874,7 @@ bl@^4.0.3, bl@^4.1.0: bowser@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + integrity sha1-XKPDV1enqldxUAxwpzqfke9CCo8= brace-expansion@^1.1.7: version "1.1.11" @@ -4210,7 +4887,7 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + integrity sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4= dependencies: balanced-match "^1.0.0" @@ -4228,15 +4905,15 @@ breakword@^1.0.5: dependencies: wcwidth "^1.0.1" -browserslist@^4.23.1: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.24.0: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" node-releases "^2.0.18" - update-browserslist-db "^1.1.0" + update-browserslist-db "^1.1.1" buffer@^5.5.0: version "5.7.1" @@ -4249,7 +4926,7 @@ buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + integrity sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY= dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" @@ -4292,7 +4969,16 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: +call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha1-b6K3hFzg6km/TYue9kcnosLi5RM= + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -4345,10 +5031,15 @@ camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646: - version "1.0.30001655" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" - integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== +caniuse-lite@^1.0.30001579: + version "1.0.30001617" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== + +caniuse-lite@^1.0.30001669: + version "1.0.30001677" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" + integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== capital-case@^1.0.4: version "1.0.4" @@ -4375,6 +5066,14 @@ chai@^5.1.2: loupe "^3.1.0" pathval "^2.0.0" +chalk@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4479,6 +5178,21 @@ check-links@^2.0.0: p-map "^5.5.0" p-memoize "^7.1.1" +chokidar@^3.4.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -4497,7 +5211,7 @@ chokidar@^3.5.3: chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= ci-info@^3.1.0, ci-info@^3.2.0: version "3.5.0" @@ -4514,6 +5228,11 @@ classnames@^2.2.5, classnames@^2.3.1: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha1-undMYUvg8BbaEFyFjnFZ6ujnaHs= + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -4569,7 +5288,7 @@ cli-width@^4.1.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== -client-only@0.0.1: +client-only@0.0.1, client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== @@ -4612,9 +5331,9 @@ clone@^1.0.2: integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clsx@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha1-EmWPP9mPr+YgdVlaXDDkPRjz0As= collapse-white-space@^2.0.0: version "2.1.0" @@ -4667,7 +5386,7 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@7, commander@^4.0.0, commander@^9.3.0, commander@^9.4.0, commander@^9.4.1: +commander@7, commander@^7.2.0, commander@^9.3.0, commander@^9.4.0, commander@^9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== @@ -4715,6 +5434,13 @@ constant-case@^3.0.4: tslib "^2.0.3" upper-case "^2.0.2" +content-disposition@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha1-i4K076yCUSoCuwsdzsnSxejrW/4= + dependencies: + safe-buffer "5.2.1" + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -4725,7 +5451,7 @@ cookie-signature@^1.1.0: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.0.tgz#4deed303f5f095e7a02c979e3fcb19157f5eaeea" integrity sha512-R0BOPfLGTitaKhgKROKZQN6iyq2iDQcH1DOF8nJoaWapguX5bC2w+Q/I9NmmM5lfcvEarnLZr+cCvmEYYSXvYA== -cookie@^0.4.0: +cookie@^0.4.0, cookie@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== @@ -4735,6 +5461,11 @@ cookie@^0.5.0, cookie@~0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha1-0fXXGt7GVYxY84mYfDZqpH6ZT4s= +cookie@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha1-J5iwSwcbDsv/DbtipQWo76ThkFE= + copy-to-clipboard@^3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" @@ -4748,9 +5479,9 @@ core-js-pure@^3.25.1: integrity sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA== core-js-pure@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2" - integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.1.tgz#73d154958881873bc19381df80bddb20c8d0cdb5" + integrity sha1-c9FUlYiBhzvBk4HfgL3bIMjQzbU= cors@^2.8.5: version "2.8.5" @@ -4774,13 +5505,6 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" -cross-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" - integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== - dependencies: - node-fetch "^2.6.12" - cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -4845,7 +5569,7 @@ csstype@^3.0.2, csstype@^3.0.7: csstype@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + integrity sha1-HUv51XLxHBQDHwQ24cELwfVx9Qs= csv-generate@^3.4.3: version "3.4.3" @@ -5169,7 +5893,7 @@ date-fns@^2.16.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" integrity sha1-lXDWVvX8ExQ+UMl1o7a760bNCLI= -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU= @@ -5190,7 +5914,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1, debug@^4.3.5, debug@^4.3.7: +debug@^4.1.0, debug@^4.3.1, debug@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -5293,7 +6017,7 @@ deepmerge@^4.2.2: deepmerge@^4.3.1, deepmerge@~4.3.0: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + integrity sha1-RLXyFHzTsA1LVhN2hZZvJv0l3Uo= defaults@^1.0.3: version "1.0.4" @@ -5307,7 +6031,25 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.4: +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha1-w1980KsJiDSA0SrFyyE3FVh4ALM= + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -5367,6 +6109,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + dequal@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" @@ -5385,7 +6132,7 @@ detect-indent@^6.0.0: detect-libc@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + integrity sha1-4Yl6qI+mrRl4YpN/vARB7zUu4M0= devlop@^1.0.0, devlop@^1.1.0: version "1.1.0" @@ -5394,10 +6141,10 @@ devlop@^1.0.0, devlop@^1.1.0: dependencies: dequal "^2.0.0" -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha1-vFLSmMXqjfkZSAAiREXtQ//IfkA= +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== dir-glob@^3.0.1: version "3.0.1" @@ -5420,7 +6167,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== @@ -5446,7 +6193,12 @@ dompurify@2.4.1: dompurify@=3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.3.tgz#4b115d15a091ddc96f232bcef668550a2f6f1430" - integrity sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ== + integrity sha1-SxFdFaCR3clvIyvO9mhVCi9vFDA= + +dompurify@=3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" + integrity sha1-kl69V21UqVMbXXbwpb7zJUg1Ha4= dot-case@^3.0.4: version "3.0.4" @@ -5480,15 +6232,25 @@ drange@^1.0.2: resolved "https://registry.yarnpkg.com/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" integrity sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA== +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.5.4: - version "1.5.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" - integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== +electron-to-chromium@^1.5.41: + version "1.5.51" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.51.tgz#bb99216fed4892d131a8585a8593b00739310163" + integrity sha512-kKeWV57KSS8jH4alKt/jKnvHPmJgBxXzGUSbMd4eQF+iOsVPl7bz2KUmu6eo80eMP8wVioTfTyTzdMgM15WXNg== + +emoji-regex@^10.2.1: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" @@ -5503,19 +6265,19 @@ emoji-regex@^9.2.2: end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= dependencies: once "^1.4.0" -enhanced-resolve@^5.15.0: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.0, enquirer@^2.3.5: +enquirer@^2.3.0: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -5534,58 +6296,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" @@ -5645,6 +6355,103 @@ es-abstract@^1.20.4: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" + integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.11" + +es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -5671,25 +6478,25 @@ es-get-iterator@^1.1.2: is-string "^1.0.5" isarray "^2.0.5" -es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== +es-iterator-helpers@^1.0.12: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== dependencies: - call-bind "^1.0.7" + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.7" + internal-slot "^1.0.5" iterator.prototype "^1.1.2" - safe-array-concat "^1.1.2" + safe-array-concat "^1.0.1" es-object-atoms@^1.0.0: version "1.0.0" @@ -5698,6 +6505,15 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -5730,15 +6546,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild-node-externals@^1.0.2, esbuild-node-externals@^1.7.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.15.0.tgz#9b7c84877779e46a184115746c51ddd3854237e5" - integrity sha512-lM5f3CQL9Ctv6mBwwYAEMcphK2qrjVRnemT1mufECpFaidZvFVvQDPcuno/MQfLVk4utVuSVxm1RHLyg/ONQ/A== +esbuild-node-externals@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.12.0.tgz#9ae364f332f7ca59cd5f7d6b888946ce56a5e496" + integrity sha512-0rQM4N9QZwnLetzkUCOHj7Dj+YkD2IlHJIO/+3bb/AOAyDPG4D4tSTdli4QjrXRfPIffS5zAUrhxSbeyqmXhAg== dependencies: find-up "^5.0.0" tslib "^2.4.1" -esbuild@0.23.1, esbuild@^0.21.3, "esbuild@npm:esbuild@>=0.17.6 <0.24.0": +esbuild@0.19.11, esbuild@0.23.1, esbuild@^0.21.3, "esbuild@npm:esbuild@>=0.17.6 <0.24.0": version "0.23.1" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== @@ -5773,11 +6589,16 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= -escalade@^3.1.2: +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" @@ -5788,6 +6609,11 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -5820,14 +6646,13 @@ eslint-config-airbnb@^19.0.4: object.entries "^1.1.5" eslint-config-next@^14.0.0: - version "14.2.8" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.8.tgz#7d628d0fb8c19804e25563ed3e290ffeaa9530d8" - integrity sha512-gRqxHkSuCrQro6xqXnmXphcq8rdiw7FI+nLXpWmIlp/AfUzHCgXNQE7mOK+oco+SRaJbhqCg/68uRln1qjkF+Q== + version "14.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.0.tgz#c896867c8f08dab65205fb3b4bcc5d9ab8646d08" + integrity sha512-jtXeE+/pGQ3h9n11QyyuPN50kO13GO5XvjU5ZRq6W+XTpOMjyobWmK2s7aowy0FtzA49krJzYzEU9s1RMwoJ6g== dependencies: - "@next/eslint-plugin-next" "14.2.8" + "@next/eslint-plugin-next" "14.0.0" "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.28.1" @@ -5848,7 +6673,7 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-import-resolver-node@^0.3.9: +eslint-import-resolver-node@^0.3.7: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -5858,17 +6683,16 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.2: - version "3.6.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz#bb8e388f6afc0f940ce5d2c5fd4a3d147f038d9e" - integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== - dependencies: - "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.5" - enhanced-resolve "^5.15.0" - eslint-module-utils "^2.8.1" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" + version "3.6.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" is-glob "^4.0.3" eslint-module-utils@^2.7.3: @@ -5878,10 +6702,10 @@ eslint-module-utils@^2.7.3: dependencies: debug "^3.2.7" -eslint-module-utils@^2.8.1, eslint-module-utils@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz#95d4ac038a68cd3f63482659dffe0883900eb342" - integrity sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ== +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -5913,28 +6737,27 @@ eslint-plugin-import@^2.26.0: tsconfig-paths "^3.14.1" eslint-plugin-import@^2.28.1: - version "2.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" - integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.9.0" - hasown "^2.0.2" - is-core-module "^2.15.1" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" + has "^1.0.3" + is-core-module "^2.13.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" semver "^6.3.1" - tsconfig-paths "^3.15.0" + tsconfig-paths "^3.14.2" eslint-plugin-jsx-a11y@^6.5.1: version "6.6.1" @@ -5956,26 +6779,26 @@ eslint-plugin-jsx-a11y@^6.5.1: semver "^6.3.0" eslint-plugin-jsx-a11y@^6.7.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" - integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== - dependencies: - aria-query "~5.1.3" - array-includes "^3.1.8" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "^4.10.0" - axobject-query "^4.1.0" + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" - hasown "^2.0.2" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" minimatch "^3.1.2" - object.fromentries "^2.0.8" - safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" eslint-plugin-prettier@^4.2.1: version "4.2.1" @@ -5989,84 +6812,40 @@ eslint-plugin-promise@^6.0.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-react-hooks@^4.3.0: +eslint-plugin-react-hooks@^4.3.0, "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": - version "4.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" - integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== - -eslint-plugin-react@7.31.8: - version "7.31.8" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf" - integrity sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - eslint-plugin-react@^7.33.2: - version "7.35.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz#d32500d3ec268656d5071918bfec78cfd8b070ed" - integrity sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.2" - array.prototype.tosorted "^1.1.4" + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" - hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.8" - object.fromentries "^2.0.8" - object.values "^1.2.0" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" - resolve "^2.0.0-next.5" + resolve "^2.0.0-next.4" semver "^6.3.1" - string.prototype.matchall "^4.0.11" - string.prototype.repeat "^1.0.0" + string.prototype.matchall "^4.0.8" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha1-9lMoJZMFknOSyTjtROsKXJsr0wM= + estraverse "^5.2.0" eslint-visitor-keys@^3.3.0: version "3.3.0" @@ -6078,70 +6857,67 @@ eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^7.23.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha1-xtMooUvj+wjI0dIeEsAv23oqgS0= - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" +eslint@^8.51.0: + version "8.51.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" + integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.51.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y= +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha1-IUj/w4uC6McFff7UhCWz5h8PJKU= +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -6152,11 +6928,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= - estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -6193,13 +6964,6 @@ estree-util-to-js@^2.0.0: astring "^1.8.0" source-map "^0.7.0" -estree-util-value-to-estree@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz#d2f0e5d350a6c181673eb7299743325b86a9bf5c" - integrity sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag== - dependencies: - "@types/estree" "^1.0.0" - estree-util-visit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" @@ -6241,7 +7005,7 @@ event-target-polyfill@^0.0.3: event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + integrity sha1-XU0+vflYPWOlMzzi3rdICrKwV4k= events@^3.3.0: version "3.3.0" @@ -6266,13 +7030,24 @@ execa@^6.1.0: expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + integrity sha1-bhSz/O4POmNA7LV9LokYaSBSpHw= expect-type@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== +expect@^29.0.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + expiry-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/expiry-map/-/expiry-map-2.0.0.tgz#b441ee8e8865291ad9a542783076d33bae0f3582" @@ -6309,12 +7084,12 @@ external-editor@^3.0.3, external-editor@^3.1.0: fast-content-type-parse@^1.0.0, fast-content-type-parse@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" - integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== + integrity sha1-QIcWK/WvMpTUcm/ymzNPcuOhCSw= fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + integrity sha1-Rvi2wisw/3qBNX1PWav66TggJUM= fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -6326,7 +7101,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@*, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.2: +fast-glob@*, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -6337,6 +7112,17 @@ fast-glob@*, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^ merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-patch@^3.0.0-1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" @@ -6350,7 +7136,7 @@ fast-json-stable-stringify@^2.0.0: fast-json-stringify@^5.7.0: version "5.8.0" resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.8.0.tgz#b229ed01ac5f92f3b82001a916c31324652f46d7" - integrity sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ== + integrity sha1-sintAaxfkvO4IAGpFsMTJGUvRtc= dependencies: "@fastify/deepmerge" "^1.0.0" ajv "^8.10.0" @@ -6367,19 +7153,19 @@ fast-levenshtein@^2.0.6: fast-querystring@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + integrity sha1-ptJJN7T8b3kbTuMdy29Trq+4n1M= dependencies: fast-decode-uri-component "^1.0.1" fast-redact@^3.1.1: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + integrity sha1-fIPOOnvkiYJBpGVg1R3hD2U/djQ= fast-uri@^2.0.0, fast-uri@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.2.0.tgz#519a0f849bef714aad10e9753d69d8f758f7445a" - integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== + integrity sha1-UZoPhJvvcUqtEOl1PWnY91j3RFo= fast-xml-parser@4.4.1: version "4.4.1" @@ -6391,12 +7177,12 @@ fast-xml-parser@4.4.1: fastify-plugin@^4.0.0, fastify-plugin@^4.5.1: version "4.5.1" resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.1.tgz#44dc6a3cc2cce0988bc09e13f160120bbd91dbee" - integrity sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ== + integrity sha1-RNxqPMLM4JiLwJ4T8WASC72R2+4= fastify@^4.23.2: version "4.23.2" resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.23.2.tgz#7072f04b544540d2523afb4a54d4095d187f5444" - integrity sha512-WFSxsHES115svC7NrerNqZwwM0UOxbC/P6toT9LRHgAAFvG7o2AN5W+H4ihCtOGuYXjZf4z+2jXC89rVEoPWOA== + integrity sha1-cHLwS1RFQNJSOvtKVNQJXRh/VEQ= dependencies: "@fastify/ajv-compiler" "^3.5.0" "@fastify/error" "^3.2.0" @@ -6425,7 +7211,7 @@ fastq@^1.6.0: fastq@^1.6.1: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + integrity sha1-0E0HxqKmj+RZn+qNLhA6k3+uazo= dependencies: reusify "^1.0.4" @@ -6460,7 +7246,7 @@ fill-range@^7.1.1: find-my-way@^7.6.0: version "7.6.2" resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.6.2.tgz#4dd40200d3536aeef5c7342b10028e04cf79146c" - integrity sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw== + integrity sha1-TdQCANNTau71xzQrEAKOBM95FGw= dependencies: fast-deep-equal "^3.1.3" fast-querystring "^1.0.0" @@ -6511,9 +7297,9 @@ flatted@^3.1.0: integrity sha1-dshYT0/IQ9tkcCpr0Eq3qL1mbaM= follow-redirects@^1.15.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha1-tGCGQUS6Y/JoEJbydMTlcCbaLBM= for-each@^0.3.3: version "0.3.3" @@ -6579,7 +7365,7 @@ forwarded@0.2.0: fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + integrity sha1-a+Dem+mYzhavivwkSXue6bfM2a0= fs-extra@^10.1.0: version "10.1.0" @@ -6646,7 +7432,7 @@ function-bind@^1.1.1: function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + integrity sha1-LALYZNl/PqbIgwxGTL0Rq26rehw= function.prototype.name@^1.1.5: version "1.1.5" @@ -6668,11 +7454,6 @@ function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -6686,7 +7467,7 @@ fuse.js@^6.6.2: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" @@ -6711,7 +7492,27 @@ get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" -get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha1-KBt2IpcRI+HvSzyQ/XU5MG2pPzs= + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6744,17 +7545,17 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" -get-tsconfig@^4.7.5: - version "4.8.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.0.tgz#125dc13a316f61650a12b20c97c11b8fd996fedd" - integrity sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw== +get-tsconfig@^4.5.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== dependencies: resolve-pkg-maps "^1.0.0" github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= github-slugger@^1.4.0: version "1.4.0" @@ -6773,18 +7574,26 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob@^10.3.10, glob@^10.4.1: +glob@^10.4.1: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -6808,25 +7617,35 @@ glob@^7.0.0, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha1-04j2Vlk+9wjuPjRkD9+5mp/Rwz4= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha1-OBEyGMkH0vfphlivJGzvi3fpC6w= +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" + define-properties "^1.1.3" globby@^11.0.0, globby@^11.0.1, globby@^11.1.0: version "11.1.0" @@ -6891,7 +7710,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha1-FH06AG2kyjzhRyjHrvwofDZ9emw= -graceful-fs@^4.2.11: +graceful-fs@^4.2.11, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6906,6 +7725,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +"graphql@^15.0.0 || ^16.0.0": + version "16.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" @@ -6916,6 +7740,13 @@ gray-matter@^4.0.3: section-matter "^1.0.0" strip-bom-string "^1.0.0" +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handlebars@^4.4.3: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -6960,6 +7791,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha1-UrowtsXsh/2J+ldLwcORJcb2U0A= + dependencies: + get-intrinsic "^1.2.2" + has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" @@ -6967,7 +7805,12 @@ has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-proto@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== @@ -6998,13 +7841,46 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha1-9MUT1FSle3x+FlB3jeImsRcAVGw= + dependencies: + function-bind "^1.1.2" + +hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +hast-util-from-html@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz#9cd38ee81bf40b2607368b92a04b0905fa987488" + integrity sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.1.0" + hast-util-from-parse5 "^8.0.0" + parse5 "^7.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" + +hast-util-from-parse5@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" + integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + hastscript "^8.0.0" + property-information "^6.0.0" + vfile "^6.0.0" + vfile-location "^5.0.0" + web-namespaces "^2.0.0" + hast-util-heading-rank@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz#2d5c6f2807a7af5c45f74e623498dd6054d2aba8" @@ -7017,19 +7893,31 @@ hast-util-parse-selector@^2.0.0: resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== -hast-util-properties-to-mdx-jsx-attributes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hast-util-properties-to-mdx-jsx-attributes/-/hast-util-properties-to-mdx-jsx-attributes-1.0.0.tgz#c40f9f07b74f9b323c1cf8dc14beb17d4d79d12c" - integrity sha512-MZEdAYiXC8wDBfntAc7syyWHbcg/X1h03DQ7IQ6MKagMttpYhnKqOZR/nia0657Dt2v2vuXB8YuKNExw0Fljew== +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== dependencies: - "@types/estree" "^1.0.0" "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - estree-util-value-to-estree "^3.0.0" - mdast-util-mdx-jsx "^3.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" + +hast-util-raw@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.2.tgz#39b4a4886bd9f0a5dd42e86d02c966c2c152884c" + integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + hast-util-from-parse5 "^8.0.0" + hast-util-to-parse5 "^8.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + parse5 "^7.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" hast-util-to-estree@^3.0.0: version "3.1.0" @@ -7053,6 +7941,24 @@ hast-util-to-estree@^3.0.0: unist-util-position "^5.0.0" zwitch "^2.0.0" +hast-util-to-html@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz#51c0ae2a3550b9aa988c094c4fc4e327af0dddd1" + integrity sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-raw "^9.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + hast-util-to-jsx-runtime@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz#3ed27caf8dc175080117706bf7269404a0aa4f7c" @@ -7074,6 +7980,19 @@ hast-util-to-jsx-runtime@^2.0.0: unist-util-position "^5.0.0" vfile-message "^4.0.0" +hast-util-to-parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + hast-util-to-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz#2a131948b4b1b26461a2c8ac876e2c88d02946bd" @@ -7099,6 +8018,17 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" +hastscript@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" + integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + header-case@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" @@ -7107,6 +8037,16 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" +headers-polyfill@3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed" + integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA== + +headers-polyfill@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.3.0.tgz#67c6ef7b72d4c8cac832ad5936f5b3a56e7b705a" + integrity sha512-5e57etwBpNcDc0b6KCVWEh/Ro063OxPvzVimUdM0/tsYM/T7Hfy3kknIGj78SFTOhNd8AZY41U8mOHoO4LzmIQ== + headers-polyfill@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.3.tgz#922a0155de30ecc1f785bcf04be77844ca95ad07" @@ -7148,16 +8088,27 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= -html-url-attributes@^3.0.0: +html-void-elements@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.0.tgz#fc4abf0c3fb437e2329c678b80abb3c62cff6f08" - integrity sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow== + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" @@ -7231,17 +8182,12 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= - ignore@^5.0.5, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha1-bTusj6f+DUXZ+b57rC/CeVd+NFo= -ignore@^5.2.4, ignore@^5.3.1: +ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -7251,7 +8197,7 @@ immutable@^3.x.x: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= @@ -7282,7 +8228,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= @@ -7290,19 +8236,19 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inline-style-parser@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.3.tgz#e35c5fb45f3a83ed7849fe487336eb7efa25971c" - integrity sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g== +inline-style-parser@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633" + integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== -inquirer@^8.2.2: +inquirer@^8.2.0, inquirer@^8.2.2: version "8.2.5" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== @@ -7332,6 +8278,15 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -7394,7 +8349,7 @@ is-alphanumerical@^2.0.0: is-alphabetical "^2.0.0" is-decimal "^2.0.0" -is-arguments@^1.1.0, is-arguments@^1.1.1: +is-arguments@^1.0.4, is-arguments@^1.1.0, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -7402,6 +8357,15 @@ is-arguments@^1.1.0, is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -7444,23 +8408,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE= - is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha1-76ouqdqg16suoTqXsritUf776L4= -is-bun-module@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.1.0.tgz#a66b9830869437f6cdad440ba49ab6e4dc837269" - integrity sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA== - dependencies: - semver "^7.6.3" - is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -7485,12 +8437,12 @@ is-core-module@^2.11.0: dependencies: has "^1.0.3" -is-core-module@^2.13.0, is-core-module@^2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: - hasown "^2.0.2" + has "^1.0.3" is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.11.0" @@ -7562,7 +8514,7 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-function@^1.0.10: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -7596,11 +8548,6 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -7611,7 +8558,7 @@ is-negative-zero@^2.0.3: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== -is-node-process@^1.2.0: +is-node-process@^1.0.1, is-node-process@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== @@ -7633,7 +8580,7 @@ is-path-cwd@^2.2.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -7685,11 +8632,6 @@ is-set@^2.0.1, is-set@^2.0.2: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -7741,7 +8683,14 @@ is-typed-array@^1.1.10: gopd "^1.0.1" has-tostringtag "^1.0.0" -is-typed-array@^1.1.13: +is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-typed-array@^1.1.13, is-typed-array@^1.1.3: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -7758,11 +8707,6 @@ is-weakmap@^2.0.1: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -7778,14 +8722,6 @@ is-weakset@^2.0.1: call-bind "^1.0.2" get-intrinsic "^1.1.1" -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - is-windows@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -7798,11 +8734,6 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -7871,15 +8802,6 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -7894,6 +8816,58 @@ javascript-stringify@^2.0.1: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jose@^4.10.0, jose@^4.11.4: version "4.15.5" resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.5.tgz#6475d0f467ecd3c630a1b5dadd2735a7288df706" @@ -7904,6 +8878,11 @@ js-file-download@^0.4.12: resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.12.tgz#10c70ef362559a5b23cdbdc3bd6f399c3d91d821" integrity sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg== +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7951,10 +8930,10 @@ jsdom@^25.0.0: ws "^8.18.0" xml-name-validator "^5.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -7986,6 +8965,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stable-stringify@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha1-UtQ2G0fUkWi8xOVkGJpC5adDlFQ= + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json5@^1.0.1, json5@^1.0.2, json5@^2.2.3: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -8009,6 +8998,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha1-KqMRHa49NKDxUcY/OkXZldlCCXg= + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" @@ -8017,7 +9011,7 @@ jsonfile@^6.0.1: array-includes "^3.1.5" object.assign "^4.1.3" -jsx-ast-utils@^3.3.5: +jsx-ast-utils@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -8027,11 +9021,6 @@ jsx-ast-utils@^3.3.5: object.assign "^4.1.4" object.values "^1.1.6" -just-extend@^4.0.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" - integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== - jwt-decode@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" @@ -8066,30 +9055,18 @@ kleur@^4.1.4: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== - language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@^1.0.5: +language-tags@=1.0.5, language-tags@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -8106,7 +9083,7 @@ lexical@0.17.1, lexical@^0.17.1: light-my-request@^5.9.1: version "5.11.0" resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.11.0.tgz#90e446c303b3a47b59df38406d5f5c2cf224f2d1" - integrity sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA== + integrity sha1-kORGwwOzpHtZ3zhAbV9cLPIk8tE= dependencies: cookie "^0.5.0" process-warning "^2.0.0" @@ -8197,7 +9174,7 @@ lodash-es@^4.17.15, lodash-es@^4.17.21: lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= lodash.debounce@^4: version "4.0.8" @@ -8219,12 +9196,7 @@ lodash.startcase@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= @@ -8423,9 +9395,9 @@ mdast-util-from-markdown@^2.0.0: unist-util-stringify-position "^4.0.0" mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" - integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a" + integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== dependencies: "@types/mdast" "^4.0.0" ccount "^2.0.0" @@ -8500,9 +9472,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" - integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz#f73631fa5bb7a36712ff1e9cedec0cafed03401c" + integrity sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -8514,6 +9486,7 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-to-markdown "^2.0.0" parse-entities "^4.0.0" stringify-entities "^4.0.0" + unist-util-remove-position "^5.0.0" unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" @@ -8541,17 +9514,17 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz#468cbbb277375523de807248b8ad969feb02a5c7" + integrity sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA== dependencies: "@types/mdast" "^4.0.0" unist-util-is "^6.0.0" mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + version "13.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz#1ae54d903150a10fe04d59f03b2b95fd210b2124" + integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -8697,9 +9670,9 @@ micromark-core-commonmark@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-directive@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.1.tgz#67b3985bb991a69dbcae52664c57ee54b22f635a" - integrity sha512-VGV2uxUzhEZmaP7NSFo2vtq7M2nUD+WfmYQD+d8i/1nHbzE+rMy9uzTvUybBbNiVbrhOZibg3gbyoARGqgDWyg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz#527869de497a6de9024138479091bc885dae076b" + integrity sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -8710,9 +9683,9 @@ micromark-extension-directive@^3.0.0: parse-entities "^4.0.0" micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz#f1e50b42e67d441528f39a67133eddde2bbabfd9" + integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== dependencies: micromark-util-character "^2.0.0" micromark-util-sanitize-uri "^2.0.0" @@ -8720,9 +9693,9 @@ micromark-extension-gfm-autolink-literal@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz#91afad310065a94b636ab1e9dab2c60d1aab953c" + integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== dependencies: devlop "^1.0.0" micromark-core-commonmark "^2.0.0" @@ -8734,9 +9707,9 @@ micromark-extension-gfm-footnote@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz#6917db8e320da70e39ffbf97abdbff83e6783e61" + integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -8746,9 +9719,9 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-table@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" - integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz#2cf3fe352d9e089b7ef5fff003bdfe0da29649b7" + integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -8764,9 +9737,9 @@ micromark-extension-gfm-tagfilter@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz#ee8b208f1ced1eb9fb11c19a23666e59d86d4838" + integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -8916,9 +9889,9 @@ micromark-factory-whitespace@^2.0.0: micromark-util-types "^2.0.0" micromark-util-character@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.0.1.tgz#52b824c2e2633b6fb33399d2ec78ee2a90d6b298" + integrity sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw== dependencies: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" @@ -9074,6 +10047,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha1-s3RVDco6DBhEOwyVCmpY8ZMc96c= + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -9102,32 +10080,32 @@ min-indent@^1.0.0, min-indent@^1.0.1: minim@~0.23.8: version "0.23.8" resolved "https://registry.yarnpkg.com/minim/-/minim-0.23.8.tgz#a529837afe1654f119dfb68ce7487dd8d4866b9c" - integrity sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww== + integrity sha1-pSmDev4WVPEZ37aM50h92NSGa5w= dependencies: lodash "^4.15.0" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s= dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha1-HPy4z1Ui6mmVLNKvla4JR38SKpY= + dependencies: + brace-expansion "^2.0.1" + minimatch@^7.4.3: version "7.4.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + integrity sha1-hF1vJU2PSl5P1rr0TV8QyESDZfs= dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1, minimatch@^9.0.4: +minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -9151,7 +10129,7 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: minimist@^1.2.3: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + integrity sha1-waRk52kzAuCCoHXO4MBXdBrEdyw= "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" @@ -9163,10 +10141,15 @@ mixme@^0.5.1: resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.4.tgz#8cb3bd0cd32a513c161bf1ca99d143f0bcf2eff3" integrity sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw== -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: +mkdirp-classic@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" + integrity sha1-VMRBzkyWzXeQ4QtBqHqlEGjsqys= + +mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + integrity sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM= mkdirp@^1.0.4: version "1.0.4" @@ -9183,7 +10166,7 @@ mlly@^1.4.2, mlly@^1.7.2: pkg-types "^1.2.0" ufo "^1.5.4" -mock-fs@^5.0.0, mock-fs@^5.2.0: +mock-fs@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.2.0.tgz#3502a9499c84c0a1218ee4bf92ae5bf2ea9b2b5e" integrity sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw== @@ -9198,6 +10181,11 @@ moment-mini@^2.24.0: resolved "https://registry.yarnpkg.com/moment-mini/-/moment-mini-2.29.4.tgz#cbbcdc58ce1b267506f28ea6668dbe060a32758f" integrity sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg== +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -9213,6 +10201,31 @@ ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msw@^0.49.1: + version "0.49.3" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.49.3.tgz#c4ca29eddda3e82ad9e36918dda4a7428eddd7fe" + integrity sha512-kRCbDNbNnRq5LC1H/NUceZlrPAvSrMH6Or0mirIuH69NY84xwDruPn/hkXTovIK1KwDwbk+ZdoSyJlpiekLxEA== + dependencies: + "@mswjs/cookies" "^0.2.2" + "@mswjs/interceptors" "^0.17.5" + "@open-draft/until" "^1.0.3" + "@types/cookie" "^0.4.1" + "@types/js-levenshtein" "^1.1.1" + chalk "4.1.1" + chokidar "^3.4.2" + cookie "^0.4.2" + graphql "^15.0.0 || ^16.0.0" + headers-polyfill "^3.1.0" + inquirer "^8.2.0" + is-node-process "^1.0.1" + js-levenshtein "^1.1.6" + node-fetch "^2.6.7" + outvariant "^1.3.0" + path-to-regexp "^6.2.0" + strict-event-emitter "^0.4.3" + type-fest "^2.19.0" + yargs "^17.3.1" + msw@^2.0.0: version "2.4.1" resolved "https://registry.yarnpkg.com/msw/-/msw-2.4.1.tgz#bb0ead0311de39d5847ff0836b9dd67e7bba02b8" @@ -9245,34 +10258,35 @@ mute-stream@^1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.14.0, nan@^2.14.1, nan@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + integrity sha1-wBUKI2ihgvAz6apRlex26kGhmcs= + +nan@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha1-Jqb6rn/76yk6OWYOiKdrguMLdVQ= nanoclone@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== -nanoid@^3.3.6, nanoid@^3.3.7: +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + integrity sha1-0MMBppG8jVTvoKIibM8/4v1la9g= napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + integrity sha1-sf3cCyxG44Cgt6dvmE3UfEGhOAY= natural-compare@^1.4.0: version "1.4.0" @@ -9299,29 +10313,17 @@ next-auth@^4.24.5: preact-render-to-string "^5.1.19" uuid "^8.3.2" -next-mdx-remote@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-5.0.0.tgz#028a2cf5cf7f814d988d7ab11a401bed0f31b4ee" - integrity sha512-RNNbqRpK9/dcIFZs/esQhuLA8jANqlH694yqoDBK8hkVdJUndzzGmnPHa2nyi90N4Z9VmzuSWNRpr5ItT3M7xQ== - dependencies: - "@babel/code-frame" "^7.23.5" - "@mdx-js/mdx" "^3.0.1" - "@mdx-js/react" "^3.0.1" - unist-util-remove "^3.1.0" - vfile "^6.0.1" - vfile-matter "^5.0.0" - next-router-mock@^0.9.13: version "0.9.13" resolved "https://registry.yarnpkg.com/next-router-mock/-/next-router-mock-0.9.13.tgz#bdee2011ea6c09e490121c354ef917f339767f72" integrity sha512-906n2RRaE6Y28PfYJbaz5XZeJ6Tw8Xz1S6E31GGwZ0sXB6/XjldD1/2azn1ZmBmRk5PQRkzjg+n+RHZe5xQzWA== next@^14.0.0: - version "14.2.7" - resolved "https://registry.yarnpkg.com/next/-/next-14.2.7.tgz#e02d5d9622ff4b998e5c89adfd660c9bf6435970" - integrity sha512-4Qy2aK0LwH4eQiSvQWyKuC7JXE13bIopEQesWE0c/P3uuNRnZCQanI0vsrMLmUQJLAto+A+/8+sve2hd+BQuOQ== + version "14.2.3" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" + integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== dependencies: - "@next/env" "14.2.7" + "@next/env" "14.2.3" "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" @@ -9329,32 +10331,21 @@ next@^14.0.0: postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.2.7" - "@next/swc-darwin-x64" "14.2.7" - "@next/swc-linux-arm64-gnu" "14.2.7" - "@next/swc-linux-arm64-musl" "14.2.7" - "@next/swc-linux-x64-gnu" "14.2.7" - "@next/swc-linux-x64-musl" "14.2.7" - "@next/swc-win32-arm64-msvc" "14.2.7" - "@next/swc-win32-ia32-msvc" "14.2.7" - "@next/swc-win32-x64-msvc" "14.2.7" + "@next/swc-darwin-arm64" "14.2.3" + "@next/swc-darwin-x64" "14.2.3" + "@next/swc-linux-arm64-gnu" "14.2.3" + "@next/swc-linux-arm64-musl" "14.2.3" + "@next/swc-linux-x64-gnu" "14.2.3" + "@next/swc-linux-x64-musl" "14.2.3" + "@next/swc-win32-arm64-msvc" "14.2.3" + "@next/swc-win32-ia32-msvc" "14.2.3" + "@next/swc-win32-x64-msvc" "14.2.3" nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^5.1.2: - version "5.1.4" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" - integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== - dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "^10.0.2" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - path-to-regexp "^1.7.0" - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -9371,10 +10362,15 @@ no-scroll@^2.1.1: node-abi@^3.3.0: version "3.45.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" - integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== + integrity sha1-9WjxY6O/ylqs/OH77uH6LMmEQfU= dependencies: semver "^7.3.5" +node-abort-controller@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha1-qUN36WSpo3rDl22EjLXHZYM7hUg= + node-cookie@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cookie/-/node-cookie-2.1.2.tgz#4327c70e6a9bbe8c8ee86713bd9b534f655ec405" @@ -9384,25 +10380,26 @@ node-cookie@^2.1.2: cookie-signature "^1.1.0" simple-encryptor "^3.0.0" -node-domexception@1.0.0: +node-domexception@1.0.0, node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@2.6.7: +node-fetch-commonjs@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz#0dd0fd4c4a314c5234f496ff7b5d9ce5a6c8feaa" + integrity sha1-DdD9TEoxTFI09Jb/e12c5abI/qo= + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +node-fetch@2.6.7, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^2.6.2: version "2.6.8" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" @@ -9501,7 +10498,7 @@ oauth@^0.9.15: resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -9516,6 +10513,11 @@ object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha1-wGQfJjlFMvKKuNeWq5VOQ8AJqOo= +object-inspect@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-inspect@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" @@ -9573,7 +10575,7 @@ object.entries@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.entries@^1.1.8: +object.entries@^1.1.6: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -9582,41 +10584,33 @@ object.entries@^1.1.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== +object.hasown@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== dependencies: - call-bind "^1.0.7" define-properties "^1.2.1" es-abstract "^1.23.2" - -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.19.5" + es-object-atoms "^1.0.0" object.values@^1.1.5: version "1.1.5" @@ -9636,24 +10630,15 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" -object.values@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - oidc-token-hash@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6" integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ== on-exit-leak-free@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.1.tgz#762dc7db809fa43303e64024f0ea0af54dd81294" - integrity sha512-IPTBZ175tI0sSg0ikDcCDfa5dPgcFbJgABsTHsY+Mkdm6Y2VKGuchubXSvTuu5tSPl4mqt53o3nLI74HTs8UgQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha1-/tGVyevdt9nkw4Qvk/KBrI2t07g= once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -9684,6 +10669,11 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + openid-client@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.4.0.tgz#77f1cda14e2911446f16ea3f455fc7c405103eac" @@ -9694,17 +10684,17 @@ openid-client@^5.4.0: object-hash "^2.0.1" oidc-token-hash "^5.0.1" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk= +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" @@ -9731,12 +10721,17 @@ outdent@^0.5.0: resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== +outdent@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + outvariant@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.3.0.tgz#c39723b1d2cba729c930b74bf962317a81b9b1c9" integrity sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ== -outvariant@^1.4.0, outvariant@^1.4.2: +outvariant@^1.3.0, outvariant@^1.4.0, outvariant@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== @@ -9765,7 +10760,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -9882,7 +10877,12 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@^7.1.2: +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5@^7.0.0, parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== @@ -9917,6 +10917,27 @@ patch-package@^7.0.0: tmp "^0.0.33" yaml "^2.2.2" +patch-package@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" + integrity sha1-0ZHi8bbgakYkoBFry4jt1nFO3mE= + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^9.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + rimraf "^2.6.3" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.0.33" + yaml "^2.2.2" + path-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" @@ -9955,7 +10976,7 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= -path-scurry@^1.10.1, path-scurry@^1.11.1: +path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -9963,13 +10984,6 @@ path-scurry@^1.10.1, path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-to-regexp@^6.1.0, path-to-regexp@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" @@ -10005,12 +11019,12 @@ periscopic@^3.0.0: estree-walker "^3.0.0" is-reference "^3.0.0" -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI= @@ -10038,7 +11052,7 @@ pify@^4.0.1: pino-abstract-transport@v1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + integrity sha1-CD2Y+WYmIWRQSvuYm8zQX2ZZN6g= dependencies: readable-stream "^4.0.0" split2 "^4.0.0" @@ -10046,12 +11060,12 @@ pino-abstract-transport@v1.1.0: pino-std-serializers@^6.0.0: version "6.2.2" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== + integrity sha1-2am18rmkAkhqX8TbCnN1cKhgqrM= pino@^8.12.0: - version "8.15.3" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.3.tgz#8d5d9b440f0218e8c03926d8f2e5bd0854c716eb" - integrity sha512-wDds1+DH8VaREe4fpLEKttGnDoLiX3KR3AP5bHsrRwEZ93y+Z/HFC03zkGSxpIGWKDHg24sloVqGcIWoLCkTLQ== + version "8.15.6" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.6.tgz#55c361e3c4dadabbbb47543e0d3bf5759fe9c052" + integrity sha1-VcNh48Ta2ru7R1Q+DTv1dZ/pwFI= dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" @@ -10065,11 +11079,6 @@ pino@^8.12.0: sonic-boom "^3.1.0" thread-stream "^2.0.0" -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -10129,7 +11138,7 @@ preact@^10.6.3: prebuild-install@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + integrity sha1-3pfVs0pwoMgTNP0kZB8qFwI1LkU= dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" @@ -10180,25 +11189,21 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-format@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== -prism-react-renderer@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" - integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== - -prism-react-renderer@^2.0.6: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz#c5ea692029c2f8b3fd04f63662d04ffd4eaf10a0" - integrity sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^2.0.0" - -prismjs@^1.23.0, prismjs@^1.27.0: +prismjs@^1.27.0: version "1.29.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== @@ -10211,17 +11216,12 @@ prismjs@~1.27.0: process-warning@^2.0.0, process-warning@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== + integrity sha1-AI7Ha1eYIKjlw12BlgUlymT+tiY= process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" @@ -10260,7 +11260,7 @@ proxy-addr@^2.0.7: proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + integrity sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I= pseudomap@^1.0.2: version "1.0.2" @@ -10275,7 +11275,7 @@ psl@^1.1.33: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -10320,7 +11320,7 @@ queue-microtask@^1.2.2: quick-format-unescaped@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + integrity sha1-k+9t2NNFPLx5cN1hT61MWVTWtac= quick-lru@^4.0.1: version "4.0.1" @@ -10335,12 +11335,22 @@ quick-lru@^5.1.1: ramda-adjunct@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/ramda-adjunct/-/ramda-adjunct-4.0.0.tgz#99873cc707e86207ec7e757385144b3f235b7c59" - integrity sha512-W/NiJAlZdwZ/iUkWEQQgRdH5Szqqet1WoVH9cdqDVjFbVaZHuJfJRvsxqHhvq6tZse+yVbFatLDLdVa30wBlGQ== + integrity sha1-mYc8xwfoYgfsfnVzhRRLPyNbfFk= + +ramda-adjunct@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz#085ca9a7bf19857378eff648f9852b15136dc66f" + integrity sha1-CFypp78ZhXN47/ZI+YUrFRNtxm8= ramda@~0.29.0: version "0.29.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" - integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== + integrity sha1-+7tnp0CnVMiky7QeKm4OuFB/Vfs= + +ramda@~0.29.1: + version "0.29.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.1.tgz#408a6165b9555b7ba2fc62555804b6c5a2eca196" + integrity sha1-QIphZblVW3ui/GJVWAS2xaLsoZY= randexp@^0.5.3: version "0.5.3" @@ -10360,7 +11370,7 @@ randombytes@^2.1.0: rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -10426,7 +11436,7 @@ react-error-boundary@^3.1.4: react-error-boundary@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.11.tgz#36bf44de7746714725a814630282fee83a7c9a1c" - integrity sha512-U13ul67aP5DOSPNSCWQ/eO0AQEYzEFkVljULQIjMV0KlffTAhxuDoBKdO0pb/JZ8mDhMKFZ9NZi0BmLGUiNphw== + integrity sha1-Nr9E3ndGcUclqBRjAoL+6Dp8mhw= dependencies: "@babel/runtime" "^7.12.5" @@ -10462,35 +11472,10 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-live@^4.0.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/react-live/-/react-live-4.1.7.tgz#a451054bee78e6c9b4410dfc3940b318d9bc7880" - integrity sha512-NTzl0POOAW3dkp7+QL30duOrIu2Vzf2LHdx4TaQ0BqOAtQcSTKEXujfm9jR2VoCHko0oi35PYp38yKQBXz4mrg== - dependencies: - prism-react-renderer "^2.0.6" - sucrase "^3.31.0" - use-editable "^2.3.3" - -react-markdown@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" - integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== - dependencies: - "@types/hast" "^3.0.0" - devlop "^1.0.0" - hast-util-to-jsx-runtime "^2.0.0" - html-url-attributes "^3.0.0" - mdast-util-to-hast "^13.0.0" - remark-parse "^11.0.0" - remark-rehype "^11.0.0" - unified "^11.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - react-redux@^8.0.5: version "8.1.1" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.1.tgz#8e740f3fd864a4cd0de5ba9cdc8ad39cc9e7c81a" - integrity sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA== + integrity sha1-jnQPP9hkpM0N5bqc3IrTnMnnyBo= dependencies: "@babel/runtime" "^7.12.1" "@types/hoist-non-react-statics" "^3.3.1" @@ -10499,6 +11484,14 @@ react-redux@^8.0.5: react-is "^18.0.0" use-sync-external-store "^1.0.0" +react-redux@^9.0.4: + version "9.1.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.0.tgz#46a46d4cfed4e534ce5452bb39ba18e1d98a8197" + integrity sha1-RqRtTP7U5TTOVFK7OboY4dmKgZc= + dependencies: + "@types/use-sync-external-store" "^0.0.3" + use-sync-external-store "^1.0.0" + react-responsive-carousel@3.2.10: version "3.2.10" resolved "https://registry.yarnpkg.com/react-responsive-carousel/-/react-responsive-carousel-3.2.10.tgz#2de13bdc131d78b8b92d3653d295a77d8c20cf2e" @@ -10624,7 +11617,7 @@ read-yaml-file@^1.1.0: readable-stream@^3.1.1: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + integrity sha1-VqmzbqllwAxak+8x6xEaDxEFaWc= dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -10642,7 +11635,7 @@ readable-stream@^3.4.0: readable-stream@^4.0.0: version "4.4.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== + integrity sha1-5qztJ607nXJtgwhRW5obmNwbnRM= dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -10660,12 +11653,12 @@ readdirp@~3.6.0: reading-time@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" - integrity sha1-0qfxtgV8suFpvq+HETzDQRtbxbs= + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== real-require@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + integrity sha1-IJYy3qGBC+KuBjpqwIT+5+M/ung= rechoir@^0.6.2: version "0.6.2" @@ -10702,16 +11695,20 @@ redux@^4.1.2: dependencies: "@babel/runtime" "^7.9.2" +redux@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha1-l/omiBzldGUAElWF1WQsd7bpRHs= + reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.1" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -10737,9 +11734,9 @@ regenerator-runtime@^0.13.11: regenerator-runtime@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + integrity sha1-XhnWjrEtSG95fhWjxqkY987F60U= -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: +regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha1-h8qzD4D2ZmAYGju3v1mBqHKzZ6w= @@ -10748,6 +11745,15 @@ regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" @@ -10758,10 +11764,26 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +rehype-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-9.0.0.tgz#3949faeec6f466ec57774215661e0d75469195d9" + integrity sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw== + dependencies: + "@types/hast" "^3.0.0" + hast-util-from-html "^2.0.0" + unified "^11.0.0" + +rehype-pretty-code@0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/rehype-pretty-code/-/rehype-pretty-code-0.13.0.tgz#e7de5217af907b2ff32ea441827c0b7ccdfc079b" + integrity sha512-+22dz1StXlF7dlMyOySNaVxgcGhMI4BCxq0JxJJPWYGiKsI6cu5jyuIKGHXHvH18D8sv1rdKtvsY9UEfN3++SQ== + dependencies: + "@types/hast" "^3.0.4" + hast-util-to-string "^3.0.0" + parse-numeric-range "^1.3.0" + rehype-parse "^9.0.0" + unified "^11.0.4" + unist-util-visit "^5.0.0" rehype-slug@^6.0.0: version "6.0.0" @@ -10774,6 +11796,15 @@ rehype-slug@^6.0.0: hast-util-to-string "^3.0.0" unist-util-visit "^5.0.0" +rehype-stringify@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-10.0.0.tgz#2031cf6fdd0355393706f0474ec794c75e5492f2" + integrity sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ== + dependencies: + "@types/hast" "^3.0.0" + hast-util-to-html "^9.0.0" + unified "^11.0.0" + remark-directive@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.0.tgz#34452d951b37e6207d2e2a4f830dc33442923268" @@ -10797,9 +11828,9 @@ remark-gfm@^4.0.0: unified "^11.0.0" remark-mdx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.1.tgz#8f73dd635c1874e44426e243f72c0977cf60e212" - integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.0.tgz#146905a3925b078970e05fc89b0e16b9cc3bfddd" + integrity sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g== dependencies: mdast-util-mdx "^3.0.0" micromark-extension-mdxjs "^3.0.0" @@ -10814,7 +11845,7 @@ remark-parse@^11.0.0: micromark-util-types "^2.0.0" unified "^11.0.0" -remark-rehype@^11.0.0: +remark-rehype@11.1.0, remark-rehype@^11.0.0: version "11.1.0" resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc" integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== @@ -10885,7 +11916,12 @@ requires-port@^1.0.0: reselect@^4.1.8: version "4.1.8" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + integrity sha1-P13GceoWjczes+FBI29p8C6uxSQ= + +reselect@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.0.tgz#c479139ab9dd91be4d9c764a7f3868210ef8cd21" + integrity sha1-xHkTmrndkb5NnHZKfzhoIQ74zSE= resize-observer-polyfill@1.5.1: version "1.5.1" @@ -10948,7 +11984,7 @@ resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: +resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== @@ -10957,15 +11993,6 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - responselike@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" @@ -11058,7 +12085,7 @@ rrweb-cssom@^0.7.1: rtl-css-js@^1.16.1: version "1.16.1" resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80" - integrity sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg== + integrity sha1-S0i0NUsP+RejBIjZUQD79yGaPoA= dependencies: "@babel/runtime" "^7.1.2" @@ -11093,6 +12120,16 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -11103,7 +12140,7 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= @@ -11120,14 +12157,14 @@ safe-regex-test@^1.0.0, safe-regex-test@^1.0.3: safe-regex2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" - integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== + integrity sha1-sodSTDl8eimURwNn4BheGRax9bk= dependencies: ret "~0.2.0" safe-stable-stringify@^2.3.1: version "2.4.3" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + integrity sha1-E4yEtvbts9tfjvPvcRW49VzL+IY= "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" @@ -11164,7 +12201,7 @@ section-matter@^1.0.0: secure-json-parse@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + integrity sha1-Wl+c1q5H3yPboxUe3QaFXUfgmGI= "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.2" @@ -11176,14 +12213,14 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.0: +semver@^7.3.4, semver@^7.3.5, semver@^7.5.0: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -11204,6 +12241,11 @@ serialize-error@^8.1.0: dependencies: type-fest "^0.20.2" +server-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" + integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -11212,7 +12254,23 @@ set-blocking@^2.0.0: set-cookie-parser@^2.4.1: version "2.6.0" resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" - integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + integrity sha1-Exkh5Q9i/xpmpGHX1i17IdXRWlE= + +set-cookie-parser@^2.4.6: + version "2.7.1" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== + +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha1-L4HcbBbHBZvaWrfILBHwOlFe2OE= + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" set-function-length@^1.2.1: version "1.2.2" @@ -11226,7 +12284,16 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1, set-function-name@^2.0.2: +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -11236,6 +12303,11 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ= + sha.js@^2.4.11: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -11282,10 +12354,22 @@ shelljs@^0.8.5: interpret "^1.0.0" rechoir "^0.6.2" +shiki@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.1.1.tgz#6ee89e14f79f0318dcb4bbe6513382c80b5afd4f" + integrity sha512-7ksyiu01NltBvEcLq9GcguF+7RGa5lDwozjgdbiXnlkro1FtMCcrVtHUWbKuYBSOZW74gC4KlnBcgRCwK2ERAw== + dependencies: + "@shikijs/core" "1.1.1" + short-unique-id@^4.4.4: version "4.4.4" resolved "https://registry.yarnpkg.com/short-unique-id/-/short-unique-id-4.4.4.tgz#a45df68303bbd2dbb5785ed7708e891809c9cb7a" - integrity sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw== + integrity sha1-pF32gwO70tu1eF7XcI6JGAnJy3o= + +short-unique-id@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/short-unique-id/-/short-unique-id-5.0.3.tgz#bc6975dc5e8b296960ff5ac91ddabbc7ddb693d9" + integrity sha1-vGl13F6LKWlg/1rJHdq7x922k9k= side-channel@^1.0.4: version "1.0.4" @@ -11324,7 +12408,7 @@ signal-exit@^4.0.1, signal-exit@^4.1.0: simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + integrity sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8= simple-encryptor@^3.0.0: version "3.0.0" @@ -11336,23 +12420,20 @@ simple-encryptor@^3.0.0: simple-get@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + integrity sha1-SjnbVJKHyXnTUhEvoD/Zn9a8NUM= dependencies: decompress-response "^6.0.0" once "^1.3.1" simple-concat "^1.0.0" -sinon@^14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-14.0.2.tgz#585a81a3c7b22cf950762ac4e7c28eb8b151c46f" - integrity sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w== +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "^9.1.2" - "@sinonjs/samsam" "^7.0.1" - diff "^5.0.0" - nise "^5.1.2" - supports-color "^7.2.0" + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" slash@^2.0.0: version "2.0.0" @@ -11416,9 +12497,9 @@ snake-case@^3.0.4: tslib "^2.0.3" sonic-boom@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.4.0.tgz#8582d1385ea3bf79ca953329043bfbdbabe58eb9" - integrity sha512-zSe9QQW30nPzjkSJ0glFQO5T9lHsk39tz+2bAAwCj8CNgEG8ItZiX7Wb2ZgA8I04dwRGCcf1m3ABJa8AYm12Fw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.6.0.tgz#24b9b45cee54910701dc6a80025d7c621f685aac" + integrity sha1-JLm0XO5UkQcB3GqAAl18Yh9oWqw= dependencies: atomic-sleep "^1.0.0" @@ -11494,13 +12575,20 @@ split.js@^1.6.0: split2@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + integrity sha1-ycWSCQTRSLqwufZxRfJFqGqtv6Q= sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" @@ -11509,9 +12597,9 @@ stackback@0.0.2: stampit@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/stampit/-/stampit-4.3.2.tgz#cfd3f607dd628a161ce6305621597994b4d56573" - integrity sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA== + integrity sha1-z9P2B91iihYc5jBWIVl5lLTVZXM= -statuses@^2.0.1: +statuses@2.0.1, statuses@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== @@ -11533,6 +12621,18 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +strict-event-emitter@^0.2.4: + version "0.2.8" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz#b4e768927c67273c14c13d20e19d5e6c934b47ca" + integrity sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A== + dependencies: + events "^3.3.0" + +strict-event-emitter@^0.4.3: + version "0.4.6" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" + integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== + strict-event-emitter@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" @@ -11561,15 +12661,16 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== +string-width@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" + integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + eastasianwidth "^0.2.0" + emoji-regex "^10.2.1" + strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.11: +string.prototype.matchall@^4.0.8: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== @@ -11587,20 +12688,6 @@ string.prototype.matchall@^4.0.11: set-function-name "^2.0.2" side-channel "^1.0.6" -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - string.prototype.padend@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" @@ -11610,13 +12697,14 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trim@^1.2.9: version "1.2.9" @@ -11637,6 +12725,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimend@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" @@ -11655,6 +12752,15 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" @@ -11722,7 +12828,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= @@ -11730,26 +12836,12 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= strnum@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -style-to-js@^1.0.0: - version "1.1.13" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.13.tgz#8d17f2560a9cc9515b94834aaeb2305887d7ced5" - integrity sha512-+43kvxwjrW9n5gFR40Rv98A0/Mcjew7Lt+p5Nnw1KGR9SZf/ZaKqmMwl9Enj9EnYNcJ5VzuCjejC5KZzvH2lOA== - dependencies: - style-to-object "1.0.6" - -style-to-object@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.6.tgz#0c28aed8be1813d166c60d962719b2907c26547b" - integrity sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA== - dependencies: - inline-style-parser "0.2.3" + integrity sha1-XE6Cn+Fa1P8NIMPbWsl7c8mwcts= style-to-object@^0.4.0: version "0.4.4" @@ -11759,11 +12851,11 @@ style-to-object@^0.4.0: inline-style-parser "0.1.1" style-to-object@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.7.tgz#8604fb6018ac3db83e97207a4f85f579068f661c" - integrity sha512-uSjr59G5u6fbxUfKbb8GcqMGT3Xs9v5IbPkjb0S16GyOeBLAzSRK0CixBv5YrYvzO6TDLzIS6QCn78tkqWngPw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.5.tgz#5e918349bc3a39eee3a804497d97fcbbf2f0d7c0" + integrity sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ== dependencies: - inline-style-parser "0.2.3" + inline-style-parser "0.2.2" styled-jsx@5.1.1: version "5.1.1" @@ -11780,20 +12872,7 @@ stylis@^4.1.2: stylis@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" - integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== - -sucrase@^3.31.0: - version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" + integrity sha1-q+MFpmn8PYd34Q7vz8c62GHFWIw= supports-color@^5.3.0: version "5.5.0" @@ -11802,7 +12881,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= @@ -11829,7 +12908,7 @@ supports-preserve-symlinks-flag@^1.0.0: swagger-client@^3.19.10: version "3.19.10" resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.19.10.tgz#90bff7d901d0676625d880a842b2f54d79262ece" - integrity sha512-r+uGryGdxYQf7Aa9WzK226RigDaWAutDqP903O1QFA47jnJZ5RCkaV3X8nadXkNoZRlsZv8sEKOB8UoDY99BBA== + integrity sha1-kL/32QHQZ2Yl2ICoQrL1TXkmLs4= dependencies: "@babel/runtime-corejs3" "^7.20.13" "@swagger-api/apidom-core" ">=0.70.1 <1.0.0" @@ -11849,10 +12928,32 @@ swagger-client@^3.19.10: traverse "~0.6.6" url "~0.11.0" +swagger-client@^3.25.0: + version "3.25.0" + resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.25.0.tgz#c59b181bed7172475d275487e6ab8365bd3f06ec" + integrity sha1-xZsYG+1xckddJ1SH5quDZb0/Buw= + dependencies: + "@babel/runtime-corejs3" "^7.22.15" + "@swagger-api/apidom-core" ">=0.90.0 <1.0.0" + "@swagger-api/apidom-error" ">=0.90.0 <1.0.0" + "@swagger-api/apidom-json-pointer" ">=0.90.0 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1" ">=0.90.0 <1.0.0" + "@swagger-api/apidom-reference" ">=0.90.0 <1.0.0" + cookie "~0.6.0" + deepmerge "~4.3.0" + fast-json-patch "^3.0.0-1" + is-plain-object "^5.0.0" + js-yaml "^4.1.0" + node-abort-controller "^3.1.1" + node-fetch-commonjs "^3.3.1" + qs "^6.10.2" + traverse "~0.6.6" + undici "^5.24.0" + swagger-ui-react@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.1.0.tgz#c89af42f2da23a37e7e80d3e18ca77e2558c7a26" - integrity sha512-ivbw72f6mUZ431H4OC3cMhJy+ONBlmQ81TNAt7DKkUCW6nG+GboHCpLF1SXPCstzUskbAuZq0hOk3BuKb20pSA== + integrity sha1-yJr0Ly2iOjfn6A0+GMp34lWMeiY= dependencies: "@babel/runtime-corejs3" "^7.22.5" "@braintree/sanitize-url" "=6.0.2" @@ -11889,12 +12990,45 @@ swagger-ui-react@^5.0.0: xml-but-prettier "^1.0.1" zenscroll "^4.0.2" -swr@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.1.2.tgz#15841cf5bbb8b20f24e2408193f616a41b6734a0" - integrity sha512-ocfaD2rnYZKqTDplCEX2bH5Z1++n2JSej9oYi7hVfXXWYm+0RP+H6fVrogWB0mtMclv1guk9kEnAzNLygOy9Hw== +swagger-ui-react@^5.11.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.11.0.tgz#ed50f61ce7aa2c322b3a2435f2aa38396668431d" + integrity sha1-7VD2HOeqLDIrOiQ18qo4OWZoQx0= dependencies: - use-sync-external-store "^1.2.0" + "@babel/runtime-corejs3" "^7.23.7" + "@braintree/sanitize-url" "=7.0.0" + base64-js "^1.5.1" + classnames "^2.5.1" + css.escape "1.5.1" + deep-extend "0.6.0" + dompurify "=3.0.6" + ieee754 "^1.2.1" + immutable "^3.x.x" + js-file-download "^0.4.12" + js-yaml "=4.1.0" + lodash "^4.17.21" + patch-package "^8.0.0" + prop-types "^15.8.1" + randexp "^0.5.3" + randombytes "^2.1.0" + react-copy-to-clipboard "5.1.0" + react-debounce-input "=3.3.0" + react-immutable-proptypes "2.2.0" + react-immutable-pure-component "^2.2.0" + react-inspector "^6.0.1" + react-redux "^9.0.4" + react-syntax-highlighter "^15.5.0" + redux "^5.0.0" + redux-immutable "^4.0.0" + remarkable "^2.0.1" + reselect "^5.0.1" + serialize-error "^8.1.0" + sha.js "^2.4.11" + swagger-client "^3.25.0" + url-parse "^1.5.10" + xml "=1.0.1" + xml-but-prettier "^1.0.1" + zenscroll "^4.0.2" symbol-tree@^3.2.4: version "3.2.4" @@ -11906,17 +13040,6 @@ tabbable@^6.0.0, tabbable@^6.0.1: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha1-h+KPFPpDIcM3e6KG8Ht5soGjs8o= - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -11925,7 +13048,7 @@ tapable@^2.2.0: tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + integrity sha1-SJoVq4Xx8L76uzcLfeT561y+h4Q= dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" @@ -11935,7 +13058,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + integrity sha1-rK2EwoQTawYNw/qmRHSqmuvXcoc= dependencies: bl "^4.0.3" end-of-stream "^1.4.1" @@ -11962,24 +13085,10 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - thread-stream@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" - integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== + version "2.4.1" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.1.tgz#6d588b14f0546e59d3f306614f044bc01ce43351" + integrity sha1-bViLFPBUblnT8wZhTwRLwBzkM1E= dependencies: real-require "^0.2.0" @@ -12045,20 +13154,30 @@ to-regex-range@^5.0.1: is-number "^7.0.0" toad-cache@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.2.0.tgz#8221a1906ce7bd18cd56b22f5603bcf9e38b54f9" - integrity sha512-Hj5zSqBS6OHbZoQk9IU8VqIr+0JUpwzunnwSlFJhG8aJSInYUMEuzItl3kJsGteTPd1qtflafdRHlRtUazYeqg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.3.0.tgz#5b7dc67b36bc8b960567eb77bdf9ac6c26f204a1" + integrity sha1-W33Geza8i5YFZ+t3vfmsbCbyBKE= toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + tough-cookie@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -12094,21 +13213,28 @@ tree-kill@^1.2.2: tree-sitter-json@=0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.20.0.tgz#e17bb4917e8d5fe9f2f0d5eaec603e2d3552b07c" - integrity sha512-PteOLH+Tx6Bz4ZA/d40/DbkiSXXRM/gKahhHI8hQ1lWNfFvdknnz9k3Mz84ol5srRyLboJ8wp8GSkhZ6ht9EGQ== + integrity sha1-4Xu0kX6NX+ny8NXq7GA+LTVSsHw= dependencies: nan "^2.14.1" +tree-sitter-json@=0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.20.1.tgz#d1fe6c59571dd3a987ebb3f5aeef404f37b3a453" + integrity sha1-0f5sWVcd06mH67P1ru9ATzezpFM= + dependencies: + nan "^2.18.0" + tree-sitter-yaml@=0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz#c617ba72837399d8105ec10cdb4c360e1ed76076" - integrity sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA== + integrity sha1-xhe6coNzmdgQXsEM20w2Dh7XYHY= dependencies: nan "^2.14.0" tree-sitter@=0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.20.4.tgz#7d9d4f769fc05342ef43e5559f7ff34b0fc48327" - integrity sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog== + integrity sha1-fZ1Pdp/AU0LvQ+VVn3/zSw/Egyc= dependencies: nan "^2.17.0" prebuild-install "^7.1.1" @@ -12133,20 +13259,20 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" integrity sha1-D3tRGk/eZaRvGEd6s4hJsixVSHY= -ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + +ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - ts-toolbelt@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + integrity sha1-UKJUJs/tUA1KCb0bOvtvKIee39U= tsconfig-paths@^3.14.1: version "3.14.1" @@ -12158,10 +13284,10 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" @@ -12173,7 +13299,22 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.2: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tslib@^2.1.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha1-fOyqfwc85oCgWEeqd76UEJjzbcM= + +tslib@^2.4.1, tslib@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha1-spWFRoTb2hZOGB0lmiLNd53Ne8M= + +tslib@^2.6.2: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -12194,7 +13335,7 @@ tty-table@^4.1.5: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" @@ -12295,11 +13436,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw= - type-fest@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" @@ -12330,6 +13466,11 @@ type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + type-fest@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.6.1.tgz#cf8025edeebfd6cf48de73573a5e1423350b9993" @@ -12340,6 +13481,15 @@ type-fest@^4.9.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.0.tgz#703f263af10c093cd6277d079e26b9e17d517c4b" integrity sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -12349,6 +13499,16 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.13" +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" @@ -12360,6 +13520,17 @@ typed-array-byte-length@^1.0.1: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" @@ -12372,6 +13543,15 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typed-array-length@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" @@ -12384,17 +13564,22 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -types-ramda@^0.29.4: - version "0.29.4" - resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.29.4.tgz#8d9b51df2e550a05cedab541cc75dcd72972c625" - integrity sha512-XO/820iRsCDwqLjE8XE+b57cVGPyk1h+U9lBGpDWvbEky+NQChvHVwaKM05WnW1c5z3EVQh8NhXFmh2E/1YazQ== +types-ramda@^0.29.10: + version "0.29.10" + resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.29.10.tgz#820432905b820301c74f6396f07aa2359b41cde4" + integrity sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg== dependencies: ts-toolbelt "^9.6.0" typescript@^4.8.3: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha1-xGSryhWWaVl75flriUNQCyOOYOY= + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typescript@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== ufo@^1.5.4: version "1.5.4" @@ -12421,15 +13606,22 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici@^5.24.0: + version "5.28.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" + integrity sha1-/qIA6sZfx+yv+AoCPRoFQ0I7TJE= + dependencies: + "@fastify/busboy" "^2.0.0" + undici@^6.19.5: version "6.19.7" resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216" integrity sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A== -unified@^11.0.0: - version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== +unified@11.0.4, unified@^11.0.0, unified@^11.0.4: + version "11.0.4" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.4.tgz#f4be0ac0fe4c88cb873687c07c64c49ed5969015" + integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== dependencies: "@types/unist" "^3.0.0" bail "^2.0.0" @@ -12446,11 +13638,6 @@ unionfs@^4.4.0: dependencies: fs-monkey "^1.0.0" -unist-util-is@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" - integrity sha1-6K7OCxAvqbwJew/vj4cMSW1KYjY= - unist-util-is@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" @@ -12472,21 +13659,13 @@ unist-util-position@^5.0.0: dependencies: "@types/unist" "^3.0.0" -unist-util-remove@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-3.1.1.tgz#8bfa181aff916bd32a4ed30b3ed76d0c21c077df" - integrity sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" - integrity sha1-XGqgfJCx3v/ZFTvhcNzmKKhppEc= +unist-util-remove-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== dependencies: - "@types/unist" "^2.0.0" + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" unist-util-stringify-position@^4.0.0: version "4.0.0" @@ -12495,14 +13674,6 @@ unist-util-stringify-position@^4.0.0: dependencies: "@types/unist" "^3.0.0" -unist-util-visit-parents@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz#44bbc5d25f2411e7dfc5cecff12de43296aa8521" - integrity sha1-RLvF0l8kEeffxc7P8S3kMpaqhSE= - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" @@ -12543,15 +13714,20 @@ universalify@^2.0.0: unraw@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unraw/-/unraw-2.0.1.tgz#7b51dcdfb1e43d59d5e52cdb44d349d029edbaba" - integrity sha512-tdOvLfRzHolwYcHS6HIX860MkK9LQ4+oLuNwFYL7bpgTEO64PZrcQxkisgwJYCfF8sKiWLwwu1c83DvMkbefIQ== + integrity sha1-e1Hc37HkPVnV5SzbRNNJ0Cnturo= -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== +unraw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" + integrity sha1-c0Q+1w0qsJzLrCsAUlYC1Zkfu+M= + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.0" upper-case-first@^2.0.2: version "2.0.2" @@ -12577,7 +13753,7 @@ uri-js@^4.2.2: url-parse@^1.5.10, url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + integrity sha1-nTwvc2wddd070r5QfcwRHx4uqcE= dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -12590,26 +13766,37 @@ url@~0.11.0: punycode "1.3.2" querystring "0.2.0" -use-editable@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/use-editable/-/use-editable-2.3.3.tgz#a292fe9ba4c291cd28d1cc2728c75a5fc8d9a33f" - integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA== +use-debounce@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-10.0.0.tgz#5091b18d6c16292605f588bae3c0d2cfae756ff2" + integrity sha1-UJGxjWwWKSYF9Yi648DSz651b/I= use-memo-one@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + integrity sha1-fb79bvP+TnZ6DPXXKHqs+1hGkoo= util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util@^0.12.3: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + uuid@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" @@ -12620,16 +13807,16 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0, uuid@^9.0.1: +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4= - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -12643,6 +13830,14 @@ vary@^1: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vfile-location@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464" + integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== + dependencies: + "@types/unist" "^3.0.0" + vfile "^6.0.0" + vfile-matter@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/vfile-matter/-/vfile-matter-5.0.0.tgz#4f8d6476a432f9556784a8b538f7da0ba25e053d" @@ -12651,14 +13846,6 @@ vfile-matter@^5.0.0: vfile "^6.0.0" yaml "^2.0.0" -vfile-message@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" - integrity sha1-opCPZNnlVzFeydfqOpEPZYrAX30= - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" @@ -12667,52 +13854,43 @@ vfile-message@^4.0.0: "@types/unist" "^3.0.0" unist-util-stringify-position "^4.0.0" -vfile-reporter@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-7.0.5.tgz#a0cbf3922c08ad428d6db1161ec64a53b5725785" - integrity sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw== +vfile-reporter@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-8.1.0.tgz#8d6057035c7133a1ea0da04c82bfef31c0756fa3" + integrity sha512-NfHyHdkCcy0BsXiLA3nId29TY7W7hgpc8nd8Soe3imATx5N4/+mkLYdMR+Y6Zvu6BXMMi0FZsD4FLCm1dN85Pg== dependencies: "@types/supports-color" "^8.0.0" - string-width "^5.0.0" + string-width "^6.0.0" supports-color "^9.0.0" - unist-util-stringify-position "^3.0.0" - vfile "^5.0.0" - vfile-message "^3.0.0" - vfile-sort "^3.0.0" - vfile-statistics "^2.0.0" - -vfile-sort@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-3.0.1.tgz#4b06ec63e2946749b0bb514e736554cd75e441a2" - integrity sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw== - dependencies: - vfile "^5.0.0" - vfile-message "^3.0.0" + unist-util-stringify-position "^4.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" + vfile-sort "^4.0.0" + vfile-statistics "^3.0.0" -vfile-statistics@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-2.0.1.tgz#2e1adae1cd3a45c1ed4f2a24bd103c3d71e4bce3" - integrity sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg== +vfile-sort@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-4.0.0.tgz#fa1929065b62fe5311e5391c9434f745e8641703" + integrity sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ== dependencies: - vfile "^5.0.0" - vfile-message "^3.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" -vfile@^5.0.0: - version "5.3.4" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.4.tgz#bbb8c96b956693bbf70b2c67fdb5781dff769b93" - integrity sha1-u7jJa5Vmk7v3Cyxn/bV4Hf92m5M= +vfile-statistics@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-3.0.0.tgz#0f5cd00c611c1862b13a9b5bc5599efaf465f2cf" + integrity sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w== dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== +vfile@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536" + integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== dependencies: "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" vite-node@2.1.4: @@ -12747,13 +13925,6 @@ vite@^5.0.0, vite@^5.0.11: optionalDependencies: fsevents "~2.3.3" -vitest-fetch-mock@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/vitest-fetch-mock/-/vitest-fetch-mock-0.3.0.tgz#a519293b61be1ce43377d720500bbfa89861e509" - integrity sha512-g6upWcL8/32fXL43/5f4VHcocuwQIi9Fj5othcK9gPO8XqSEGtnIZdenr2IaipDr61ReRFt+vaOEgo8jiUUX5w== - dependencies: - cross-fetch "^4.0.0" - vitest@^2.0.0: version "2.1.4" resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.4.tgz#ba8f4589fb639cf5a9e6af54781667312b3e8230" @@ -12801,15 +13972,34 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-encoding@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" + integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== + dependencies: + util "^0.12.3" + optionalDependencies: + "@zxing/text-encoding" "0.9.0" + +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha1-ccJxjFK0X9Sdvu6IY0s6YM6rQqY= + web-tree-sitter@=0.20.3: version "0.20.3" resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz#3dd17b283ad63b1d8c07c5ea814f0fefb2b1f776" - integrity sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw== + integrity sha1-PdF7KDrWOx2MB8XqgU8P77Kx93Y= webidl-conversions@^3.0.0: version "3.0.1" @@ -12821,6 +14011,21 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +webpack-bundle-analyzer@4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" + integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + whatwg-encoding@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" @@ -12861,12 +14066,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== dependencies: - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -12875,8 +14080,8 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-collection "^1.0.1" + which-typed-array "^1.1.9" which-collection@^1.0.1: version "1.0.1" @@ -12888,16 +14093,6 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -12911,6 +14106,17 @@ which-pm@2.0.0: load-yaml-file "^0.2.0" path-exists "^4.0.0" +which-typed-array@^1.1.11, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" @@ -12922,7 +14128,7 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" -which-typed-array@^1.1.8: +which-typed-array@^1.1.2, which-typed-array@^1.1.8: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== @@ -12956,11 +14162,6 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -12998,7 +14199,17 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^8.0.0, ws@^8.18.0: +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.0.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + +ws@^8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== @@ -13056,9 +14267,9 @@ yallist@^4.0.0: integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= yaml@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" - integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yaml@^2.1.1: version "2.1.3" @@ -13131,7 +14342,7 @@ yargs@^17.1.1: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@^17.7.2: +yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -13182,15 +14393,20 @@ zod-validation-error@^3.4.0: resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6" integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ== +zod@^3.19.1: + version "3.19.1" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.19.1.tgz#112f074a97b50bfc4772d4ad1576814bd8ac4473" + integrity sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA== + zod@^3.22.3: - version "3.22.3" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060" - integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug== + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha1-8xw6k4b2Gx8iivVvqpJV6EXPP/8= -zustand@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.2.tgz#bb121fcad84c5a569e94bd1a2695e1a93ba85d39" - integrity sha512-rd4haDmlwMTVWVqwvgy00ny8rtti/klRoZjFbL/MAcDnmD5qSw/RZc+Vddstdv90M5Lv6RPgWvm1Hivyn0QgJw== +zustand@^4.4.7: + version "4.4.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c" + integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw== dependencies: use-sync-external-store "1.2.0" @@ -13198,3 +14414,8 @@ zwitch@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" integrity sha1-kfjQ6QH/o9ZlmXVt3n9XsXyV3OE= + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==