Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
env:
CI: true

- name: Test installed Playwright consumer
- name: Test installed package consumers
run: pnpm run test:package-contract
env:
CI: true
Expand All @@ -47,13 +47,17 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: apps/e2e/playwright-report/
path: |
apps/e2e/playwright-report/
packages/graph/playwright-report/
retention-days: 7

- name: Upload test screenshots
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-results
path: apps/e2e/test-results/
path: |
apps/e2e/test-results/
packages/graph/test-results/
retention-days: 7
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pnpm run dev
pnpm run storybook

# Build for production
pnpm run build:publish
pnpm run build

# Type checking
pnpm run typecheck
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/entry.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import "@gravity-ui/graph/react";
import "@gravity-ui/graph/styles.css";

export * from "@gravity-ui/graph";
2 changes: 2 additions & 0 deletions apps/e2e/react-entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import React from "react";
import ReactDOM from "react-dom/client";

import "@gravity-ui/graph/styles.css";

export * from "@gravity-ui/graph";
export { GraphBlock, GraphBlockAnchor, GraphCanvas } from "@gravity-ui/graph/react";
export { React, ReactDOM };
1 change: 1 addition & 0 deletions apps/storybook/.storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ThemeProvider } from "@gravity-ui/uikit";
import type { Preview } from "@storybook/react-webpack5";

import "./styles/global.css";
import "@gravity-ui/graph/styles.css";
import "@gravity-ui/uikit/styles/styles.css";

const preview: Preview = {
Expand Down
14 changes: 3 additions & 11 deletions apps/storybook/src/stories/plugins/layered/layered.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
import React, { useEffect, useMemo } from "react";

import type { LayeredLayoutOptions, TMultipointConnection } from "@gravity-ui/graph";
import {
BezierMultipointConnection,
Graph,
GraphState,
TBlock,
TConnection,
useLayeredLayout,
} from "@gravity-ui/graph";
import { GraphCanvas, useGraph, useGraphEvent } from "@gravity-ui/graph/react";
import { BezierMultipointConnection, Graph, GraphState, TBlock, TConnection } from "@gravity-ui/graph";
import { GraphCanvas, useGraph, useGraphEvent, useLayeredLayout } from "@gravity-ui/graph/react";
import { ThemeProvider } from "@gravity-ui/uikit";
import { Description, Meta as StorybookMeta, Title } from "@storybook/addon-docs/blocks";
import type { Meta, StoryFn } from "@storybook/react-webpack5";
Expand Down Expand Up @@ -144,8 +137,7 @@ const meta: Meta<typeof GraphApp> = {
"- `layerSpacingFactor`: Multiplier for spacing between layers (default: 1.7)\n\n" +
"## Example\n\n" +
"```tsx\n" +
"import { useLayeredLayout } from '@gravity-ui/graph';\n" +
"import { useGraph } from '@gravity-ui/graph/react';\n\n" +
"import { useGraph, useLayeredLayout } from '@gravity-ui/graph/react';\n\n" +
"const { graph, setEntities, start } = useGraph();\n" +
"const { isLoading, result } = useLayeredLayout({\n" +
" blocks: [{ id: '1', width: 100, height: 50 }, { id: '2', width: 100, height: 50 }],\n" +
Expand Down
9 changes: 2 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,9 @@
"lint": "pnpm --filter @gravity-ui/graph run lint && pnpm --filter @gravity-ui/graph-storybook run lint",
"test:unit": "pnpm --filter @gravity-ui/graph run test:unit",
"test": "pnpm --filter @gravity-ui/graph run test",
"storybook": "pnpm --filter @gravity-ui/graph run build:publish && pnpm --filter @gravity-ui/graph-storybook run storybook",
"storybook:build": "pnpm --filter @gravity-ui/graph run build:publish && pnpm --filter @gravity-ui/graph-storybook run build-storybook",
"build-storybook": "pnpm --filter @gravity-ui/graph run build:publish && pnpm --filter @gravity-ui/graph-storybook run build-storybook",
"ci:storybook:build": "pnpm run build-storybook",
"storybook": "pnpm --filter @gravity-ui/graph run build && pnpm --filter @gravity-ui/graph-storybook run storybook",
"build-storybook": "pnpm --filter @gravity-ui/graph run build && pnpm --filter @gravity-ui/graph-storybook run build-storybook",
"build:docs": "pnpm --filter @gravity-ui/graph run build:docs",
"copy-styles": "pnpm --filter @gravity-ui/graph run copy-styles",
"build:playwright-runtime": "pnpm --filter @gravity-ui/graph run build:playwright-runtime",
"build:publish": "pnpm --filter @gravity-ui/graph run build:publish",
"build": "pnpm --filter @gravity-ui/graph run build",
"dev": "pnpm --filter @gravity-ui/graph run dev",
"e2e:bundle": "pnpm --filter @gravity-ui/graph-e2e run e2e:bundle",
Expand Down
2 changes: 2 additions & 0 deletions packages/graph/README-ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import React, { useEffect } from "react";
import type { Graph, TBlock } from "@gravity-ui/graph";
import { EAnchorType, GraphState } from "@gravity-ui/graph";
import { GraphCanvas, GraphBlock, useGraph } from "@gravity-ui/graph/react";
import "@gravity-ui/graph/styles.css";

const config = {};

Expand Down Expand Up @@ -154,6 +155,7 @@ export function GraphEditor() {

```javascript
import { Graph } from "@gravity-ui/graph";
import "@gravity-ui/graph/styles.css";

// Создаем контейнер
const container = document.createElement('div');
Expand Down
2 changes: 2 additions & 0 deletions packages/graph/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import React, { useEffect } from "react";
import type { Graph, TBlock } from "@gravity-ui/graph";
import { EAnchorType, GraphState } from "@gravity-ui/graph";
import { GraphCanvas, GraphBlock, useGraph } from "@gravity-ui/graph/react";
import "@gravity-ui/graph/styles.css";

const config = {};

Expand Down Expand Up @@ -155,6 +156,7 @@ export function GraphEditor() {

```javascript
import { Graph } from "@gravity-ui/graph";
import "@gravity-ui/graph/styles.css";

// Create container element
const container = document.createElement('div');
Expand Down
3 changes: 3 additions & 0 deletions packages/graph/docs/react/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import { Graph } from "@gravity-ui/graph";

// React components (requires React)
import { GraphCanvas, GraphBlock, GraphBlockAnchor, useGraph, useGraphEvent } from "@gravity-ui/graph/react";

// Public component styles
import "@gravity-ui/graph/styles.css";
```

## Architecture
Expand Down
4 changes: 2 additions & 2 deletions packages/graph/jest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import type { Config } from "jest";
const jestConfig: Config = {
testPathIgnorePatterns: ["/node_modules/", "/build/"],
testEnvironment: "jsdom",
setupFiles: ["<rootDir>/setupJest.js", "jest-canvas-mock"],
setupFiles: ["<rootDir>/setupJest.cjs", "jest-canvas-mock"],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Jest now loads setupJest.cjs and maps CSS to styleMock.cjs, but this diff does not add or rename those files. Unit tests therefore fail during configuration with module-not-found errors.

Triggers: When the repository still contains the previously referenced setupJest.js and __mocks__/styleMock.js files.

Suggested fix: Rename the files to .cjs or keep the existing .js paths and add compatible CommonJS handling for the package's ESM mode.

transformIgnorePatterns: [],
moduleNameMapper: {
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js",
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.cjs",
},
transform: {
"^.+\\.(t|j)sx?$": "@swc/jest",
Expand Down
51 changes: 32 additions & 19 deletions packages/graph/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@gravity-ui/graph",
"version": "1.11.3",
"type": "module",
"packageManager": "pnpm@10.34.5",
"description": "Modern graph editor component",
"main": "build/index.js",
Expand Down Expand Up @@ -32,16 +33,26 @@
"exports": {
".": {
"types": "./build/index.d.ts",
"import": "./build/index.js",
"default": "./build/index.js"
},
"./react": {
"types": "./build/react-components/index.d.ts",
"import": "./build/react-components/index.js",
"default": "./build/react-components/index.js"
},
"./playwright": {
"types": "./build/playwright/index.d.ts",
"import": {
"types": "./build/playwright/index.d.ts",
"default": "./build/playwright/index.js"
},
"require": {
"types": "./build/playwright/index.d.cts",
"default": "./build/playwright/index.cjs"
},
"default": "./build/playwright/index.js"
}
},
"./styles.css": "./build/styles.css"
},
"license": "MIT",
"repository": {
Expand All @@ -50,42 +61,46 @@
"directory": "packages/graph"
},
"files": [
"build",
"tsconfig.json"
"build"
],
"scripts": {
"typecheck": "pnpm run build:publish && pnpm run typecheck:published-playwright-types",
"typecheck": "tsc -p tsconfig.json --noEmit && pnpm run build && pnpm run typecheck:published-playwright-types",
"typecheck:published-playwright-types": "node scripts/check-playwright-consumer-types.mjs",
"lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"",
"test:unit": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests --updateSnapshot",
"test": "pnpm run test:unit",
"build:docs": "node scripts/build-docs.mjs",
"copy-styles": "copyfiles -u 1 \"src/**/*.css\" build/",
"build:playwright-runtime": "esbuild src/playwright/index.ts --bundle --format=cjs --platform=node --target=node20 --packages=external --outfile=build/playwright/index.js",
"build:publish": "tsc -p tsconfig.publish.json && pnpm run build:playwright-runtime && pnpm run copy-styles && pnpm run build:docs",
"build": "tsc --declaration && pnpm run build:playwright-runtime && pnpm run copy-styles && pnpm run build:docs",
"prepublishOnly": "pnpm run typecheck && pnpm run test && pnpm run build:publish",
"dev": "concurrently \"tsc --watch --declaration\" \"chokidar 'src/**/*.css' -c 'pnpm run copy-styles'\"",
"test:package-contract": "node tests/package-contract/playwright-installed-consumer/run.mjs"
"build": "node scripts/build.mjs",
"prepublishOnly": "pnpm run typecheck && pnpm run test",
"dev": "chokidar \"src/**/*\" -c \"pnpm run build\" --initial",
"test:package-contract": "node tests/package-contract/run.mjs"
},
"peerDependencies": {
"@playwright/test": ">=1.58.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0"
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"peerDependenciesMeta": {
"@playwright/test": {
"optional": true
},
"react": {
"optional": true
},
"react-dom": {
"optional": true
}
},
"dependencies": {
"@preact/signals-core": "^1.12.2",
"elkjs": "^0.9.3",
"intersects": "^2.7.2",
"lodash": "^4.17.21",
"rbush": "^3.0.1",
"style-observer": "^0.1.1"
},
"devDependencies": {
"@arethetypeswrong/cli": "^0.18.5",
"@commitlint/cli": "^19.5.0",
"@commitlint/config-conventional": "^19.5.0",
"@gravity-ui/eslint-config": "^3.2.0",
Expand All @@ -101,15 +116,12 @@
"@types/lodash": "^4.17.13",
"@types/node": "^20.17.0",
"@types/rbush": "^3.0.0",
"@types/react": "^18.2.14",
"@types/react-dom": "^18.2.6",
"@types/react": "^18.3.31",
"@types/react-dom": "^18.3.7",
"@typescript-eslint/eslint-plugin": "5.39.0",
"@typescript-eslint/parser": "5.39.0",
"concurrently": "^9.2.1",
"chokidar-cli": "^3.0.0",
"copyfiles": "^2.4.1",
"cross-env": "^7.0.3",
"elkjs": "^0.9.3",
"esbuild": "^0.27.2",
"eslint": "^8.0.0",
"eslint-config-prettier": "^8.10.0",
Expand All @@ -122,6 +134,7 @@
"jest-environment-jsdom": "^30.0.5",
"mitata": "^1.0.34",
"prettier": "^3.0.0",
"publint": "^0.3.23",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"ts-node": "^10.9.2",
Expand Down
4 changes: 2 additions & 2 deletions packages/graph/scripts/build-docs.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Builds the AI-facing docs tree (cleaned README + docs/ guides) into build/docs so an
// agent in a consumer project reads docs matching the installed version from
// node_modules/@gravity-ui/graph/build/docs. Appended to the build/build:publish package
// scripts. Uses @gravity-ui/readme-validator's buildDocs().
// node_modules/@gravity-ui/graph/build/docs. Called by the canonical build script. Uses
// @gravity-ui/readme-validator's buildDocs().
import path from 'node:path';
import {fileURLToPath} from 'node:url';

Expand Down
Loading
Loading