feat(graph): update graph lib to latest nx graph (#29768)
This commit is contained in:
parent
b8ee838e23
commit
1c2d0860b5
@ -3,7 +3,7 @@ import {
|
|||||||
ErrorToastUI,
|
ErrorToastUI,
|
||||||
ExpandedTargetsProvider,
|
ExpandedTargetsProvider,
|
||||||
getExternalApiService,
|
getExternalApiService,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import { useSelector } from '@xstate/react';
|
import { useSelector } from '@xstate/react';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { Interpreter } from 'xstate';
|
import { Interpreter } from 'xstate';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { ExternalApi, getExternalApiService } from '@nx/graph/shared';
|
import { ExternalApi, getExternalApiService } from '@nx/graph/legacy/shared';
|
||||||
import { getRouter } from './get-router';
|
import { getRouter } from './get-router';
|
||||||
import { getProjectGraphService } from './machines/get-services';
|
import { getProjectGraphService } from './machines/get-services';
|
||||||
import { getGraphService } from './machines/graph.service';
|
import { getGraphService } from './machines/graph.service';
|
||||||
|
|||||||
@ -16,6 +16,7 @@ export const compositeGraphStateConfig: ProjectGraphStateNodeConfig = {
|
|||||||
dependencies: ctx.dependencies,
|
dependencies: ctx.dependencies,
|
||||||
fileMap: ctx.fileMap,
|
fileMap: ctx.fileMap,
|
||||||
affectedProjects: ctx.affectedProjects,
|
affectedProjects: ctx.affectedProjects,
|
||||||
|
touchedProjects: [],
|
||||||
workspaceLayout: ctx.workspaceLayout,
|
workspaceLayout: ctx.workspaceLayout,
|
||||||
groupByFolder: ctx.groupByFolder,
|
groupByFolder: ctx.groupByFolder,
|
||||||
selectedProjects: ctx.selectedProjects,
|
selectedProjects: ctx.selectedProjects,
|
||||||
@ -36,6 +37,7 @@ export const compositeGraphStateConfig: ProjectGraphStateNodeConfig = {
|
|||||||
dependencies: ctx.dependencies,
|
dependencies: ctx.dependencies,
|
||||||
fileMap: ctx.fileMap,
|
fileMap: ctx.fileMap,
|
||||||
affectedProjects: ctx.affectedProjects,
|
affectedProjects: ctx.affectedProjects,
|
||||||
|
touchedProjects: [],
|
||||||
workspaceLayout: ctx.workspaceLayout,
|
workspaceLayout: ctx.workspaceLayout,
|
||||||
groupByFolder: ctx.groupByFolder,
|
groupByFolder: ctx.groupByFolder,
|
||||||
selectedProjects: ctx.selectedProjects,
|
selectedProjects: ctx.selectedProjects,
|
||||||
|
|||||||
@ -73,6 +73,7 @@ export const projectGraphMachine = createMachine<
|
|||||||
dependencies: ctx.dependencies,
|
dependencies: ctx.dependencies,
|
||||||
fileMap: ctx.fileMap,
|
fileMap: ctx.fileMap,
|
||||||
affectedProjects: ctx.affectedProjects,
|
affectedProjects: ctx.affectedProjects,
|
||||||
|
touchedProjects: [],
|
||||||
workspaceLayout: ctx.workspaceLayout,
|
workspaceLayout: ctx.workspaceLayout,
|
||||||
groupByFolder: ctx.groupByFolder,
|
groupByFolder: ctx.groupByFolder,
|
||||||
collapseEdges: ctx.collapseEdges,
|
collapseEdges: ctx.collapseEdges,
|
||||||
@ -150,6 +151,7 @@ export const projectGraphMachine = createMachine<
|
|||||||
projects: ctx.projects,
|
projects: ctx.projects,
|
||||||
dependencies: ctx.dependencies,
|
dependencies: ctx.dependencies,
|
||||||
affectedProjects: ctx.affectedProjects,
|
affectedProjects: ctx.affectedProjects,
|
||||||
|
touchedProjects: [],
|
||||||
fileMap: ctx.fileMap,
|
fileMap: ctx.fileMap,
|
||||||
workspaceLayout: ctx.workspaceLayout,
|
workspaceLayout: ctx.workspaceLayout,
|
||||||
groupByFolder: ctx.groupByFolder,
|
groupByFolder: ctx.groupByFolder,
|
||||||
@ -172,6 +174,7 @@ export const projectGraphMachine = createMachine<
|
|||||||
projects: ctx.projects,
|
projects: ctx.projects,
|
||||||
dependencies: ctx.dependencies,
|
dependencies: ctx.dependencies,
|
||||||
affectedProjects: ctx.affectedProjects,
|
affectedProjects: ctx.affectedProjects,
|
||||||
|
touchedProjects: [],
|
||||||
fileMap: ctx.fileMap,
|
fileMap: ctx.fileMap,
|
||||||
workspaceLayout: ctx.workspaceLayout,
|
workspaceLayout: ctx.workspaceLayout,
|
||||||
groupByFolder: ctx.groupByFolder,
|
groupByFolder: ctx.groupByFolder,
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { DebouncedTextInput } from '@nx/graph/ui-components';
|
import { DebouncedTextInput } from '@nx/graph/legacy/components';
|
||||||
|
|
||||||
export interface TextFilterPanelProps {
|
export interface TextFilterPanelProps {
|
||||||
textFilter: string;
|
textFilter: string;
|
||||||
|
|||||||
@ -25,7 +25,7 @@ import { ExperimentalFeature } from '../ui-components/experimental-feature';
|
|||||||
import { TracingAlgorithmType } from './machines/interfaces';
|
import { TracingAlgorithmType } from './machines/interfaces';
|
||||||
import { getProjectGraphService } from '../machines/get-services';
|
import { getProjectGraphService } from '../machines/get-services';
|
||||||
import { Link, useNavigate, useNavigation } from 'react-router-dom';
|
import { Link, useNavigate, useNavigation } from 'react-router-dom';
|
||||||
import { useRouteConstructor } from '@nx/graph/shared';
|
import { useRouteConstructor } from '@nx/graph/legacy/shared';
|
||||||
import { CompositeNode } from '../interfaces';
|
import { CompositeNode } from '../interfaces';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ import {
|
|||||||
useEnvironmentConfig,
|
useEnvironmentConfig,
|
||||||
usePoll,
|
usePoll,
|
||||||
useRouteConstructor,
|
useRouteConstructor,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import {
|
import {
|
||||||
useNavigate,
|
useNavigate,
|
||||||
useParams,
|
useParams,
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import {
|
|||||||
import { WorkspaceLayout } from '../interfaces';
|
import { WorkspaceLayout } from '../interfaces';
|
||||||
import { ExclamationCircleIcon, EyeIcon } from '@heroicons/react/24/outline';
|
import { ExclamationCircleIcon, EyeIcon } from '@heroicons/react/24/outline';
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import { Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { TaskGraphErrorTooltip } from './task-graph-error-tooltip';
|
import { TaskGraphErrorTooltip } from './task-graph-error-tooltip';
|
||||||
|
|
||||||
interface SidebarProject {
|
interface SidebarProject {
|
||||||
|
|||||||
@ -15,9 +15,8 @@ import type {
|
|||||||
import { useEffect, useMemo } from 'react';
|
import { useEffect, useMemo } from 'react';
|
||||||
import { getGraphService } from '../machines/graph.service';
|
import { getGraphService } from '../machines/graph.service';
|
||||||
import { CheckboxPanel } from '../ui-components/checkbox-panel';
|
import { CheckboxPanel } from '../ui-components/checkbox-panel';
|
||||||
|
import { Dropdown } from '@nx/graph/legacy/components';
|
||||||
import { useRouteConstructor } from '@nx/graph/shared';
|
import { useRouteConstructor } from '@nx/graph/legacy/shared';
|
||||||
import { Dropdown } from '@nx/graph/ui-components';
|
|
||||||
import { useCurrentPath } from '../hooks/use-current-path';
|
import { useCurrentPath } from '../hooks/use-current-path';
|
||||||
import { ShowHideAll } from '../ui-components/show-hide-all';
|
import { ShowHideAll } from '../ui-components/show-hide-all';
|
||||||
import { createTaskName } from '../util';
|
import { createTaskName } from '../util';
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { createBrowserRouter, createHashRouter } from 'react-router-dom';
|
import { createBrowserRouter, createHashRouter } from 'react-router-dom';
|
||||||
import { getRoutesForEnvironment } from './routes';
|
import { getRoutesForEnvironment } from './routes';
|
||||||
import { getEnvironmentConfig } from '@nx/graph/shared';
|
import { getEnvironmentConfig } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
let router;
|
let router;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { matchRoutes, useLocation } from 'react-router-dom';
|
import { matchRoutes, useLocation } from 'react-router-dom';
|
||||||
import { getRoutesForEnvironment } from '../routes';
|
import { getRoutesForEnvironment } from '../routes';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { getEnvironmentConfig } from '@nx/graph/shared';
|
import { getEnvironmentConfig } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
export const useCurrentPath = () => {
|
export const useCurrentPath = () => {
|
||||||
const [lastLocation, setLastLocation] = useState<string>();
|
const [lastLocation, setLastLocation] = useState<string>();
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { interpret, InterpreterStatus } from 'xstate';
|
import { interpret, InterpreterStatus } from 'xstate';
|
||||||
import { projectGraphMachine } from '../feature-projects/machines/project-graph.machine';
|
import { projectGraphMachine } from '../feature-projects/machines/project-graph.machine';
|
||||||
import { getGraphService } from './graph.service';
|
import { getGraphService } from './graph.service';
|
||||||
import { GraphTooltipService } from '@nx/graph/ui-graph';
|
import { GraphTooltipService } from '@nx/graph/legacy/graph';
|
||||||
|
|
||||||
let projectGraphService = interpret(projectGraphMachine, {
|
let projectGraphService = interpret(projectGraphMachine, {
|
||||||
devTools: !!window.useXstateInspect,
|
devTools: !!window.useXstateInspect,
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { GraphService } from '@nx/graph/ui-graph';
|
|
||||||
import {
|
import {
|
||||||
getEnvironmentConfig,
|
getEnvironmentConfig,
|
||||||
getProjectGraphDataService,
|
getProjectGraphDataService,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
|
import { GraphService } from '@nx/graph/legacy/graph';
|
||||||
import { selectValueByThemeStatic } from '@nx/graph-internal/ui-theme';
|
import { selectValueByThemeStatic } from '@nx/graph-internal/ui-theme';
|
||||||
|
|
||||||
let graphService: GraphService;
|
let graphService: GraphService;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import type { ProjectGraphProjectNode } from 'nx/src/config/project-graph';
|
|||||||
import {
|
import {
|
||||||
getEnvironmentConfig,
|
getEnvironmentConfig,
|
||||||
getProjectGraphDataService,
|
getProjectGraphDataService,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import { TasksSidebarErrorBoundary } from './feature-tasks/tasks-sidebar-error-boundary';
|
import { TasksSidebarErrorBoundary } from './feature-tasks/tasks-sidebar-error-boundary';
|
||||||
import { ProjectDetailsPage } from '@nx/graph-internal/project-details';
|
import { ProjectDetailsPage } from '@nx/graph-internal/project-details';
|
||||||
import { ErrorBoundary } from './ui-components/error-boundary';
|
import { ErrorBoundary } from './ui-components/error-boundary';
|
||||||
|
|||||||
@ -18,10 +18,11 @@ import {
|
|||||||
getProjectGraphDataService,
|
getProjectGraphDataService,
|
||||||
useEnvironmentConfig,
|
useEnvironmentConfig,
|
||||||
usePoll,
|
usePoll,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import { Dropdown, Spinner } from '@nx/graph/ui-components';
|
import { Dropdown, Spinner } from '@nx/graph/legacy/components';
|
||||||
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
|
|
||||||
import { getSystemTheme, Theme, ThemePanel } from '@nx/graph-internal/ui-theme';
|
import { getSystemTheme, Theme, ThemePanel } from '@nx/graph-internal/ui-theme';
|
||||||
import { Tooltip } from '@nx/graph/ui-tooltips';
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useEffect, useLayoutEffect, useState } from 'react';
|
import { useEffect, useLayoutEffect, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { GraphPerfReport } from '../interfaces';
|
import { GraphPerfReport } from '../interfaces';
|
||||||
import { Dropdown } from '@nx/graph/ui-components';
|
import { Dropdown } from '@nx/graph/legacy/components';
|
||||||
import type { WorkspaceData } from '@nx/graph/shared';
|
import type { WorkspaceData } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
export interface DebuggerPanelProps {
|
export interface DebuggerPanelProps {
|
||||||
projects: WorkspaceData[];
|
projects: WorkspaceData[];
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import {
|
|||||||
getProjectGraphDataService,
|
getProjectGraphDataService,
|
||||||
useEnvironmentConfig,
|
useEnvironmentConfig,
|
||||||
usePoll,
|
usePoll,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import {
|
import {
|
||||||
isRouteErrorResponse,
|
isRouteErrorResponse,
|
||||||
useParams,
|
useParams,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable @nx/enforce-module-boundaries */
|
/* eslint-disable @nx/enforce-module-boundaries */
|
||||||
// nx-ignore-next-line
|
// nx-ignore-next-line
|
||||||
import { ErrorRenderer } from '@nx/graph/ui-components';
|
import { ErrorRenderer } from '@nx/graph/legacy/components';
|
||||||
import { GraphError } from 'nx/src/command-line/graph/graph';
|
import { GraphError } from 'nx/src/command-line/graph/graph';
|
||||||
/* eslint-enable @nx/enforce-module-boundaries */
|
/* eslint-enable @nx/enforce-module-boundaries */
|
||||||
import type { JSX } from 'react';
|
import type { JSX } from 'react';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { useEnvironmentConfig } from '@nx/graph/shared';
|
import { useEnvironmentConfig } from '@nx/graph/legacy/shared';
|
||||||
import { Children, cloneElement } from 'react';
|
import { Children, cloneElement } from 'react';
|
||||||
|
|
||||||
export function ExperimentalFeature(props) {
|
export function ExperimentalFeature(props) {
|
||||||
|
|||||||
@ -12,9 +12,12 @@ import {
|
|||||||
ProjectNodeTooltipActions,
|
ProjectNodeTooltipActions,
|
||||||
TaskNodeTooltip,
|
TaskNodeTooltip,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from '@nx/graph/ui-tooltips';
|
} from '@nx/graph/legacy/tooltips';
|
||||||
import { TaskNodeActions } from './task-node-actions';
|
import { TaskNodeActions } from './task-node-actions';
|
||||||
import { getExternalApiService, useRouteConstructor } from '@nx/graph/shared';
|
import {
|
||||||
|
getExternalApiService,
|
||||||
|
useRouteConstructor,
|
||||||
|
} from '@nx/graph/legacy/shared';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';
|
import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';
|
||||||
import { TaskNodeTooltipProps } from '@nx/graph/ui-tooltips';
|
import { TaskNodeTooltipProps } from '@nx/graph/legacy/tooltips';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
export function TaskNodeActions(props: TaskNodeTooltipProps) {
|
export function TaskNodeActions(props: TaskNodeTooltipProps) {
|
||||||
@ -9,7 +9,7 @@ export function TaskNodeActions(props: TaskNodeTooltipProps) {
|
|||||||
}, [props.id]);
|
}, [props.id]);
|
||||||
const project = props.id.split(':')[0];
|
const project = props.id.split(':')[0];
|
||||||
return (
|
return (
|
||||||
<div className="w-full w-full min-w-[350px] max-w-full overflow-auto rounded-md border border-slate-200 dark:border-slate-800">
|
<div className="w-full min-w-[350px] max-w-full overflow-auto rounded-md border border-slate-200 dark:border-slate-800">
|
||||||
<div
|
<div
|
||||||
className="flex w-full items-center justify-between bg-slate-50 px-4 py-2 text-xs font-medium uppercase text-slate-500 dark:bg-slate-800 dark:text-slate-400"
|
className="flex w-full items-center justify-between bg-slate-50 px-4 py-2 text-xs font-medium uppercase text-slate-500 dark:bg-slate-800 dark:text-slate-400"
|
||||||
onClick={() => setIsOpen(!isOpen)}
|
onClick={() => setIsOpen(!isOpen)}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useRouteConstructor } from '@nx/graph/shared';
|
import { useRouteConstructor } from '@nx/graph/legacy/shared';
|
||||||
import { ThemePanel } from '@nx/graph-internal/ui-theme';
|
import { ThemePanel } from '@nx/graph-internal/ui-theme';
|
||||||
|
|
||||||
export function ProjectDetailsHeader() {
|
export function ProjectDetailsHeader() {
|
||||||
|
|||||||
@ -17,7 +17,7 @@ import {
|
|||||||
getProjectGraphDataService,
|
getProjectGraphDataService,
|
||||||
useEnvironmentConfig,
|
useEnvironmentConfig,
|
||||||
usePoll,
|
usePoll,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import { ProjectDetailsHeader } from './project-details-header';
|
import { ProjectDetailsHeader } from './project-details-header';
|
||||||
|
|
||||||
export function ProjectDetailsPage() {
|
export function ProjectDetailsPage() {
|
||||||
|
|||||||
@ -11,8 +11,8 @@ import {
|
|||||||
getExternalApiService,
|
getExternalApiService,
|
||||||
useEnvironmentConfig,
|
useEnvironmentConfig,
|
||||||
useRouteConstructor,
|
useRouteConstructor,
|
||||||
} from '@nx/graph/shared';
|
} from '@nx/graph/legacy/shared';
|
||||||
import { Spinner } from '@nx/graph/ui-components';
|
import { Spinner } from '@nx/graph/legacy/components';
|
||||||
|
|
||||||
import { ProjectDetails } from '@nx/graph-internal/ui-project-details';
|
import { ProjectDetails } from '@nx/graph-internal/ui-project-details';
|
||||||
import { useCallback, useContext, useEffect } from 'react';
|
import { useCallback, useContext, useEffect } from 'react';
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
import SyntaxHighlighter, { createElement } from 'react-syntax-highlighter';
|
import SyntaxHighlighter, { createElement } from 'react-syntax-highlighter';
|
||||||
import { JSX, ReactNode, useMemo } from 'react';
|
import { JSX, ReactNode, useMemo } from 'react';
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
import { CopyToClipboardButton } from '@nx/graph/ui-components';
|
import { CopyToClipboardButton } from '@nx/graph/legacy/components';
|
||||||
|
|
||||||
export function JsonCodeBlockPreTag({
|
export function JsonCodeBlockPreTag({
|
||||||
children,
|
children,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { Meta } from '@storybook/react';
|
import type { Meta } from '@storybook/react';
|
||||||
import { ProjectDetails } from './project-details';
|
import { ProjectDetails } from './project-details';
|
||||||
import { ExpandedTargetsProvider } from '@nx/graph/shared';
|
import { ExpandedTargetsProvider } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
const meta: Meta<typeof ProjectDetails> = {
|
const meta: Meta<typeof ProjectDetails> = {
|
||||||
component: ProjectDetails,
|
component: ProjectDetails,
|
||||||
|
|||||||
@ -5,13 +5,14 @@ import type { ProjectGraphProjectNode } from '@nx/devkit';
|
|||||||
import { GraphError } from 'nx/src/command-line/graph/graph';
|
import { GraphError } from 'nx/src/command-line/graph/graph';
|
||||||
/* eslint-enable @nx/enforce-module-boundaries */
|
/* eslint-enable @nx/enforce-module-boundaries */
|
||||||
import { EyeIcon } from '@heroicons/react/24/outline';
|
import { EyeIcon } from '@heroicons/react/24/outline';
|
||||||
import { PropertyInfoTooltip, Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
import { TagList } from '../tag-list/tag-list';
|
import { TagList } from '../tag-list/tag-list';
|
||||||
import { OwnersList } from '../owners-list/owners-list';
|
import { OwnersList } from '../owners-list/owners-list';
|
||||||
import { TargetConfigurationGroupList } from '../target-configuration-details-group-list/target-configuration-details-group-list';
|
import { TargetConfigurationGroupList } from '../target-configuration-details-group-list/target-configuration-details-group-list';
|
||||||
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
||||||
import { TargetTechnologies } from '../target-technologies/target-technologies';
|
import { TargetTechnologies } from '../target-technologies/target-technologies';
|
||||||
|
import { PropertyInfoTooltip } from '../tooltips/property-info-tooltip';
|
||||||
|
|
||||||
export interface ProjectDetailsProps {
|
export interface ProjectDetailsProps {
|
||||||
project: ProjectGraphProjectNode;
|
project: ProjectGraphProjectNode;
|
||||||
|
|||||||
@ -1,12 +1,15 @@
|
|||||||
import { Fragment, ReactNode, useMemo, useState } from 'react';
|
import { Fragment, ReactNode, useMemo, useState } from 'react';
|
||||||
import { PlayIcon, XMarkIcon } from '@heroicons/react/24/outline';
|
import { PlayIcon, XMarkIcon } from '@heroicons/react/24/outline';
|
||||||
import { Transition } from '@headlessui/react';
|
import { Transition } from '@headlessui/react';
|
||||||
import { getExternalApiService, useEnvironmentConfig } from '@nx/graph/shared';
|
import {
|
||||||
|
getExternalApiService,
|
||||||
|
useEnvironmentConfig,
|
||||||
|
} from '@nx/graph/legacy/shared';
|
||||||
/* eslint-disable @nx/enforce-module-boundaries */
|
/* eslint-disable @nx/enforce-module-boundaries */
|
||||||
// nx-ignore-next-line
|
// nx-ignore-next-line
|
||||||
import type { TargetConfiguration } from '@nx/devkit';
|
import type { TargetConfiguration } from '@nx/devkit';
|
||||||
import { TerminalOutput } from '@nx/nx-dev/ui-fence';
|
import { TerminalOutput } from '@nx/nx-dev/ui-fence';
|
||||||
import { Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
||||||
|
|
||||||
interface ShowOptionsHelpProps {
|
interface ShowOptionsHelpProps {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { SourcemapInfoToolTip, Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { InformationCircleIcon } from '@heroicons/react/24/outline';
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
import { SourcemapInfoToolTip } from '../tooltips/sourcemap-info-tooltip';
|
||||||
|
|
||||||
export function SourceInfo(props: {
|
export function SourceInfo(props: {
|
||||||
data: Array<string>;
|
data: Array<string>;
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import {
|
|||||||
TargetConfigurationGroupList,
|
TargetConfigurationGroupList,
|
||||||
TargetConfigurationGroupListProps,
|
TargetConfigurationGroupListProps,
|
||||||
} from './target-configuration-details-group-list';
|
} from './target-configuration-details-group-list';
|
||||||
import { ExpandedTargetsProvider } from '@nx/graph/shared';
|
import { ExpandedTargetsProvider } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
const meta: Meta<typeof TargetConfigurationGroupList> = {
|
const meta: Meta<typeof TargetConfigurationGroupList> = {
|
||||||
component: TargetConfigurationGroupList,
|
component: TargetConfigurationGroupList,
|
||||||
|
|||||||
@ -1,25 +1,22 @@
|
|||||||
/* eslint-disable @nx/enforce-module-boundaries */
|
/* eslint-disable @nx/enforce-module-boundaries */
|
||||||
// nx-ignore-next-line
|
// nx-ignore-next-line
|
||||||
import type { TargetConfiguration } from '@nx/devkit';
|
import type { TargetConfiguration } from '@nx/devkit';
|
||||||
import { CopyToClipboardButton } from '@nx/graph/ui-components';
|
|
||||||
import {
|
import {
|
||||||
ChevronDownIcon,
|
ChevronDownIcon,
|
||||||
ChevronUpIcon,
|
ChevronUpIcon,
|
||||||
EyeIcon,
|
EyeIcon,
|
||||||
PlayIcon,
|
PlayIcon,
|
||||||
} from '@heroicons/react/24/outline';
|
} from '@heroicons/react/24/outline';
|
||||||
|
import { CopyToClipboardButton } from '@nx/graph/legacy/components';
|
||||||
import {
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
AtomizerTooltip,
|
|
||||||
PropertyInfoTooltip,
|
|
||||||
Tooltip,
|
|
||||||
} from '@nx/graph/ui-tooltips';
|
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
import { Pill } from '../pill';
|
import { Pill } from '../pill';
|
||||||
import { TargetTechnologies } from '../target-technologies/target-technologies';
|
import { TargetTechnologies } from '../target-technologies/target-technologies';
|
||||||
import { SourceInfo } from '../source-info/source-info';
|
import { SourceInfo } from '../source-info/source-info';
|
||||||
import { getDisplayHeaderFromTargetConfiguration } from '../utils/get-display-header-from-target-configuration';
|
import { getDisplayHeaderFromTargetConfiguration } from '../utils/get-display-header-from-target-configuration';
|
||||||
import { TargetExecutor } from '../target-executor/target-executor';
|
import { TargetExecutor } from '../target-executor/target-executor';
|
||||||
|
import { AtomizerTooltip } from '../tooltips/atomizer-tooltip';
|
||||||
|
import { PropertyInfoTooltip } from '../tooltips/property-info-tooltip';
|
||||||
|
|
||||||
export interface TargetConfigurationDetailsHeaderProps {
|
export interface TargetConfigurationDetailsHeaderProps {
|
||||||
isCollasped: boolean;
|
isCollasped: boolean;
|
||||||
@ -150,6 +147,17 @@ export const TargetConfigurationDetailsHeader = ({
|
|||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
|
{(targetConfiguration as any).continuous && (
|
||||||
|
<Tooltip
|
||||||
|
openAction="hover"
|
||||||
|
strategy="fixed"
|
||||||
|
content={(<PropertyInfoTooltip type="continuous" />) as any}
|
||||||
|
>
|
||||||
|
<span className="inline-flex">
|
||||||
|
<Pill text="Continuous" color="grey" />
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
|
|||||||
@ -2,9 +2,9 @@
|
|||||||
// nx-ignore-next-line
|
// nx-ignore-next-line
|
||||||
import type { TargetConfiguration } from '@nx/devkit';
|
import type { TargetConfiguration } from '@nx/devkit';
|
||||||
import { JsonCodeBlock } from '@nx/graph-internal/ui-code-block';
|
import { JsonCodeBlock } from '@nx/graph-internal/ui-code-block';
|
||||||
import { ExpandedTargetsContext } from '@nx/graph/shared';
|
import { ExpandedTargetsContext } from '@nx/graph/legacy/shared';
|
||||||
import { CopyToClipboardButton } from '@nx/graph/ui-components';
|
import { CopyToClipboardButton } from '@nx/graph/legacy/components';
|
||||||
import { PropertyInfoTooltip, Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { useCallback, useContext, useEffect, useState } from 'react';
|
import { useCallback, useContext, useEffect, useState } from 'react';
|
||||||
import { Pill } from '../pill';
|
import { Pill } from '../pill';
|
||||||
import { ShowOptionsHelp } from '../show-all-options/show-options-help';
|
import { ShowOptionsHelp } from '../show-all-options/show-options-help';
|
||||||
@ -18,7 +18,7 @@ import { getTaskSyncGenerators } from '../utils/sync-generators';
|
|||||||
import { FadingCollapsible } from './fading-collapsible';
|
import { FadingCollapsible } from './fading-collapsible';
|
||||||
import { TargetConfigurationProperty } from './target-configuration-property';
|
import { TargetConfigurationProperty } from './target-configuration-property';
|
||||||
import { TooltipTriggerText } from './tooltip-trigger-text';
|
import { TooltipTriggerText } from './tooltip-trigger-text';
|
||||||
|
import { PropertyInfoTooltip } from '../tooltips/property-info-tooltip';
|
||||||
interface TargetConfigurationDetailsProps {
|
interface TargetConfigurationDetailsProps {
|
||||||
projectName: string;
|
projectName: string;
|
||||||
targetName: string;
|
targetName: string;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Tooltip } from '@nx/graph/ui-tooltips';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { JSX, ReactNode } from 'react';
|
import { JSX, ReactNode } from 'react';
|
||||||
import { TooltipTriggerText } from './tooltip-trigger-text';
|
import { TooltipTriggerText } from './tooltip-trigger-text';
|
||||||
import { QuestionMarkCircleIcon } from '@heroicons/react/24/outline';
|
import { QuestionMarkCircleIcon } from '@heroicons/react/24/outline';
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { PropertyInfoTooltip, Tooltip } from '@nx/graph/ui-tooltips';
|
import { CopyToClipboardButton } from '@nx/graph/legacy/components';
|
||||||
import { CopyToClipboardButton } from '@nx/graph/ui-components';
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
import { TooltipTriggerText } from '../target-configuration-details/tooltip-trigger-text';
|
||||||
|
import { PropertyInfoTooltip } from '../tooltips/property-info-tooltip';
|
||||||
|
|
||||||
export function TargetExecutorTitle({
|
export function TargetExecutorTitle({
|
||||||
commands,
|
commands,
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { ExternalLink } from '@nx/graph/ui-tooltips';
|
import { ExternalLink } from '../tooltips/external-link';
|
||||||
|
|
||||||
export interface TargetExecutorProps {
|
export interface TargetExecutorProps {
|
||||||
command?: string;
|
command?: string;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { TechnologyIcon } from '@nx/graph/ui-icons';
|
import { TechnologyIcon } from '@nx/graph/legacy/icons';
|
||||||
import { HTMLProps } from 'react';
|
import { HTMLProps } from 'react';
|
||||||
|
|
||||||
export interface TargetTechnologiesProps extends HTMLProps<HTMLDivElement> {
|
export interface TargetTechnologiesProps extends HTMLProps<HTMLDivElement> {
|
||||||
|
|||||||
@ -0,0 +1,72 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/react';
|
||||||
|
import { AtomizerTooltip, AtomizerTooltipProps } from './atomizer-tooltip';
|
||||||
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
|
|
||||||
|
const meta: Meta<typeof AtomizerTooltip> = {
|
||||||
|
component: AtomizerTooltip,
|
||||||
|
title: 'Tooltips/AtomizerTooltip',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof AtomizerTooltip>;
|
||||||
|
|
||||||
|
export const Cloud: Story = {
|
||||||
|
args: {
|
||||||
|
connectedToCloud: true,
|
||||||
|
nonAtomizedTarget: 'e2e',
|
||||||
|
} as AtomizerTooltipProps,
|
||||||
|
render: (args) => {
|
||||||
|
return (
|
||||||
|
<div className="flex w-full justify-center">
|
||||||
|
<Tooltip
|
||||||
|
open={true}
|
||||||
|
openAction="manual"
|
||||||
|
content={(<AtomizerTooltip {...args} />) as any}
|
||||||
|
>
|
||||||
|
<p>Internal Reference</p>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NoCloud: Story = {
|
||||||
|
args: {
|
||||||
|
connectedToCloud: false,
|
||||||
|
nonAtomizedTarget: 'e2e',
|
||||||
|
} as AtomizerTooltipProps,
|
||||||
|
render: (args) => {
|
||||||
|
return (
|
||||||
|
<div className="flex w-full justify-center">
|
||||||
|
<Tooltip
|
||||||
|
open={true}
|
||||||
|
openAction="manual"
|
||||||
|
content={(<AtomizerTooltip {...args} />) as any}
|
||||||
|
>
|
||||||
|
<p>Internal Reference</p>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NoCloudConsole: Story = {
|
||||||
|
args: {
|
||||||
|
connectedToCloud: false,
|
||||||
|
nonAtomizedTarget: 'e2e',
|
||||||
|
nxConnectCallback: () => console.log('nxConnectCallback'),
|
||||||
|
} as AtomizerTooltipProps,
|
||||||
|
render: (args) => {
|
||||||
|
return (
|
||||||
|
<div className="flex w-full justify-center">
|
||||||
|
<Tooltip
|
||||||
|
open={true}
|
||||||
|
openAction="manual"
|
||||||
|
content={(<AtomizerTooltip {...args} />) as any}
|
||||||
|
>
|
||||||
|
<p>Internal Reference</p>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
107
graph/ui-project-details/src/lib/tooltips/atomizer-tooltip.tsx
Normal file
107
graph/ui-project-details/src/lib/tooltips/atomizer-tooltip.tsx
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
import { NxCloudIcon } from '@nx/graph/legacy/icons';
|
||||||
|
|
||||||
|
export interface AtomizerTooltipProps {
|
||||||
|
connectedToCloud: boolean;
|
||||||
|
nonAtomizedTarget: string;
|
||||||
|
onNxConnect?: () => void;
|
||||||
|
}
|
||||||
|
export function AtomizerTooltip(props: AtomizerTooltipProps) {
|
||||||
|
return (
|
||||||
|
<div className="z-20 max-w-lg text-sm text-slate-700 dark:text-slate-400">
|
||||||
|
<h4 className="flex items-center justify-between border-b border-slate-200 text-base dark:border-slate-700/60">
|
||||||
|
<span className="font-mono">Atomizer</span>
|
||||||
|
</h4>
|
||||||
|
<div
|
||||||
|
className={twMerge(
|
||||||
|
'flex flex-col py-2 font-mono',
|
||||||
|
!props.connectedToCloud
|
||||||
|
? 'border-b border-slate-200 dark:border-slate-700/60'
|
||||||
|
: ''
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<p className="whitespace-pre-wrap normal-case">
|
||||||
|
{'Nx '}
|
||||||
|
<Link
|
||||||
|
href="https://nx.dev/ci/features/split-e2e-tasks"
|
||||||
|
text="automatically split"
|
||||||
|
/>
|
||||||
|
{' the potentially slow'}
|
||||||
|
<code className="mx-2 rounded bg-gray-100 px-1 font-mono text-gray-800 dark:bg-gray-700 dark:text-gray-300">
|
||||||
|
{props.nonAtomizedTarget}
|
||||||
|
</code>
|
||||||
|
{'task into separate tasks for each file. Enable '}
|
||||||
|
{!props.connectedToCloud ? (
|
||||||
|
<Link href="https://nx.app/" text="Nx Cloud" />
|
||||||
|
) : (
|
||||||
|
<Link
|
||||||
|
href="https://nx.dev/ci/features/distribute-task-execution"
|
||||||
|
text="Nx Agents"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{' to benefit from '}
|
||||||
|
<Link
|
||||||
|
href="https://nx.dev/ci/features/distribute-task-execution"
|
||||||
|
text="task distribution"
|
||||||
|
/>
|
||||||
|
{!props.connectedToCloud && (
|
||||||
|
<>
|
||||||
|
{', '}
|
||||||
|
<Link
|
||||||
|
href="https://nx.dev/ci/features/remote-cache"
|
||||||
|
text="remote caching"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
{' and '}
|
||||||
|
<Link
|
||||||
|
href="https://nx.dev/ci/features/flaky-tasks"
|
||||||
|
text="flaky task re-runs"
|
||||||
|
/>
|
||||||
|
. Use
|
||||||
|
<code className="mx-2 rounded bg-gray-100 px-1 font-mono text-gray-800 dark:bg-gray-700 dark:text-gray-300">
|
||||||
|
{props.nonAtomizedTarget}
|
||||||
|
</code>
|
||||||
|
when running without{' '}
|
||||||
|
{!props.connectedToCloud ? 'Nx Cloud' : 'Nx Agents'}.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{!props.connectedToCloud && (
|
||||||
|
<div className="flex py-2">
|
||||||
|
<p className="pr-4 normal-case">
|
||||||
|
{props.onNxConnect ? (
|
||||||
|
<button
|
||||||
|
className="inline-flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 text-base text-slate-600 ring-2 ring-inset ring-slate-400/40 hover:bg-slate-50 dark:text-slate-300 dark:ring-slate-400/30 dark:hover:bg-slate-800/60"
|
||||||
|
onClick={() => props.onNxConnect!()}
|
||||||
|
>
|
||||||
|
<NxCloudIcon className="h-5 w-5"></NxCloudIcon>
|
||||||
|
<span>Connect to Nx Cloud</span>
|
||||||
|
</button>
|
||||||
|
) : (
|
||||||
|
<span className="font-mono">
|
||||||
|
{'Run'}
|
||||||
|
<code className="mx-2 rounded bg-gray-100 px-1 font-mono text-gray-800 dark:bg-gray-700 dark:text-gray-300">
|
||||||
|
nx connect
|
||||||
|
</code>
|
||||||
|
{'to connect to Nx Cloud'}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Link({ href, text }: { href: string; text: string }) {
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
href={href}
|
||||||
|
className="inline text-slate-500 underline decoration-slate-700/50 decoration-dotted decoration-2 dark:text-slate-400 dark:decoration-slate-400/50"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
>
|
||||||
|
{text}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
29
graph/ui-project-details/src/lib/tooltips/external-link.tsx
Normal file
29
graph/ui-project-details/src/lib/tooltips/external-link.tsx
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import { ArrowTopRightOnSquareIcon } from '@heroicons/react/24/outline';
|
||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
export function ExternalLink({
|
||||||
|
children,
|
||||||
|
href,
|
||||||
|
title,
|
||||||
|
className,
|
||||||
|
}: {
|
||||||
|
children?: React.ReactNode;
|
||||||
|
href: string;
|
||||||
|
className?: string;
|
||||||
|
title?: string;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
href={href}
|
||||||
|
title={title}
|
||||||
|
className={twMerge(
|
||||||
|
'gap-2 text-slate-500 hover:underline dark:text-slate-400',
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
>
|
||||||
|
{children} <ArrowTopRightOnSquareIcon className="inline h-4 w-4" />
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/react';
|
||||||
|
import {
|
||||||
|
PropertyInfoTooltip,
|
||||||
|
PropertyInfoTooltipProps,
|
||||||
|
} from './property-info-tooltip';
|
||||||
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
|
|
||||||
|
const meta: Meta<typeof PropertyInfoTooltip> = {
|
||||||
|
component: PropertyInfoTooltip,
|
||||||
|
title: 'Tooltips/PropertyInfoToolTip',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof PropertyInfoTooltip>;
|
||||||
|
|
||||||
|
export const Primary: Story = {
|
||||||
|
render: (args) => (
|
||||||
|
<div className="flex w-full justify-center">
|
||||||
|
<Tooltip open={true} content={(<PropertyInfoTooltip {...args} />) as any}>
|
||||||
|
<p>Internal Reference</p>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
args: {
|
||||||
|
type: 'inputs',
|
||||||
|
} as PropertyInfoTooltipProps,
|
||||||
|
};
|
||||||
@ -0,0 +1,140 @@
|
|||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
import { ExternalLink } from './external-link';
|
||||||
|
|
||||||
|
type PropertyInfoTooltipType =
|
||||||
|
| 'targets'
|
||||||
|
| 'executors'
|
||||||
|
| 'cacheable'
|
||||||
|
| 'inputs'
|
||||||
|
| 'outputs'
|
||||||
|
| 'dependsOn'
|
||||||
|
| 'options'
|
||||||
|
| 'configurations'
|
||||||
|
| 'release'
|
||||||
|
| 'parallelism'
|
||||||
|
| 'syncGenerators'
|
||||||
|
| 'continuous';
|
||||||
|
|
||||||
|
type PropertyInfoTooltipTypeOptions = {
|
||||||
|
docsUrl?: string;
|
||||||
|
docsLinkText?: string;
|
||||||
|
heading: string;
|
||||||
|
description: string;
|
||||||
|
};
|
||||||
|
export interface PropertyInfoTooltipProps {
|
||||||
|
type: PropertyInfoTooltipType;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PROPERTY_INFO_TOOLTIP_TYPE_OPTIONS: Record<
|
||||||
|
PropertyInfoTooltipType,
|
||||||
|
PropertyInfoTooltipTypeOptions
|
||||||
|
> = {
|
||||||
|
targets: {
|
||||||
|
docsUrl: 'https://nx.dev/features/run-tasks',
|
||||||
|
docsLinkText: 'Learn more about running tasks',
|
||||||
|
heading: 'Target',
|
||||||
|
description:
|
||||||
|
'A Target is the definition of a task for a project. These can be run in many different ways.',
|
||||||
|
},
|
||||||
|
executors: {
|
||||||
|
docsUrl: 'https://nx.dev/concepts/executors-and-configurations',
|
||||||
|
heading: 'Executors',
|
||||||
|
description:
|
||||||
|
'Executors define what happens when a task is run.\nCheck the documentation of the executor below to learn more about what it does.',
|
||||||
|
},
|
||||||
|
cacheable: {
|
||||||
|
docsUrl: 'https://nx.dev/concepts/how-caching-works',
|
||||||
|
docsLinkText: 'Learn more about Caching',
|
||||||
|
heading: 'Caching',
|
||||||
|
description:
|
||||||
|
'This task will be cached by Nx. When the Inputs have not changed the Outputs will be restored from the cache.',
|
||||||
|
},
|
||||||
|
inputs: {
|
||||||
|
docsUrl: 'https://nx.dev/recipes/running-tasks/configure-inputs',
|
||||||
|
heading: 'Inputs',
|
||||||
|
description: `Inputs are used by the task to produce Outputs. Inputs are used to determine when the Outputs of a task can be restored from the cache.`,
|
||||||
|
},
|
||||||
|
outputs: {
|
||||||
|
docsUrl: 'https://nx.dev/recipes/running-tasks/configure-outputs',
|
||||||
|
heading: 'Outputs',
|
||||||
|
description:
|
||||||
|
'Outputs are the results of a task. Outputs are restored from the cache when the Inputs are the same as a previous run.',
|
||||||
|
},
|
||||||
|
dependsOn: {
|
||||||
|
docsUrl: 'https://nx.dev/concepts/task-pipeline-configuration',
|
||||||
|
docsLinkText: 'Learn more about creating dependencies between tasks',
|
||||||
|
heading: 'Depends On',
|
||||||
|
description:
|
||||||
|
'This is a list of other tasks which must be completed before running this task.',
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
docsUrl: 'https://nx.dev/concepts/executors-and-configurations',
|
||||||
|
heading: 'Options',
|
||||||
|
description: 'Options modify the behaviour of the task.',
|
||||||
|
},
|
||||||
|
configurations: {
|
||||||
|
docsUrl: 'https://nx.dev/concepts/executors-and-configurations',
|
||||||
|
heading: 'Configurations',
|
||||||
|
description:
|
||||||
|
'Configurations are sets of Options to allow a Target to be used in different scenarios.',
|
||||||
|
},
|
||||||
|
release: {
|
||||||
|
heading: 'nx release',
|
||||||
|
description:
|
||||||
|
"The nx-release-publish target is used to publish your project with nxrelease. Don't invoke this directly - use nx release publish instead.",
|
||||||
|
docsUrl: 'https://nx.dev/nx-api/nx/documents/release',
|
||||||
|
},
|
||||||
|
parallelism: {
|
||||||
|
heading: 'Parallelism',
|
||||||
|
description:
|
||||||
|
'By default, tasks are run in parallel with other tasks. Setting `"parallelism": false` ensures that the target will not run in parallel with other tasks on the same machine.',
|
||||||
|
docsUrl: 'https://nx.dev/reference/project-configuration#parallelism',
|
||||||
|
},
|
||||||
|
syncGenerators: {
|
||||||
|
heading: 'Sync Generators',
|
||||||
|
description:
|
||||||
|
'This is a list of generators to run before the task runs to ensure the workspace is up to date.',
|
||||||
|
docsUrl: 'https://nx.dev/concepts/sync-generators',
|
||||||
|
},
|
||||||
|
continuous: {
|
||||||
|
heading: 'Continuous',
|
||||||
|
docsLinkText: 'Learn more about continuous tasks',
|
||||||
|
description:
|
||||||
|
'This is marked as continuous. Nx will not wait for this task to finish before running other tasks.',
|
||||||
|
docsUrl: 'TODO ADD LINK',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export function PropertyInfoTooltip({ type }: PropertyInfoTooltipProps) {
|
||||||
|
const propertyInfo = PROPERTY_INFO_TOOLTIP_TYPE_OPTIONS[type];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="max-w-lg text-sm text-slate-700 dark:text-slate-400">
|
||||||
|
<h4 className="flex items-center justify-between border-b border-slate-200 text-base dark:border-slate-700/60">
|
||||||
|
<span className="font-mono">{propertyInfo.heading}</span>
|
||||||
|
</h4>
|
||||||
|
<div
|
||||||
|
className={twMerge(
|
||||||
|
`flex flex-col py-2 font-mono`,
|
||||||
|
propertyInfo.docsUrl
|
||||||
|
? 'border-b border-slate-200 dark:border-slate-700/60'
|
||||||
|
: ''
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<p className="flex grow items-center gap-2 whitespace-pre-wrap normal-case">
|
||||||
|
{propertyInfo.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{propertyInfo.docsUrl ? (
|
||||||
|
<div className="flex py-2">
|
||||||
|
<p className="flex items-center pr-4">
|
||||||
|
<ExternalLink href={propertyInfo.docsUrl}>
|
||||||
|
{propertyInfo.docsLinkText ??
|
||||||
|
`Learn more about ${propertyInfo.heading}`}
|
||||||
|
</ExternalLink>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
import type { Meta, StoryObj } from '@storybook/react';
|
||||||
|
import {
|
||||||
|
SourcemapInfoToolTip,
|
||||||
|
SourcemapInfoToolTipProps,
|
||||||
|
} from './sourcemap-info-tooltip';
|
||||||
|
import { Tooltip } from '@nx/graph/legacy/tooltips';
|
||||||
|
|
||||||
|
const meta: Meta<typeof SourcemapInfoToolTip> = {
|
||||||
|
component: SourcemapInfoToolTip,
|
||||||
|
title: 'Tooltips/SourcemapInfoToolTip',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof SourcemapInfoToolTip>;
|
||||||
|
|
||||||
|
export const Primary: Story = {
|
||||||
|
render: (args) => (
|
||||||
|
<div className="flex w-full justify-center">
|
||||||
|
<Tooltip
|
||||||
|
open={true}
|
||||||
|
content={(<SourcemapInfoToolTip {...args} />) as any}
|
||||||
|
>
|
||||||
|
<p>Internal Reference</p>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
args: {
|
||||||
|
propertyKey: 'targets.build.command',
|
||||||
|
plugin: 'nx-core-build-project-json-nodes',
|
||||||
|
file: 'tools/eslint-rules/project.json',
|
||||||
|
} as SourcemapInfoToolTipProps,
|
||||||
|
};
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
import { type ReactNode } from 'react';
|
||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
import { ExternalLink } from './external-link';
|
||||||
|
|
||||||
|
export interface SourcemapInfoToolTipProps {
|
||||||
|
propertyKey: string;
|
||||||
|
plugin: string;
|
||||||
|
file: string;
|
||||||
|
children?: ReactNode | ReactNode[];
|
||||||
|
showLink?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SourcemapInfoToolTip({
|
||||||
|
propertyKey,
|
||||||
|
plugin,
|
||||||
|
file,
|
||||||
|
showLink,
|
||||||
|
}: SourcemapInfoToolTipProps) {
|
||||||
|
// Target property key is in the form `target.${targetName}`
|
||||||
|
// Every other property within in the target has the form `target.${targetName}.${propertyName}
|
||||||
|
const isTarget = propertyKey.split('.').length === 2;
|
||||||
|
|
||||||
|
const docsUrlSlug: string | undefined = plugin?.startsWith('@nx/')
|
||||||
|
? plugin.replace('@nx/', '').split('/')[0]
|
||||||
|
: undefined;
|
||||||
|
|
||||||
|
const tooltipContent = (
|
||||||
|
<>
|
||||||
|
<p className="flex grow items-center gap-2">
|
||||||
|
<span className="font-bold">{isTarget ? 'Created' : 'Set'} by:</span>
|
||||||
|
<span className="inline-flex grow items-center justify-between">
|
||||||
|
{docsUrlSlug ? (
|
||||||
|
<ExternalLink href={`https://nx.dev/nx-api/${docsUrlSlug}`}>
|
||||||
|
{plugin}
|
||||||
|
</ExternalLink>
|
||||||
|
) : (
|
||||||
|
`${plugin}`
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span className="font-bold">From:</span> {file}
|
||||||
|
</p>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="max-w-md text-sm text-slate-700 sm:max-w-full dark:text-slate-400">
|
||||||
|
<div
|
||||||
|
className={twMerge(
|
||||||
|
`flex flex-col py-2 font-mono`,
|
||||||
|
showLink ? 'border-b border-slate-200 dark:border-slate-700/60' : ''
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{tooltipContent}
|
||||||
|
</div>
|
||||||
|
{showLink && (
|
||||||
|
<div className="flex py-2">
|
||||||
|
<p className={`flex flex-col gap-1`}>
|
||||||
|
<ExternalLink href="https://nx.dev/concepts/inferred-tasks">
|
||||||
|
Learn more about how projects are configured
|
||||||
|
</ExternalLink>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import { getEnvironmentConfig } from '@nx/graph/shared';
|
import { getEnvironmentConfig } from '@nx/graph/legacy/shared';
|
||||||
|
|
||||||
const htmlEl = document.documentElement;
|
const htmlEl = document.documentElement;
|
||||||
export const localStorageThemeKey = 'nx-dep-graph-theme';
|
export const localStorageThemeKey = 'nx-dep-graph-theme';
|
||||||
|
|||||||
@ -1,26 +1,29 @@
|
|||||||
import { normalizeContent } from './feed-answer';
|
import { normalizeContent } from './feed-answer';
|
||||||
|
|
||||||
jest.mock('@nx/graph/ui-icons', () => {
|
jest.mock('@nx/graph/legacy/tooltips', () => {
|
||||||
|
return {
|
||||||
|
Tooltip: jest.fn(() => null),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
jest.mock('@nx/graph/legacy/icons', () => {
|
||||||
return {
|
return {
|
||||||
Icon: jest.fn(() => null),
|
Icon: jest.fn(() => null),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
jest.mock('@nx/graph/ui-tooltips', () => {
|
|
||||||
return {
|
jest.mock('@nx/graph/legacy/components', () => {
|
||||||
Tooltip: jest.fn(() => null),
|
|
||||||
PropertyInfoTooltip: jest.fn(() => null),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
jest.mock('@nx/graph/ui-components', () => {
|
|
||||||
return {
|
return {
|
||||||
CopyToClipboardButton: jest.fn(() => null),
|
CopyToClipboardButton: jest.fn(() => null),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
jest.mock('@nx/graph/shared', () => {
|
|
||||||
|
jest.mock('@nx/graph/legacy/shared', () => {
|
||||||
return {
|
return {
|
||||||
ExpandedTargetsContext: jest.fn(() => null),
|
ExpandedTargetsContext: jest.fn(() => null),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.mock('@nx/nx-dev/ui-primitives', () => {
|
jest.mock('@nx/nx-dev/ui-primitives', () => {
|
||||||
return {
|
return {
|
||||||
cx: jest.fn(() => null),
|
cx: jest.fn(() => null),
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { ChevronRightIcon } from '@heroicons/react/24/outline';
|
import { ChevronRightIcon } from '@heroicons/react/24/outline';
|
||||||
import { Framework, frameworkIcons } from '@nx/graph/ui-icons';
|
import { Framework, frameworkIcons } from '@nx/graph/legacy/icons';
|
||||||
|
|
||||||
export function CallToAction({
|
export function CallToAction({
|
||||||
url,
|
url,
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import {
|
|||||||
DocumentIcon,
|
DocumentIcon,
|
||||||
PlayCircleIcon,
|
PlayCircleIcon,
|
||||||
} from '@heroicons/react/24/outline';
|
} from '@heroicons/react/24/outline';
|
||||||
import { Framework, frameworkIcons } from '@nx/graph/ui-icons';
|
import { Framework, frameworkIcons } from '@nx/graph/legacy/icons';
|
||||||
import * as nxDevIcons from '@nx/nx-dev/ui-icons';
|
import * as nxDevIcons from '@nx/nx-dev/ui-icons';
|
||||||
import * as heroIcons from '@heroicons/react/24/outline';
|
import * as heroIcons from '@heroicons/react/24/outline';
|
||||||
|
|
||||||
|
|||||||
@ -21,14 +21,16 @@ export function Loading() {
|
|||||||
* in the top level of the module for preloading to work, similar to React.lazy.
|
* in the top level of the module for preloading to work, similar to React.lazy.
|
||||||
*/
|
*/
|
||||||
const NxProjectGraphViz = dynamic(
|
const NxProjectGraphViz = dynamic(
|
||||||
() => import('@nx/graph/ui-graph').then((module) => module.NxProjectGraphViz),
|
() =>
|
||||||
|
import('@nx/graph/legacy/graph').then((module) => module.NxProjectGraphViz),
|
||||||
{
|
{
|
||||||
ssr: false,
|
ssr: false,
|
||||||
loading: () => <Loading />,
|
loading: () => <Loading />,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
const NxTaskGraphViz = dynamic(
|
const NxTaskGraphViz = dynamic(
|
||||||
() => import('@nx/graph/ui-graph').then((module) => module.NxTaskGraphViz),
|
() =>
|
||||||
|
import('@nx/graph/legacy/graph').then((module) => module.NxTaskGraphViz),
|
||||||
{
|
{
|
||||||
ssr: false,
|
ssr: false,
|
||||||
loading: () => <Loading />,
|
loading: () => <Loading />,
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import {
|
|||||||
useState,
|
useState,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import { ProjectDetails as ProjectDetailsUi } from '@nx/graph-internal/ui-project-details';
|
import { ProjectDetails as ProjectDetailsUi } from '@nx/graph-internal/ui-project-details';
|
||||||
import { ExpandedTargetsProvider } from '@nx/graph/shared';
|
import { ExpandedTargetsProvider } from '@nx/graph/legacy/shared';
|
||||||
import { twMerge } from 'tailwind-merge';
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
export function Loading() {
|
export function Loading() {
|
||||||
|
|||||||
@ -333,7 +333,7 @@
|
|||||||
"@markdoc/markdoc": "0.2.2",
|
"@markdoc/markdoc": "0.2.2",
|
||||||
"@monaco-editor/react": "^4.4.6",
|
"@monaco-editor/react": "^4.4.6",
|
||||||
"@napi-rs/canvas": "^0.1.52",
|
"@napi-rs/canvas": "^0.1.52",
|
||||||
"@nx/graph": "0.1.0",
|
"@nx/graph": "0.4.1",
|
||||||
"@react-spring/three": "^9.7.3",
|
"@react-spring/three": "^9.7.3",
|
||||||
"@react-three/drei": "^9.108.3",
|
"@react-three/drei": "^9.108.3",
|
||||||
"@react-three/fiber": "^8.16.8",
|
"@react-three/fiber": "^8.16.8",
|
||||||
|
|||||||
39
pnpm-lock.yaml
generated
39
pnpm-lock.yaml
generated
@ -31,8 +31,8 @@ importers:
|
|||||||
specifier: ^0.1.52
|
specifier: ^0.1.52
|
||||||
version: 0.1.55
|
version: 0.1.55
|
||||||
'@nx/graph':
|
'@nx/graph':
|
||||||
specifier: 0.1.0
|
specifier: 0.4.1
|
||||||
version: 0.1.0(@nx/devkit@20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))))(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
version: 0.4.1(@nx/devkit@20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))))(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
||||||
'@react-spring/three':
|
'@react-spring/three':
|
||||||
specifier: ^9.7.3
|
specifier: ^9.7.3
|
||||||
version: 9.7.4(@react-three/fiber@8.17.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.166.1))(react@18.3.1)(three@0.166.1)
|
version: 9.7.4(@react-three/fiber@8.17.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.166.1))(react@18.3.1)(three@0.166.1)
|
||||||
@ -3695,13 +3695,6 @@ packages:
|
|||||||
'@floating-ui/utils@0.2.8':
|
'@floating-ui/utils@0.2.8':
|
||||||
resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
|
resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
|
||||||
|
|
||||||
'@headlessui/react@1.7.19':
|
|
||||||
resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
peerDependencies:
|
|
||||||
react: ^16 || ^17 || ^18
|
|
||||||
react-dom: ^16 || ^17 || ^18
|
|
||||||
|
|
||||||
'@headlessui/react@2.2.0':
|
'@headlessui/react@2.2.0':
|
||||||
resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==}
|
resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -5148,14 +5141,14 @@ packages:
|
|||||||
'@zkochan/js-yaml':
|
'@zkochan/js-yaml':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@nx/graph@0.1.0':
|
'@nx/graph@0.4.1':
|
||||||
resolution: {integrity: sha512-PYO6FqY46yriza3ZuDpdFTym+Nn8Z807gzNz+rxSvR4QVBTdoi6wDuX2GrM/O83oSF4A7ke4Z1kGQ3Dw8l1w8w==}
|
resolution: {integrity: sha512-BLHbZKEFUIkWYzXCk4/F+E2FNpeKe04tgyozARz3GnnvmBnOcuozvssnJsfpG1zmbiQ8Otb+HzJAVePZwaq4WA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@nx/devkit': '>= 19 < 21'
|
'@nx/devkit': '>= 19 < 21'
|
||||||
nx: '>= 19 < 21'
|
nx: '>= 19 < 21'
|
||||||
react: '>= 18 < 19'
|
react: '>= 18 < 20'
|
||||||
react-dom: '>= 18 < 19'
|
react-dom: '>= 18 < 20'
|
||||||
react-router-dom: '>= 6 < 7'
|
react-router-dom: '>= 6.0.0'
|
||||||
|
|
||||||
'@nx/jest@20.5.0-beta.2':
|
'@nx/jest@20.5.0-beta.2':
|
||||||
resolution: {integrity: sha512-hgv8Mo5szqVXo55CRDqoqqHIl9GXI+X9TPmnplKB/YQmuBlz36bchhkfhg3B6V2XjzuRdT1iRlqBrBA+fvJQSg==}
|
resolution: {integrity: sha512-hgv8Mo5szqVXo55CRDqoqqHIl9GXI+X9TPmnplKB/YQmuBlz36bchhkfhg3B6V2XjzuRdT1iRlqBrBA+fvJQSg==}
|
||||||
@ -20571,13 +20564,6 @@ snapshots:
|
|||||||
|
|
||||||
'@floating-ui/utils@0.2.8': {}
|
'@floating-ui/utils@0.2.8': {}
|
||||||
|
|
||||||
'@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
|
||||||
dependencies:
|
|
||||||
'@tanstack/react-virtual': 3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
||||||
client-only: 0.0.1
|
|
||||||
react: 18.3.1
|
|
||||||
react-dom: 18.3.1(react@18.3.1)
|
|
||||||
|
|
||||||
'@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
'@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
'@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@ -22485,22 +22471,13 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- verdaccio
|
- verdaccio
|
||||||
|
|
||||||
'@nx/graph@0.1.0(@nx/devkit@20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))))(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
|
'@nx/graph@0.4.1(@nx/devkit@20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))))(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/react': 0.26.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
||||||
'@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
||||||
'@heroicons/react': 2.1.5(react@18.3.1)
|
|
||||||
'@nx/devkit': 20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))
|
'@nx/devkit': 20.5.0-beta.2(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))
|
||||||
classnames: 2.5.1
|
|
||||||
cytoscape: 3.30.2
|
|
||||||
cytoscape-dagre: 2.5.0(cytoscape@3.30.2)
|
|
||||||
cytoscape-popper: 2.0.0(cytoscape@3.30.2)
|
|
||||||
nx: 20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))
|
nx: 20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
react-copy-to-clipboard: 5.1.0(react@18.3.1)
|
|
||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
react-router-dom: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
react-router-dom: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
tailwind-merge: 2.5.2
|
|
||||||
|
|
||||||
'@nx/jest@20.5.0-beta.2(@babel/traverse@7.25.9)(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@5.32.2(encoding@0.1.13)(typanion@3.14.0))':
|
'@nx/jest@20.5.0-beta.2(@babel/traverse@7.25.9)(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(nx@20.5.0-beta.2(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@5.32.2(encoding@0.1.13)(typanion@3.14.0))':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user