From 26e710180b2ee9be9f47516ae4736eff719cdea6 Mon Sep 17 00:00:00 2001 From: Benjamin Cabanes <3447705+bcabanes@users.noreply.github.com> Date: Mon, 3 Oct 2022 12:11:01 -0400 Subject: [PATCH] docs(nxdev): refresh ui (#12370) --- graph/client/src/app/shell.tsx | 9 +- .../src/app/sidebar/focused-project-panel.tsx | 4 +- graph/client/src/app/sidebar/project-list.tsx | 10 +- graph/client/src/app/sidebar/sidebar.tsx | 2 +- graph/client/src/app/sidebar/theme-panel.tsx | 10 +- .../client/src/app/sidebar/tracing-panel.tsx | 10 +- .../src/lib/documents.api.ts | 29 +- nx-dev/data-access-menu/src/lib/menu.utils.ts | 48 +- nx-dev/data-access-packages/src/index.ts | 1 + .../src/lib/sort-packages.ts | 9 + nx-dev/feature-doc-viewer/src/lib/content.tsx | 6 +- .../feature-doc-viewer/src/lib/doc-viewer.tsx | 54 +- .../src/lib/content.tsx | 237 +- .../src/lib/package-schema-list.tsx | 132 +- .../src/lib/package-schema-viewer.tsx | 46 +- .../src/lib/parameter-view.tsx | 12 +- .../src/lib/schema-editor.tsx | 4 +- .../src/lib/types/type.tsx | 4 +- .../src/lib/ui/headings.tsx | 8 +- .../src/lib/ui/package-reference.tsx | 99 +- .../src/lib/algolia-search.global.css | 85 +- .../feature-search/src/lib/algolia-search.tsx | 81 +- nx-dev/nx-dev-e2e/src/integration/app.spec.ts | 2 +- .../src/integration/packages.spec.ts | 25 - nx-dev/nx-dev/lib/navigation-toggle.effect.ts | 35 + nx-dev/nx-dev/next.config.js | 1 - nx-dev/nx-dev/pages/404.tsx | 2 +- nx-dev/nx-dev/pages/[...segments].tsx | 123 +- nx-dev/nx-dev/pages/_app.tsx | 142 +- nx-dev/nx-dev/pages/_document.tsx | 24 +- nx-dev/nx-dev/pages/community.tsx | 50 +- nx-dev/nx-dev/pages/conf.tsx | 175 +- nx-dev/nx-dev/pages/index.tsx | 340 +-- nx-dev/nx-dev/pages/packages.tsx | 166 +- nx-dev/nx-dev/postcss.config.js | 1 + .../public/images/background/background.svg | 2242 +++++++++++++++++ .../background/waves-background-final.svg | 951 +++++++ .../images/background/waves-background.svg | 109 + .../images/background/waves-background2.svg | 109 + .../public/images/conf/altan-stalker.webp | Bin 12092 -> 8296 bytes .../public/images/conf/benjamin-cabanes.webp | Bin 20982 -> 6992 bytes .../public/images/conf/colum-ferry.webp | Bin 16574 -> 6016 bytes .../public/images/conf/craigory-coppola.webp | Bin 6782 -> 5336 bytes .../public/images/conf/devin-shoemaker.webp | Bin 5622 -> 5916 bytes .../nx-dev/public/images/conf/isaac-mann.webp | Bin 59546 -> 6822 bytes .../nx-dev/public/images/conf/jack-hsu.webp | Bin 9054 -> 9346 bytes .../public/images/conf/james-henry.webp | Bin 44936 -> 4542 bytes .../public/images/conf/jason-jeans.webp | Bin 6988 -> 7104 bytes .../nx-dev/public/images/conf/jeff-cross.webp | Bin 56986 -> 5802 bytes .../public/images/conf/jo-hanna-pearce.webp | Bin 22416 -> 9114 bytes .../images/conf/jonathan-cammisuli.webp | Bin 5518 -> 5790 bytes .../public/images/conf/jordan-powell.webp | Bin 6478 -> 6812 bytes .../images/conf/juri-strumpflohner.webp | Bin 8180 -> 6140 bytes .../images/conf/katerina-skroumpelou.webp | Bin 11284 -> 7760 bytes .../public/images/conf/kennie-davis.webp | Bin 4332 -> 4856 bytes .../public/images/conf/lara-newsom.webp | Bin 6068 -> 6230 bytes .../public/images/conf/manfred-steyer.webp | Bin 54494 -> 5016 bytes .../nx-dev/public/images/conf/mike-ryan.webp | Bin 5268 -> 5514 bytes nx-dev/nx-dev/public/images/conf/miro.webp | Bin 5954 -> 0 bytes .../public/images/conf/miroslav-jonas.webp | Bin 11196 -> 9090 bytes .../public/images/conf/nathan-walker.webp | Bin 54880 -> 5178 bytes .../public/images/conf/philip-fulcher.webp | Bin 6634 -> 5002 bytes .../public/images/conf/rares-matei.webp | Bin 5416 -> 5718 bytes .../nx-dev/public/images/conf/ryan-diehl.webp | Bin 4904 -> 5096 bytes .../public/images/conf/santosh-yadav.webp | Bin 6084 -> 6368 bytes .../public/images/conf/victor-savkin.webp | Bin 58532 -> 7140 bytes .../public/images/conf/zack-derose.webp | Bin 5542 -> 4290 bytes .../nx-dev/public/images/github-nxcloud.webp | Bin 0 -> 114168 bytes .../nx-dev/public/images/nx-console-dark.webp | Bin 0 -> 133266 bytes .../public/images/nx-console-light.webp | Bin 0 -> 123692 bytes nx-dev/nx-dev/public/images/nx-console.webp | Bin 67082 -> 0 bytes .../public/images/nx-console/vscode-dark.webp | Bin 0 -> 89960 bytes .../images/nx-console/vscode-light.webp | Bin 0 -> 85202 bytes nx-dev/nx-dev/public/videos/dark.mp4 | Bin 0 -> 727740 bytes nx-dev/nx-dev/public/videos/dark.webm | Bin 0 -> 1096302 bytes nx-dev/nx-dev/public/videos/light.mp4 | Bin 0 -> 689022 bytes nx-dev/nx-dev/public/videos/light.webm | Bin 0 -> 980396 bytes nx-dev/nx-dev/styles/main.css | 24 +- nx-dev/nx-dev/styles/syntax-highlight.css | 71 + nx-dev/nx-dev/tailwind.config.js | 4 + nx-dev/ui-common/src/index.ts | 2 + .../ui-common/src/lib/announcement-banner.tsx | 12 +- nx-dev/ui-common/src/lib/breadcrumbs.tsx | 2 +- .../src/lib/documentation-header.tsx | 226 ++ nx-dev/ui-common/src/lib/footer.tsx | 105 +- nx-dev/ui-common/src/lib/header.tsx | 378 ++- nx-dev/ui-common/src/lib/plugin-card.tsx | 13 +- nx-dev/ui-common/src/lib/selector.tsx | 4 +- .../ui-common/src/lib/sidebar-container.tsx | 17 + nx-dev/ui-common/src/lib/sidebar.tsx | 168 +- nx-dev/ui-common/src/lib/testimonial-card.tsx | 12 +- .../ui-community/src/lib/connect-with-us.tsx | 44 +- .../ui-community/src/lib/create-nx-plugin.tsx | 63 +- .../ui-community/src/lib/plugin-directory.tsx | 6 +- nx-dev/ui-community/tsconfig.lib.json | 3 +- .../src/lib/conf-health-and-safety.tsx | 20 +- .../ui-conference/src/lib/conf-location.tsx | 12 +- .../src/lib/conf-schedule-short.tsx | 28 +- .../ui-conference/src/lib/conf-speakers.tsx | 10 +- .../ui-conference/src/lib/conf-workshop.tsx | 32 +- nx-dev/ui-home/src/index.ts | 24 +- .../ui-home/src/lib/affected-command.spec.tsx | 11 - nx-dev/ui-home/src/lib/affected-command.tsx | 163 -- nx-dev/ui-home/src/lib/cloud-support.tsx | 122 - .../ui-home/src/lib/dependency-graph.spec.tsx | 11 - nx-dev/ui-home/src/lib/dependency-graph.tsx | 109 - .../src/lib/ecosystem-features.spec.tsx | 11 - nx-dev/ui-home/src/lib/ecosystem-features.tsx | 259 -- .../ui-home/src/lib/egghead-courses.spec.tsx | 11 - nx-dev/ui-home/src/lib/egghead-courses.tsx | 72 - nx-dev/ui-home/src/lib/event-banner.tsx | 30 - .../src/lib/experience-features.spec.tsx | 11 - .../ui-home/src/lib/experience-features.tsx | 254 -- .../src/lib/extensible-and-integrated.tsx | 107 + .../github-intergration-tab.tsx | 168 ++ .../extensible-and-integrated/graph-tab.tsx | 73 + .../motion.helpers.ts | 20 + .../extensible-and-integrated/plugins-tab.tsx | 346 +++ .../lib/extensible-and-integrated/tabs.tsx | 11 + .../vscode-integration-tab.tsx | 111 + .../ui-home/src/lib/getting-started.spec.tsx | 11 - nx-dev/ui-home/src/lib/getting-started.tsx | 1016 +------- nx-dev/ui-home/src/lib/hero.tsx | 94 + nx-dev/ui-home/src/lib/logo-cloud.tsx | 126 + nx-dev/ui-home/src/lib/migrate.tsx | 34 + .../lib/migrations-and-code-generation.tsx | 168 ++ .../src/lib/monorepo-features.spec.tsx | 11 - nx-dev/ui-home/src/lib/monorepo-features.tsx | 266 -- nx-dev/ui-home/src/lib/monorepo-styles.tsx | 159 ++ nx-dev/ui-home/src/lib/newsletter.tsx | 151 ++ nx-dev/ui-home/src/lib/nx-is-fast.tsx | 252 ++ nx-dev/ui-home/src/lib/nx-playbook.tsx | 74 - nx-dev/ui-home/src/lib/nx-statistics.tsx | 55 + nx-dev/ui-home/src/lib/open-platform.spec.tsx | 11 - nx-dev/ui-home/src/lib/open-platform.tsx | 147 -- .../src/lib/open-source-projects.spec.tsx | 11 - .../ui-home/src/lib/open-source-projects.tsx | 417 --- nx-dev/ui-home/src/lib/performance.spec.tsx | 11 - nx-dev/ui-home/src/lib/performance.tsx | 171 -- nx-dev/ui-home/src/lib/testimonials.tsx | 99 +- nx-dev/ui-home/src/lib/vscode-plugin.spec.tsx | 11 - nx-dev/ui-home/src/lib/vscode-plugin.tsx | 109 - nx-dev/ui-home/src/lib/why-is-nx-fast.tsx | 29 + nx-dev/ui-home/src/lib/youtube-channel.tsx | 73 - nx-dev/ui-markdoc/src/index.ts | 6 + .../src/lib/nodes/fence.component.tsx | 38 +- .../src/lib/nodes/heading.component.tsx | 2 +- .../src/lib/tags/callout.component.tsx | 54 +- .../src/lib/tags/card-list.component.tsx | 2 +- .../src/lib/tags/cards.component.tsx | 51 + .../ui-markdoc/src/lib/tags/cards.schema.ts | 28 + .../lib/tags/github-repository.component.tsx | 8 +- .../src/lib/tags/iframe.component.tsx | 10 +- .../lib/tags/nx-cloud-section.component.tsx | 4 +- .../src/lib/tags/tabs.component.tsx | 8 +- .../src/lib/tags/youtube.components.tsx | 2 +- nx-dev/ui-member-card/src/lib/member-card.tsx | 2 +- .../src/lib/references-nav-list.tsx | 6 +- .../src/lib/references-section.tsx | 37 +- nx-dev/ui-theme/.babelrc | 12 + nx-dev/ui-theme/.eslintrc.json | 18 + nx-dev/ui-theme/README.md | 7 + nx-dev/ui-theme/jest.config.ts | 10 + nx-dev/ui-theme/project.json | 23 + nx-dev/ui-theme/src/index.ts | 2 + .../src/lib/theme-switcher.component.tsx | 96 + nx-dev/ui-theme/src/lib/theme.provider.tsx | 95 + nx-dev/ui-theme/tsconfig.json | 25 + nx-dev/ui-theme/tsconfig.lib.json | 24 + nx-dev/ui-theme/tsconfig.spec.json | 20 + package.json | 4 +- .../src/add-nx-to-monorepo.ts | 2 +- .../open-graph/generate-images.ts | 8 +- scripts/documentation/open-graph/media.jpg | Bin 105135 -> 439872 bytes tsconfig.base.json | 1 + workspace.json | 1 + yarn.lock | 16 +- 177 files changed, 7685 insertions(+), 5020 deletions(-) create mode 100644 nx-dev/data-access-packages/src/lib/sort-packages.ts create mode 100644 nx-dev/nx-dev/lib/navigation-toggle.effect.ts create mode 100644 nx-dev/nx-dev/public/images/background/background.svg create mode 100644 nx-dev/nx-dev/public/images/background/waves-background-final.svg create mode 100644 nx-dev/nx-dev/public/images/background/waves-background.svg create mode 100644 nx-dev/nx-dev/public/images/background/waves-background2.svg delete mode 100644 nx-dev/nx-dev/public/images/conf/miro.webp create mode 100644 nx-dev/nx-dev/public/images/github-nxcloud.webp create mode 100644 nx-dev/nx-dev/public/images/nx-console-dark.webp create mode 100644 nx-dev/nx-dev/public/images/nx-console-light.webp delete mode 100644 nx-dev/nx-dev/public/images/nx-console.webp create mode 100644 nx-dev/nx-dev/public/images/nx-console/vscode-dark.webp create mode 100644 nx-dev/nx-dev/public/images/nx-console/vscode-light.webp create mode 100644 nx-dev/nx-dev/public/videos/dark.mp4 create mode 100644 nx-dev/nx-dev/public/videos/dark.webm create mode 100644 nx-dev/nx-dev/public/videos/light.mp4 create mode 100644 nx-dev/nx-dev/public/videos/light.webm create mode 100644 nx-dev/nx-dev/styles/syntax-highlight.css create mode 100644 nx-dev/ui-common/src/lib/documentation-header.tsx create mode 100644 nx-dev/ui-common/src/lib/sidebar-container.tsx delete mode 100644 nx-dev/ui-home/src/lib/affected-command.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/affected-command.tsx delete mode 100644 nx-dev/ui-home/src/lib/cloud-support.tsx delete mode 100644 nx-dev/ui-home/src/lib/dependency-graph.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/dependency-graph.tsx delete mode 100644 nx-dev/ui-home/src/lib/ecosystem-features.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/ecosystem-features.tsx delete mode 100644 nx-dev/ui-home/src/lib/egghead-courses.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/egghead-courses.tsx delete mode 100644 nx-dev/ui-home/src/lib/event-banner.tsx delete mode 100644 nx-dev/ui-home/src/lib/experience-features.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/experience-features.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/github-intergration-tab.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/graph-tab.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/motion.helpers.ts create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/plugins-tab.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/tabs.tsx create mode 100644 nx-dev/ui-home/src/lib/extensible-and-integrated/vscode-integration-tab.tsx delete mode 100644 nx-dev/ui-home/src/lib/getting-started.spec.tsx create mode 100644 nx-dev/ui-home/src/lib/hero.tsx create mode 100644 nx-dev/ui-home/src/lib/logo-cloud.tsx create mode 100644 nx-dev/ui-home/src/lib/migrate.tsx create mode 100644 nx-dev/ui-home/src/lib/migrations-and-code-generation.tsx delete mode 100644 nx-dev/ui-home/src/lib/monorepo-features.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/monorepo-features.tsx create mode 100644 nx-dev/ui-home/src/lib/monorepo-styles.tsx create mode 100644 nx-dev/ui-home/src/lib/newsletter.tsx create mode 100644 nx-dev/ui-home/src/lib/nx-is-fast.tsx delete mode 100644 nx-dev/ui-home/src/lib/nx-playbook.tsx create mode 100644 nx-dev/ui-home/src/lib/nx-statistics.tsx delete mode 100644 nx-dev/ui-home/src/lib/open-platform.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/open-platform.tsx delete mode 100644 nx-dev/ui-home/src/lib/open-source-projects.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/open-source-projects.tsx delete mode 100644 nx-dev/ui-home/src/lib/performance.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/performance.tsx delete mode 100644 nx-dev/ui-home/src/lib/vscode-plugin.spec.tsx delete mode 100644 nx-dev/ui-home/src/lib/vscode-plugin.tsx create mode 100644 nx-dev/ui-home/src/lib/why-is-nx-fast.tsx delete mode 100644 nx-dev/ui-home/src/lib/youtube-channel.tsx create mode 100644 nx-dev/ui-markdoc/src/lib/tags/cards.component.tsx create mode 100644 nx-dev/ui-markdoc/src/lib/tags/cards.schema.ts create mode 100644 nx-dev/ui-theme/.babelrc create mode 100644 nx-dev/ui-theme/.eslintrc.json create mode 100644 nx-dev/ui-theme/README.md create mode 100644 nx-dev/ui-theme/jest.config.ts create mode 100644 nx-dev/ui-theme/project.json create mode 100644 nx-dev/ui-theme/src/index.ts create mode 100644 nx-dev/ui-theme/src/lib/theme-switcher.component.tsx create mode 100644 nx-dev/ui-theme/src/lib/theme.provider.tsx create mode 100644 nx-dev/ui-theme/tsconfig.json create mode 100644 nx-dev/ui-theme/tsconfig.lib.json create mode 100644 nx-dev/ui-theme/tsconfig.spec.json diff --git a/graph/client/src/app/shell.tsx b/graph/client/src/app/shell.tsx index d7741410e5d82..cd95a504b0a37 100644 --- a/graph/client/src/app/shell.tsx +++ b/graph/client/src/app/shell.tsx @@ -1,4 +1,7 @@ -import { ArrowCircleLeftIcon, DownloadIcon } from '@heroicons/react/solid'; +import { + ArrowLeftCircleIcon, + ArrowDownTrayIcon, +} from '@heroicons/react/24/solid'; import Tippy from '@tippyjs/react'; import classNames from 'classnames'; // nx-ignore-next-line @@ -130,7 +133,7 @@ export function Shell() { id="no-projects-chosen" className="flex text-slate-700 dark:text-slate-400" > - +

Please select projects in the sidebar.

) : null} @@ -170,7 +173,7 @@ export function Shell() { data-cy="downloadImageButton" onClick={downloadImage} > - + diff --git a/graph/client/src/app/sidebar/focused-project-panel.tsx b/graph/client/src/app/sidebar/focused-project-panel.tsx index 323516f67d13c..63d85505a054f 100644 --- a/graph/client/src/app/sidebar/focused-project-panel.tsx +++ b/graph/client/src/app/sidebar/focused-project-panel.tsx @@ -1,4 +1,4 @@ -import { ArrowCircleRightIcon, XCircleIcon } from '@heroicons/react/solid'; +import { ArrowRightCircleIcon, XCircleIcon } from '@heroicons/react/24/solid'; import { memo } from 'react'; export interface FocusedProjectPanelProps { @@ -16,7 +16,7 @@ export const FocusedProjectPanel = memo( onClick={() => resetFocus()} >

- + Focused on {focusedProject}

diff --git a/graph/client/src/app/sidebar/project-list.tsx b/graph/client/src/app/sidebar/project-list.tsx index 912cf4d42aa23..e0f9334c6911a 100644 --- a/graph/client/src/app/sidebar/project-list.tsx +++ b/graph/client/src/app/sidebar/project-list.tsx @@ -1,8 +1,8 @@ import { - DocumentSearchIcon, + DocumentMagnifyingGlassIcon, FlagIcon, - LocationMarkerIcon, -} from '@heroicons/react/solid'; + MapPinIcon, +} from '@heroicons/react/24/solid'; // nx-ignore-next-line import type { ProjectGraphNode } from '@nrwl/devkit'; import { useDepGraphService } from '../hooks/use-dep-graph'; @@ -92,7 +92,7 @@ function ProjectListItem({ title="Focus on this library" onClick={() => focusProject(project.projectGraphNode.name)} > - + @@ -108,7 +108,7 @@ function ProjectListItem({ : 'ring-slate-200 dark:ring-slate-600' } flex items-center rounded-l-md border-slate-300 bg-white p-1 font-medium text-slate-500 shadow-sm ring-1 transition hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-400 dark:ring-slate-600 hover:dark:bg-slate-700`} > - +
- + {start ? (
- +
diff --git a/nx-dev/data-access-documents/src/lib/documents.api.ts b/nx-dev/data-access-documents/src/lib/documents.api.ts index 9e47181d1ddbd..788b75a0fe840 100644 --- a/nx-dev/data-access-documents/src/lib/documents.api.ts +++ b/nx-dev/data-access-documents/src/lib/documents.api.ts @@ -70,21 +70,29 @@ export class DocumentsApi { if (!found) return null; - const cardListItems = items?.map((i) => ({ - name: i.name, - path: i.path ?? '/' + path.concat(i.id).join('/'), - })); + const cardsTemplate = items + ?.map((i) => ({ + title: i.name, + description: i.description ?? '', + url: i.path ?? '/' + path.concat(i.id).join('/'), + })) + .map( + (card) => + `{% card title="${card.title}" description="${card.description}" url="${card.url}" /%}\n` + ) + .join(''); return { filePath: '', data: { title: found?.name, }, - content: `# ${found?.name}\n\n ${ - found?.description ?? '' - }\n\n {% card-list items="${encodeURI( - JSON.stringify(cardListItems) - )}" /%}`, + content: [ + `# ${found?.name}\n\n ${found?.description ?? ''}\n\n`, + '{% cards %}\n', + cardsTemplate, + '{% /cards %}\n\n', + ].join(''), }; } @@ -214,8 +222,9 @@ export class DocumentsApi { /** * Displays a list of all concepts, recipes or reference documents that are tagged with the specified tag * Tags are defined in map.json - * @param tag * @returns + * @param tags + * @param path */ private getRelatedDocumentsSection(tags: string[], path: string[]): string { let relatedConcepts: MenuItem[] = []; diff --git a/nx-dev/data-access-menu/src/lib/menu.utils.ts b/nx-dev/data-access-menu/src/lib/menu.utils.ts index 7ea98c3138fc5..8569fe9df3008 100644 --- a/nx-dev/data-access-menu/src/lib/menu.utils.ts +++ b/nx-dev/data-access-menu/src/lib/menu.utils.ts @@ -84,18 +84,48 @@ export function getDeepDiveSection(items: MenuItem[]): MenuSection { } export function getPackageApiSection(items: MenuItem[]): MenuSection { + const getGuides = (menu: MenuItem) => + menu.itemList?.filter( + (x) => !x.path?.includes('executors') && !x.path?.includes('generators') + ) || []; + const getExecutors = (menu: MenuItem) => + menu.itemList?.filter((x) => x.path?.includes('executors')) || []; + const getGenerators = (menu: MenuItem) => + menu.itemList?.filter((x) => x.path?.includes('generators')) || []; + return { id: 'official-packages', name: 'Reference', - itemList: items.filter( - (m) => - m.id !== 'add-nx-to-monorepo' && - m.id !== 'cra-to-nx' && - m.id !== 'create-nx-plugin' && - m.id !== 'create-nx-workspace' && - m.id !== 'make-angular-cli-faster' && - m.id !== 'tao' - ), + itemList: items + .filter( + (m) => + m.id !== 'add-nx-to-monorepo' && + m.id !== 'cra-to-nx' && + m.id !== 'create-nx-plugin' && + m.id !== 'create-nx-workspace' && + m.id !== 'make-angular-cli-faster' && + m.id !== 'tao' + ) + .map((m) => ({ + ...m, + itemList: [ + { + id: m.id + '-guides', + name: 'Guides', + itemList: getGuides(m), + }, + { + id: m.id + '-executors', + name: 'Executors', + itemList: getExecutors(m), + }, + { + id: m.id + '-generators', + name: 'Generators', + itemList: getGenerators(m), + }, + ], + })), }; } diff --git a/nx-dev/data-access-packages/src/index.ts b/nx-dev/data-access-packages/src/index.ts index fb61249db0c17..d420a407c30c6 100644 --- a/nx-dev/data-access-packages/src/index.ts +++ b/nx-dev/data-access-packages/src/index.ts @@ -1,3 +1,4 @@ export * from './lib/get-title-for-schema'; export * from './lib/get-description-for-schema'; export * from './lib/lookup'; +export * from './lib/sort-packages'; diff --git a/nx-dev/data-access-packages/src/lib/sort-packages.ts b/nx-dev/data-access-packages/src/lib/sort-packages.ts new file mode 100644 index 0000000000000..2b1c8a4ceeabb --- /dev/null +++ b/nx-dev/data-access-packages/src/lib/sort-packages.ts @@ -0,0 +1,9 @@ +export function sortCorePackagesFirst( + itemList: ItemType[] +): ItemType[] { + const nxPackageIds = ['nx', 'workspace', 'devkit', 'nx-plugin']; + return [ + ...nxPackageIds.map((id) => itemList.find((item) => item.id === id)), + ...itemList.filter((item) => !nxPackageIds.includes(item.id)), + ].filter((item): item is ItemType => !!item); +} diff --git a/nx-dev/feature-doc-viewer/src/lib/content.tsx b/nx-dev/feature-doc-viewer/src/lib/content.tsx index 19a3ed4961738..9cabf1417ee92 100644 --- a/nx-dev/feature-doc-viewer/src/lib/content.tsx +++ b/nx-dev/feature-doc-viewer/src/lib/content.tsx @@ -7,8 +7,10 @@ export interface ContentProps { export function Content(props: ContentProps): JSX.Element { return ( -
-
{renderMarkdown(props.document)}
+
+
+ {renderMarkdown(props.document)} +
); } diff --git a/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx b/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx index f1310ac3a1e4d..83a65efe7a377 100644 --- a/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx +++ b/nx-dev/feature-doc-viewer/src/lib/doc-viewer.tsx @@ -1,16 +1,16 @@ import { DocumentData } from '@nrwl/nx-dev/models-document'; import { Menu } from '@nrwl/nx-dev/models-menu'; -import { Sidebar } from '@nrwl/nx-dev/ui-common'; -import cx from 'classnames'; +import { Breadcrumbs, Footer, SidebarContainer } from '@nrwl/nx-dev/ui-common'; import { NextSeo } from 'next-seo'; import { useRouter } from 'next/router'; +import { useEffect, useRef } from 'react'; import { Content } from './content'; export interface DocumentationFeatureDocViewerProps { menu: Menu; document: DocumentData; toc: any; - navIsOpen?: boolean; + navIsOpen: boolean; } export function DocViewer({ @@ -18,8 +18,25 @@ export function DocViewer({ menu, navIsOpen, }: DocumentationFeatureDocViewerProps): JSX.Element { + const wrapperElement = useRef(null); const router = useRouter(); + useEffect(() => { + const handleRouteChange = (url: string) => { + if (url.includes('#')) return; + if (!wrapperElement) return; + + (wrapperElement as any).current.scrollTo({ + top: 0, + left: 0, + behavior: 'smooth', + }); + }; + + router.events.on('routeChangeComplete', handleRouteChange); + return () => router.events.off('routeChangeComplete', handleRouteChange); + }, [router, wrapperElement]); + return ( <> -
-
- -
+ +
+
+
+
+ +
-
-
+
+
@@ -87,7 +106,7 @@ export function DocViewer({ target="_blank" rel="noreferrer" title="Edit this page on Github" - className="focus:ring-blue-nx-base focus:border-blue-nx-base relative -ml-px inline-flex items-center rounded-r-md border border-gray-200 bg-white px-4 py-2 text-xs font-medium text-gray-600 hover:bg-gray-50 focus:z-10 focus:outline-none focus:ring-1" + className="focus:ring-blue-nx-base focus:border-blue-nx-base relative -ml-px inline-flex items-center rounded-r-md border border-slate-200 bg-white px-4 py-2 text-xs font-medium text-slate-600 hover:bg-gray-50 focus:z-10 focus:outline-none focus:ring-1 dark:border-slate-700 dark:bg-slate-800/60 dark:text-slate-400 dark:hover:bg-slate-800" > Edit this page @@ -95,6 +114,7 @@ export function DocViewer({
+
); diff --git a/nx-dev/feature-package-schema-viewer/src/lib/content.tsx b/nx-dev/feature-package-schema-viewer/src/lib/content.tsx index db0e256a0c3ed..97c1ec8616141 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/content.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/content.tsx @@ -1,4 +1,4 @@ -import { XCircleIcon } from '@heroicons/react/solid'; +import { XCircleIcon } from '@heroicons/react/24/solid'; import { getSchemaFromReference } from '@nrwl/nx-dev/data-access-packages'; import { JsonSchema1, NxSchema } from '@nrwl/nx-dev/models-package'; import { renderMarkdown } from '@nrwl/nx-dev/ui-markdoc'; @@ -92,136 +92,135 @@ export function Content({ }; return ( - <> -
-
-
- +
+ - {/* We remove the top description on sub property lookup */} - {!schemaViewModel.subReference && ( - <> -
{vm.markdown}
-
{/* SPACER */}
- - )} - - {/*TODO@ben: create new component*/} - {schemaViewModel.type === 'executors' && !schemaViewModel.subReference && ( -
- -

- Try out this interactive editor of the configuration object. - Values are validated as you type and hovering over labels will - give you more information. -

- {!!schemaViewModel.currentSchema.presets.length && ( - <> - -

- These buttons show the config object for specific common - tasks. -

-
- {schemaViewModel.currentSchema.presets.map((p) => ( - - ))} - {!!presets.length && ( - - )} -
- - )} -
- -
+ {/* We remove the top description on sub property lookup */} + {!schemaViewModel.subReference && ( + <> +
+ {vm.markdown}
- )} +
{/* SPACER */}
+ + )} -
- - {!schemaViewModel.subReference && ( - + {/*TODO@ben: create new component*/} + {schemaViewModel.type === 'executors' && !schemaViewModel.subReference && ( +
+ +

+ Try out this interactive editor of the configuration object. Values + are validated as you type and hovering over labels will give you + more information. +

+ {!!schemaViewModel.currentSchema.presets.length && ( + <> + +

+ These buttons show the config object for specific common tasks. +

+
+ {schemaViewModel.currentSchema.presets.map((p) => ( + + ))} + {!!presets.length && ( + + )} +
+ )} - {schemaViewModel.subReference && ( - + - )} +
+ )} + +
+ + {!schemaViewModel.subReference && ( + + )} + {schemaViewModel.subReference && ( + + )}
- +
); } diff --git a/nx-dev/feature-package-schema-viewer/src/lib/package-schema-list.tsx b/nx-dev/feature-package-schema-viewer/src/lib/package-schema-list.tsx index f1882c4f07ac4..f73ab313a82e6 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/package-schema-list.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/package-schema-list.tsx @@ -1,19 +1,40 @@ +import { Menu } from '@nrwl/nx-dev/models-menu'; import { PackageMetadata } from '@nrwl/nx-dev/models-package'; -import { Breadcrumbs } from '@nrwl/nx-dev/ui-common'; +import { Breadcrumbs, Footer, SidebarContainer } from '@nrwl/nx-dev/ui-common'; import { renderMarkdown } from '@nrwl/nx-dev/ui-markdoc'; -import cx from 'classnames'; import { NextSeo } from 'next-seo'; import { useRouter } from 'next/router'; -import { ReactNode } from 'react'; +import { ReactNode, useEffect, useRef } from 'react'; import { Heading1 } from './ui/headings'; import { PackageReference } from './ui/package-reference'; export function PackageSchemaList({ + menu, + navIsOpen, pkg, }: { + menu: Menu; + navIsOpen: boolean; pkg: PackageMetadata; }): JSX.Element { const router = useRouter(); + const wrapperElement = useRef(null); + + useEffect(() => { + const handleRouteChange = (url: string) => { + if (url.includes('#')) return; + if (!wrapperElement) return; + + (wrapperElement as any).current.scrollTo({ + top: 0, + left: 0, + behavior: 'smooth', + }); + }; + + router.events.on('routeChangeComplete', handleRouteChange); + return () => router.events.off('routeChangeComplete', handleRouteChange); + }, [router, wrapperElement]); const vm: { pkg: { @@ -79,64 +100,69 @@ export function PackageSchemaList({ type: 'website', }} /> -
-
-
-
-
- -
-
-
- + +
+
+
+
+ +
+
+
+ -
- + + + {vm.pkg.name} +
+
- - -
{vm.markdown}
+ - +
+ {vm.markdown}
+ + x.id === vm.pkg.id) + ?.itemList.find((y) => y.id === vm.pkg.id + '-guides')} + executors={pkg.executors} + generators={pkg.generators} + />
+
); diff --git a/nx-dev/feature-package-schema-viewer/src/lib/package-schema-viewer.tsx b/nx-dev/feature-package-schema-viewer/src/lib/package-schema-viewer.tsx index d8c6f97f0e923..c0d33803c4912 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/package-schema-viewer.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/package-schema-viewer.tsx @@ -1,17 +1,39 @@ -import { Breadcrumbs } from '@nrwl/nx-dev/ui-common'; -import cx from 'classnames'; +import { Menu } from '@nrwl/nx-dev/models-menu'; +import { Breadcrumbs, Footer, SidebarContainer } from '@nrwl/nx-dev/ui-common'; import { NextSeo } from 'next-seo'; import { useRouter } from 'next/router'; +import { useEffect, useRef } from 'react'; import Content from './content'; import { getSchemaViewModel, SchemaViewModel } from './get-schema-view-model'; import { SchemaRequest } from './schema-request.models'; export function PackageSchemaViewer({ + menu, + navIsOpen, schemaRequest, }: { + menu: Menu; + navIsOpen: boolean; schemaRequest: SchemaRequest; }): JSX.Element { const router = useRouter(); + const wrapperElement = useRef(null); + + useEffect(() => { + const handleRouteChange = (url: string) => { + if (url.includes('#')) return; + if (!wrapperElement) return; + + (wrapperElement as any).current.scrollTo({ + top: 0, + left: 0, + behavior: 'smooth', + }); + }; + + router.events.on('routeChangeComplete', handleRouteChange); + return () => router.events.off('routeChangeComplete', handleRouteChange); + }, [router, wrapperElement]); const vm: { schema: SchemaViewModel | null; @@ -63,20 +85,22 @@ export function PackageSchemaViewer({ type: 'website', }} /> -
-
-
-
+ +
+
+
+
+
); diff --git a/nx-dev/feature-package-schema-viewer/src/lib/parameter-view.tsx b/nx-dev/feature-package-schema-viewer/src/lib/parameter-view.tsx index ad8722e793b20..e6225d20ca480 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/parameter-view.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/parameter-view.tsx @@ -24,23 +24,23 @@ export const ParameterView = (props: { {props.alias && ( {props.alias} )} {props.required && ( - + Required )} {props.deprecated && ( - + Deprecated )} {((props.schema as any)['hidden'] as boolean) && ( - + Hidden )} @@ -60,7 +60,7 @@ export const ParameterView = (props: { )}
-
+
{renderMarkdown({ content: props.description, data: {}, @@ -69,7 +69,7 @@ export const ParameterView = (props: {
{props.deprecated && !!props.schema['x-deprecated'] && ( -
+
{renderMarkdown({ content: props.schema['x-deprecated'] as string, data: {}, diff --git a/nx-dev/feature-package-schema-viewer/src/lib/schema-editor.tsx b/nx-dev/feature-package-schema-viewer/src/lib/schema-editor.tsx index dfc25c067b9ae..70df2e777c26e 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/schema-editor.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/schema-editor.tsx @@ -1,5 +1,6 @@ import Editor, { useMonaco } from '@monaco-editor/react'; import { JsonSchema } from '@nrwl/nx-dev/models-package'; +import { useTheme } from '@nrwl/nx-dev/ui-theme'; import { useEffect } from 'react'; export const SchemaEditor = ({ @@ -15,6 +16,7 @@ export const SchemaEditor = ({ content: Record; schema: JsonSchema; }): JSX.Element => { + const [theme] = useTheme(); const monaco = useMonaco(); useEffect(() => { @@ -41,7 +43,7 @@ export const SchemaEditor = ({ JSON.stringify(content, null, 2) } path="a://b/example.json" - theme="vs-light" + theme={theme === 'dark' ? 'vs-dark' : 'vs-light'} options={{ scrollBeyondLastLine: false }} saveViewState={false} /> diff --git a/nx-dev/feature-package-schema-viewer/src/lib/types/type.tsx b/nx-dev/feature-package-schema-viewer/src/lib/types/type.tsx index 30adccda6a6a8..6f7e0b2430379 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/types/type.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/types/type.tsx @@ -1,4 +1,4 @@ -import { ExternalLinkIcon, LinkIcon } from '@heroicons/react/solid'; +import { ArrowTopRightOnSquareIcon, LinkIcon } from '@heroicons/react/24/solid'; import { getSchemaFromResult, getTitleForSchema, @@ -101,7 +101,7 @@ const LinkType = ({ return ( external reference: {schema.$ref}{' '} - + ); } diff --git a/nx-dev/feature-package-schema-viewer/src/lib/ui/headings.tsx b/nx-dev/feature-package-schema-viewer/src/lib/ui/headings.tsx index c5d936c29091a..76540313a6651 100644 --- a/nx-dev/feature-package-schema-viewer/src/lib/ui/headings.tsx +++ b/nx-dev/feature-package-schema-viewer/src/lib/ui/headings.tsx @@ -1,10 +1,10 @@ -import { LinkIcon } from '@heroicons/react/solid'; +import { LinkIcon } from '@heroicons/react/24/solid'; import { slugify } from '../slugify.utils'; export const Heading1 = ({ title }: { title: string }) => (

{title}

      + + ); +} + function SchemaListItem({ schema, type, @@ -69,21 +110,17 @@ function SchemaListItem({ return (
    • - {type === 'executors' ? ( - - ) : ( - - )} -
      -

      +

      + {type === 'executors' ? ( + + ) : ( + + )} +
      +
      +

      @@ -91,7 +128,7 @@ function SchemaListItem({

      -
      +
      {renderMarkdown({ content: schema.description, data: {}, @@ -103,15 +140,21 @@ function SchemaListItem({ ); } -function EmptyList({ type }: { type: 'executor' | 'generator' }): JSX.Element { +function EmptyList({ + type, +}: { + type: 'executor' | 'generator' | 'guides'; +}): JSX.Element { return ( -
    • - -
      -

      +

    • +
      + +
      +
      +

      @@ -119,7 +162,7 @@ function EmptyList({ type }: { type: 'executor' | 'generator' }): JSX.Element {

      -
      +
      a { position: relative; font-size: 0.875rem; - border-bottom: 1px solid theme('colors.slate.100'); + /*border-bottom: 1px solid theme('colors.slate.100');*/ + @apply border-b border-slate-100 dark:border-slate-800; } .DocSearch-Hit--Result { @@ -82,6 +84,7 @@ .DocSearch-MagnifierLabel { @apply h-6 w-6 flex-none; + /* magnifying glass icon */ background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m19 19-3.5-3.5' stroke='%23475569' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Ccircle cx='11' cy='11' r='6' stroke='%23475569' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); } @@ -95,16 +98,17 @@ .DocSearch-Input { appearance: none; - background: transparent; + background: transparent !important; border: none !important; box-shadow: none !important; - color: theme('colors.slate.900'); + /*color: theme('colors.slate.900');*/ flex: auto; font-size: 1rem; height: 3.5rem; margin-left: 0.75rem; margin-right: 1rem; min-width: 0; + @apply text-slate-700 dark:text-slate-300; } @screen sm { @@ -130,11 +134,11 @@ font-size: 0; border-radius: 0.375rem; padding: 0.25rem 0.375rem; - @apply shadow-sm ring-1 ring-slate-900/5 hover:shadow hover:ring-slate-900/10; + @apply border border-slate-900/5 hover:border-slate-900/10 dark:border-slate-100/10 dark:hover:border-slate-100/20; width: 1.75rem; height: 1.5rem; - /* esc */ - background-image: url("data:image/svg+xml,%3Csvg width='16' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.506 6h3.931V4.986H1.736v-1.39h2.488V2.583H1.736V1.196h2.69V.182H.506V6ZM8.56 1.855h1.18C9.721.818 8.87.102 7.574.102c-1.276 0-2.21.705-2.205 1.762-.003.858.602 1.35 1.585 1.585l.634.159c.633.153.986.335.988.727-.002.426-.406.716-1.03.716-.64 0-1.1-.295-1.14-.878h-1.19c.03 1.259.931 1.91 2.343 1.91 1.42 0 2.256-.68 2.259-1.745-.003-.969-.733-1.483-1.744-1.71l-.523-.125c-.506-.117-.93-.304-.92-.722 0-.375.332-.65.934-.65.588 0 .949.267.994.724ZM15.78 2.219C15.618.875 14.6.102 13.254.102c-1.537 0-2.71 1.086-2.71 2.989 0 1.898 1.153 2.989 2.71 2.989 1.492 0 2.392-.992 2.526-2.063l-1.244-.006c-.117.623-.606.98-1.262.98-.883 0-1.483-.656-1.483-1.9 0-1.21.591-1.9 1.492-1.9.673 0 1.159.389 1.253 1.028h1.244Z' fill='%23334155'/%3E%3C/svg%3E") !important; + /* esc icon */ + background-image: url("data:image/svg+xml,%3Csvg width='16' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.506 6h3.931V4.986H1.736v-1.39h2.488V2.583H1.736V1.196h2.69V.182H.506V6ZM8.56 1.855h1.18C9.721.818 8.87.102 7.574.102c-1.276 0-2.21.705-2.205 1.762-.003.858.602 1.35 1.585 1.585l.634.159c.633.153.986.335.988.727-.002.426-.406.716-1.03.716-.64 0-1.1-.295-1.14-.878h-1.19c.03 1.259.931 1.91 2.343 1.91 1.42 0 2.256-.68 2.259-1.745-.003-.969-.733-1.483-1.744-1.71l-.523-.125c-.506-.117-.93-.304-.92-.722 0-.375.332-.65.934-.65.588 0 .949.267.994.724ZM15.78 2.219C15.618.875 14.6.102 13.254.102c-1.537 0-2.71 1.086-2.71 2.989 0 1.898 1.153 2.989 2.71 2.989 1.492 0 2.392-.992 2.526-2.063l-1.244-.006c-.117.623-.606.98-1.262.98-.883 0-1.483-.656-1.483-1.9 0-1.21.591-1.9 1.492-1.9.673 0 1.159.389 1.253 1.028h1.244Z' fill='%236B7280'/%3E%3C/svg%3E") !important; background-position: center; background-repeat: no-repeat; background-size: 57.1428571429% auto; @@ -147,9 +151,10 @@ .DocSearch-Hit-source { line-height: 1.5rem; font-weight: 600; - color: theme('colors.slate.900'); + /*color: theme('colors.slate.900');*/ padding-top: 2.5rem; margin: 0 1.5rem 1rem; + @apply text-slate-900 dark:text-slate-300; } .DocSearch-Hits:first-child .DocSearch-Hit-source { @@ -182,7 +187,7 @@ background-repeat: no-repeat; background-position: center center; - @apply bg-white shadow-sm ring-1 ring-slate-900/5; + @apply bg-white shadow-sm ring-1 ring-slate-900/5 dark:ring-slate-100/5; } .DocSearch-Hit-content-wrapper { @@ -198,19 +203,15 @@ font-size: 0.75rem; line-height: 1.5rem; font-weight: 600; - color: theme('colors.slate.700'); - background: theme('colors.slate.100'); + /*color: theme('colors.slate.700');*/ + /*background: theme('colors.slate.100');*/ border-radius: 999px; padding: 0 0.375rem; -} - -.DocSearch-Hit[aria-selected='true'] .DocSearch-Hit-icon { - @apply bg-transparent shadow-none ring-1 ring-white/30; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.75 1v10M8.25 1v10M1 3.75h10M1 8.25h10' stroke='%23fff' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E"); + @apply border border-slate-200 bg-slate-100 text-slate-700 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-400; } .DocSearch-Hit-title { - @apply truncate leading-6 text-slate-700; + @apply truncate leading-6 text-slate-900 dark:text-slate-200; } .DocSearch-Hit-title + .DocSearch-Hit-path { @@ -259,7 +260,7 @@ } .DocSearch-Hit:first-child > a { - @apply border-t border-slate-100; + @apply border-t border-slate-100 dark:border-slate-800; } .DocSearch-Hit--Result { @@ -271,15 +272,15 @@ } .DocSearch-Hit--Result { - @apply rounded-lg bg-slate-50; + @apply rounded-lg bg-slate-50 dark:bg-slate-800/60; } .DocSearch-Hit[aria-selected='true'] > a { - @apply bg-slate-50; + @apply bg-slate-50 dark:bg-slate-800/60; } .DocSearch-Hit[aria-selected='true'] .DocSearch-Hit--Result { - @apply bg-blue-nx-base; + @apply bg-slate-50 dark:bg-slate-800/60; } .DocSearch-Hit--FirstChild::before { @@ -292,20 +293,15 @@ .DocSearch-Hits mark { background: none; - @apply text-blue-nx-base border-blue-nx-base border-b-2 font-semibold; + @apply border-b-2 border-blue-500 font-semibold text-blue-500 dark:border-sky-500 dark:text-sky-500; } .DocSearch-Hit-path mark { @apply border-0; } -.DocSearch-Hit[aria-selected='true'] mark { - color: inherit; - border-bottom-color: currentColor; -} - .DocSearch-Footer { - @apply flex flex-none justify-end border-t border-slate-100 py-4 px-6; + @apply flex flex-none justify-end border-t border-slate-100 py-4 px-6 dark:border-slate-800; } .DocSearch-Commands { @@ -313,7 +309,7 @@ } .DocSearch-Logo a { - @apply flex items-center text-xs font-medium text-slate-400; + @apply flex items-center text-xs font-medium text-slate-400 dark:text-slate-600; } .DocSearch-Logo svg { @@ -335,11 +331,11 @@ } .DocSearch-Title strong { - @apply font-normal text-slate-900; + @apply font-normal text-slate-900 dark:text-slate-200; } .DocSearch-StartScreen .DocSearch-Help { - @apply py-16 px-6 text-center text-slate-400; + @apply py-16 px-6 text-center text-slate-400 dark:text-slate-600; } .DocSearch-NoResults { @@ -348,15 +344,16 @@ .DocSearch-NoResults .DocSearch-Title { text-align: center; - color: theme('colors.slate.400'); + /*color: theme('colors.slate.400');*/ + @apply text-slate-500; } .DocSearch-NoResults-Prefill-List .DocSearch-Help { - @apply mb-3 text-sm font-semibold leading-6 text-slate-900; + @apply mb-3 text-sm font-semibold leading-6 text-slate-900 dark:text-slate-200; } .DocSearch-NoResults-Prefill-List ul { - @apply rounded-lg border border-slate-200 bg-slate-50; + @apply rounded-lg border border-slate-200 bg-slate-50 dark:border-slate-800 dark:bg-slate-900; } .DocSearch-NoResults-Prefill-List button { @@ -370,11 +367,11 @@ background-repeat: no-repeat; background-position: right 0.75rem center; - @apply text-slate-700; + @apply text-slate-700 dark:text-slate-400; } .DocSearch-NoResults-Prefill-List li + li button { - @apply border-t border-slate-200; + @apply border-t border-slate-200 dark:border-slate-800; } .DocSearch-NoResults-Prefill-List + .DocSearch-Help { @@ -382,7 +379,7 @@ } .DocSearch-NoResults-Prefill-List + .DocSearch-Help a { - @apply font-semibold text-blue-500; + @apply font-semibold text-blue-500 dark:text-sky-500; } .DocSearch-Hit-action [title='Save this search'], @@ -420,7 +417,7 @@ .DocSearch-Hit[aria-selected='true'] [title='Remove this search from favorites']::before { - @apply bg-slate-100; + @apply bg-slate-100 dark:bg-slate-800; } .DocSearch-Hit-action [title='Remove this search from favorites']::after { @@ -444,5 +441,5 @@ } .DocSearch-Hit-action + .DocSearch-Hit-action { - @apply ml-3 border-l border-slate-200 pl-3; + @apply ml-3 border-l border-slate-100 pl-3 dark:border-slate-800; } diff --git a/nx-dev/feature-search/src/lib/algolia-search.tsx b/nx-dev/feature-search/src/lib/algolia-search.tsx index 9b8b63b18fa34..e650c98b2fb78 100644 --- a/nx-dev/feature-search/src/lib/algolia-search.tsx +++ b/nx-dev/feature-search/src/lib/algolia-search.tsx @@ -3,7 +3,7 @@ import { InternalDocSearchHit, StoredDocSearchHit, } from '@docsearch/react/dist/esm/types'; -import { SearchIcon } from '@heroicons/react/solid'; +import { MagnifyingGlassIcon } from '@heroicons/react/24/solid'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -27,7 +27,11 @@ function Hit({ ); } -export function AlgoliaSearch(): JSX.Element { +export function AlgoliaSearch({ + tiny = false, +}: { + tiny?: boolean; +}): JSX.Element { const router = useRouter(); const [isOpen, setIsOpen] = useState(false); const searchButtonRef = useRef(null); @@ -78,31 +82,56 @@ export function AlgoliaSearch(): JSX.Element { crossOrigin="true" /> - + + + Search Documentation... + + + Press + + + {actionKey[0]} + + + and + K + to search + + + ) : ( + + )} + {isOpen && createPortal( { it('should display the primary heading', () => { cy.get('[data-cy="primary-heading"]').should( 'contain', - 'Smart, Fast and Extensible Build System' + 'Smart, FastExtensibleBuild System' ); }); }); diff --git a/nx-dev/nx-dev-e2e/src/integration/packages.spec.ts b/nx-dev/nx-dev-e2e/src/integration/packages.spec.ts index d5b86bcef3edd..2a2735dec2758 100644 --- a/nx-dev/nx-dev-e2e/src/integration/packages.spec.ts +++ b/nx-dev/nx-dev-e2e/src/integration/packages.spec.ts @@ -528,28 +528,3 @@ describe('nx-dev: Packages Section', () => { }, ]).forEach((page) => assertTextOnPage(page.path, page.title)); }); - -/** - * Asserting that URL applied filters are working as expected - */ -describe('nx-dev: Packages Section - URL hash as filter', () => { - it('should filter packages by the URL hash', () => { - cy.visit('/packages#storybook'); - cy.get('section#storybook').should('exist'); - cy.get('section#cypress').should('not.exist'); - cy.get('section#angular').should('not.exist'); - cy.get('section#detox').should('not.exist'); - cy.get('section#react').should('not.exist'); - cy.get('section#workspace').should('not.exist'); - }); - - it('should show all packages if the hash does not correspond to a package', () => { - cy.visit('/packages#asdfg'); - cy.get('section#storybook').should('exist'); - cy.get('section#cypress').should('exist'); - cy.get('section#angular').should('exist'); - cy.get('section#detox').should('exist'); - cy.get('section#react').should('exist'); - cy.get('section#workspace').should('exist'); - }); -}); diff --git a/nx-dev/nx-dev/lib/navigation-toggle.effect.ts b/nx-dev/nx-dev/lib/navigation-toggle.effect.ts new file mode 100644 index 0000000000000..9bfe89a7d2855 --- /dev/null +++ b/nx-dev/nx-dev/lib/navigation-toggle.effect.ts @@ -0,0 +1,35 @@ +import Router from 'next/router'; +import { useCallback, useEffect, useState } from 'react'; + +export function useNavToggle() { + const [navIsOpen, setNavIsOpen] = useState(false); + const toggleNav = useCallback(() => { + setNavIsOpen(!navIsOpen); + }, [navIsOpen, setNavIsOpen]); + + useEffect(() => { + if (!navIsOpen) return; + + function handleRouteChange() { + setNavIsOpen(false); + } + + Router.events.on('routeChangeComplete', handleRouteChange); + + return () => Router.events.off('routeChangeComplete', handleRouteChange); + }, [navIsOpen, setNavIsOpen]); + + useEffect(() => { + if (typeof window === 'undefined') return; + if (!navIsOpen) return; + + function hideNav() { + setNavIsOpen(false); + } + + window.addEventListener('resize', hideNav); + return () => window.removeEventListener('resize', hideNav); + }, [navIsOpen, setNavIsOpen]); + + return { navIsOpen, toggleNav }; +} diff --git a/nx-dev/nx-dev/next.config.js b/nx-dev/nx-dev/next.config.js index 6d515195f901f..98efba6633359 100644 --- a/nx-dev/nx-dev/next.config.js +++ b/nx-dev/nx-dev/next.config.js @@ -14,7 +14,6 @@ copy( ); module.exports = withNx({ - scrollRestoration: true, experimental: { nextScriptWorkers: true, // Enable PartyTown offloading script strategy }, diff --git a/nx-dev/nx-dev/pages/404.tsx b/nx-dev/nx-dev/pages/404.tsx index 98e99ee415c0a..33481f20a73e9 100644 --- a/nx-dev/nx-dev/pages/404.tsx +++ b/nx-dev/nx-dev/pages/404.tsx @@ -6,7 +6,7 @@ export function FourOhFour(): JSX.Element { return ( <> -
      +
      { - setNavIsOpen(!navIsOpen); - }, [navIsOpen, setNavIsOpen]); - - useEffect(() => { - if (!navIsOpen) return; - - function handleRouteChange() { - setNavIsOpen(false); - } - - Router.events.on('routeChangeComplete', handleRouteChange); - - return () => Router.events.off('routeChangeComplete', handleRouteChange); - }, [navIsOpen, setNavIsOpen]); - - return { navIsOpen, toggleNav }; -} - -function SidebarButton(props: { onClick: () => void; navIsOpen: boolean }) { - return ( - - ); -} - export default function DocumentationPage( props: DocumentationPageProps ): JSX.Element { @@ -129,14 +55,31 @@ export default function DocumentationPage( /> ), }; - if (!!pkg) { - vm.entryComponent = ; + vm.entryComponent = ( + ( + menu.sections.filter((x) => x.id === 'official-packages')[0] + ?.itemList + ), + }} + pkg={pkg} + /> + ); } if (!!pkg && !!schemaRequest) { vm.entryComponent = ( ( + menu.sections.filter((x) => x.id === 'official-packages')[0] + ?.itemList + ), + }} schemaRequest={{ ...schemaRequest, pkg, @@ -147,12 +90,18 @@ export default function DocumentationPage( return ( <> -
      -
      - {vm.entryComponent} - {!pkg && } -
      - {!navIsOpen ?