From 5f72f5a36d1cf488c3786bfbede08a89734ee6a9 Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Mon, 27 Feb 2023 16:58:50 +0800 Subject: [PATCH] chore: split packages --- packages/dockview-core/README.md | 52 +++++++ packages/dockview-core/gulpfile.js | 6 + packages/dockview-core/jest.config.js | 27 ++++ packages/dockview-core/package.json | 73 +++++++++ packages/dockview-core/rollup.config.js | 141 ++++++++++++++++++ .../scripts/publishExperimental.js | 63 ++++++++ .../scripts/rollupEntryTarget-core.ts | 2 + .../scripts/rollupEntryTarget-react.ts | 2 + .../src/__tests__/__mocks__/resizeObserver.js | 13 ++ .../src/__tests__/__test_utils__/utils.ts | 14 ++ .../src/__tests__/api/api.spec.ts | 0 .../src/__tests__/api/component.api.spec.ts | 0 .../__tests__/api/dockviewPanelApi.spec.ts | 0 .../src/__tests__/array.spec.ts | 0 .../__tests__/dnd/abstractDragHandler.spec.ts | 0 .../src/__tests__/dnd/dataTransfer.spec.ts | 0 .../src/__tests__/dnd/droptarget.spec.ts | 0 .../dockview/defaultGroupPanelView.spec.ts | 0 .../dockview/dockviewComponent.spec.ts | 0 .../__tests__/dockview/dockviewPanel.spec.ts | 0 .../src/__tests__/events.spec.ts | 0 .../gridview/baseComponentGridview.spec.ts | 0 .../src/__tests__/gridview/gridview.spec.ts | 0 .../gridview/gridviewComponent.spec.ts | 0 .../__tests__/gridview/gridviewPanel.spec.ts | 0 .../src/__tests__/groupview/groupview.spec.ts | 0 .../__tests__/groupview/panel/content.spec.ts | 0 .../src/__tests__/groupview/tab.spec.ts | 0 .../groupview/titlebar/tabsContainer.spec.ts | 0 .../src/__tests__/lifecycle.spec.ts | 0 .../src/__tests__/math.spec.ts | 0 .../__tests__/panel/componentFactory.spec.ts | 0 .../src/__tests__/paneview/paneview.spec.ts | 0 .../paneview/paneviewComponent.spec.ts | 0 .../splitview/core/splitview.spec.ts | 0 .../splitview/splitviewComponent.spec.ts | 0 .../src/actionbar/actionsContainer.scss | 0 .../src/actionbar/actionsContainer.ts | 0 .../src/api/component.api.ts | 2 +- .../src/api/dockviewPanelApi.ts | 0 .../src/api/gridviewPanelApi.ts | 0 .../src/api/panelApi.ts | 0 .../src/api/paneviewPanelApi.ts | 0 .../src/api/splitviewPanelApi.ts | 0 .../{dockview => dockview-core}/src/array.ts | 0 .../{dockview => dockview-core}/src/core.ts | 22 ++- .../src/dnd/abstractDragHandler.ts | 0 .../src/dnd/dataTransfer.ts | 0 .../src/dnd/dnd.ts | 0 .../src/dnd/droptarget.scss | 0 .../src/dnd/droptarget.ts | 0 .../src/dnd/ghost.ts | 0 .../src/dnd/groupDragHandler.ts | 0 .../dockview/components/tab/defaultTab.scss | 0 .../src/dockview/components/tab/defaultTab.ts | 0 .../components/watermark/watermark.scss | 0 .../components/watermark/watermark.ts | 0 .../src/dockview/defaultGroupPanelView.ts | 0 .../src/dockview/deserializer.ts | 0 .../src/dockview/dockviewComponent.scss | 0 .../src/dockview/dockviewComponent.ts | 0 .../src/dockview/dockviewPanel.ts | 0 .../src/dockview/options.ts | 0 .../dockview-core/src/dockview/validation.ts | 117 +++++++++++++++ .../{dockview => dockview-core}/src/dom.ts | 0 .../{dockview => dockview-core}/src/events.ts | 0 .../src/gridview/baseComponentGridview.ts | 0 .../src/gridview/basePanelView.ts | 0 .../src/gridview/branchNode.ts | 0 .../src/gridview/gridview.scss | 0 .../src/gridview/gridview.ts | 0 .../src/gridview/gridviewComponent.ts | 0 .../src/gridview/gridviewPanel.ts | 4 +- .../src/gridview/leafNode.ts | 0 .../src/gridview/options.ts | 0 .../src/gridview/types.ts | 0 .../src/groupview/dnd.ts | 0 .../src/groupview/groupview.scss | 0 .../src/groupview/groupview.ts | 0 .../src/groupview/groupviewPanel.ts | 2 +- .../src/groupview/panel/content.ts | 0 .../src/groupview/tab.ts | 0 .../src/groupview/titlebar/tabsContainer.scss | 0 .../src/groupview/titlebar/tabsContainer.ts | 0 .../src/groupview/titlebar/voidContainer.ts | 0 .../src/groupview/types.ts | 0 .../src/hostedContainer.ts | 0 packages/dockview-core/src/index.ts | 2 + .../src/lifecycle.ts | 0 .../{dockview => dockview-core}/src/math.ts | 0 .../src/panel/componentFactory.ts | 0 .../src/panel/types.ts | 0 .../src/paneview/defaultPaneviewHeader.ts | 0 .../src/paneview/draggablePaneviewPanel.ts | 8 +- .../src/paneview/options.ts | 0 .../src/paneview/paneview.scss | 0 .../src/paneview/paneview.ts | 0 .../src/paneview/paneviewComponent.ts | 8 +- .../src/paneview/paneviewPanel.ts | 0 .../src/splitview/core/options.ts | 0 .../src/splitview/core/splitview.scss | 0 .../src/splitview/core/splitview.ts | 0 .../src/splitview/core/viewItem.ts | 0 .../src/splitview/splitviewComponent.ts | 0 .../src/splitview/splitviewPanel.ts | 0 .../{dockview => dockview-core}/src/svg.scss | 0 .../{dockview => dockview-core}/src/svg.ts | 0 .../src/theme.scss | 0 packages/dockview-core/src/types.ts | 13 ++ packages/dockview-core/test.html | 87 +++++++++++ packages/dockview-core/tsconfig.esm.json | 11 ++ packages/dockview-core/tsconfig.json | 11 ++ packages/dockview-core/typedoc.json | 7 + packages/dockview/package.json | 3 + .../dockview/src/{react => }/deserializer.ts | 23 +-- .../src/{react => }/dockview/defaultTab.scss | 0 .../src/{react => }/dockview/defaultTab.tsx | 0 .../src/{react => }/dockview/dockview.scss | 0 .../src/{react => }/dockview/dockview.tsx | 24 +-- .../dockview/groupControlsRenderer.ts | 14 +- .../{react => }/dockview/reactContentPart.ts | 15 +- .../{react => }/dockview/reactHeaderPart.ts | 15 +- .../dockview/reactWatermarkPart.ts | 12 +- .../dockview/v2/reactContentRenderer.ts | 8 +- .../dockview/v2/reactGroupPanelView.ts | 8 +- .../dockview/v2/webviewContentRenderer.ts | 8 +- .../src/{react => }/gridview/gridview.tsx | 10 +- .../dockview/src/{react => }/gridview/view.ts | 9 +- packages/dockview/src/index.scss | 1 + packages/dockview/src/index.ts | 13 +- .../src/{react => }/paneview/paneview.tsx | 14 +- .../src/{react => }/paneview/view.tsx | 4 +- packages/dockview/src/{react => }/react.ts | 8 +- packages/dockview/src/react/index.ts | 9 -- packages/dockview/src/react/types.ts | 9 -- .../src/{react => }/splitview/splitview.tsx | 10 +- .../src/{react => }/splitview/view.ts | 8 +- packages/dockview/src/{react => }/svg.tsx | 0 packages/dockview/src/types.ts | 16 +- 139 files changed, 795 insertions(+), 133 deletions(-) create mode 100644 packages/dockview-core/README.md create mode 100644 packages/dockview-core/gulpfile.js create mode 100644 packages/dockview-core/jest.config.js create mode 100644 packages/dockview-core/package.json create mode 100644 packages/dockview-core/rollup.config.js create mode 100644 packages/dockview-core/scripts/publishExperimental.js create mode 100644 packages/dockview-core/scripts/rollupEntryTarget-core.ts create mode 100644 packages/dockview-core/scripts/rollupEntryTarget-react.ts create mode 100644 packages/dockview-core/src/__tests__/__mocks__/resizeObserver.js create mode 100644 packages/dockview-core/src/__tests__/__test_utils__/utils.ts rename packages/{dockview => dockview-core}/src/__tests__/api/api.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/api/component.api.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/api/dockviewPanelApi.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/array.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dnd/abstractDragHandler.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dnd/dataTransfer.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dnd/droptarget.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dockview/defaultGroupPanelView.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dockview/dockviewComponent.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/dockview/dockviewPanel.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/events.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/gridview/baseComponentGridview.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/gridview/gridview.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/gridview/gridviewComponent.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/gridview/gridviewPanel.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/groupview/groupview.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/groupview/panel/content.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/groupview/tab.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/groupview/titlebar/tabsContainer.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/lifecycle.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/math.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/panel/componentFactory.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/paneview/paneview.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/paneview/paneviewComponent.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/splitview/core/splitview.spec.ts (100%) rename packages/{dockview => dockview-core}/src/__tests__/splitview/splitviewComponent.spec.ts (100%) rename packages/{dockview => dockview-core}/src/actionbar/actionsContainer.scss (100%) rename packages/{dockview => dockview-core}/src/actionbar/actionsContainer.ts (100%) rename packages/{dockview => dockview-core}/src/api/component.api.ts (99%) rename packages/{dockview => dockview-core}/src/api/dockviewPanelApi.ts (100%) rename packages/{dockview => dockview-core}/src/api/gridviewPanelApi.ts (100%) rename packages/{dockview => dockview-core}/src/api/panelApi.ts (100%) rename packages/{dockview => dockview-core}/src/api/paneviewPanelApi.ts (100%) rename packages/{dockview => dockview-core}/src/api/splitviewPanelApi.ts (100%) rename packages/{dockview => dockview-core}/src/array.ts (100%) rename packages/{dockview => dockview-core}/src/core.ts (75%) rename packages/{dockview => dockview-core}/src/dnd/abstractDragHandler.ts (100%) rename packages/{dockview => dockview-core}/src/dnd/dataTransfer.ts (100%) rename packages/{dockview => dockview-core}/src/dnd/dnd.ts (100%) rename packages/{dockview => dockview-core}/src/dnd/droptarget.scss (100%) rename packages/{dockview => dockview-core}/src/dnd/droptarget.ts (100%) rename packages/{dockview => dockview-core}/src/dnd/ghost.ts (100%) rename packages/{dockview => dockview-core}/src/dnd/groupDragHandler.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/components/tab/defaultTab.scss (100%) rename packages/{dockview => dockview-core}/src/dockview/components/tab/defaultTab.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/components/watermark/watermark.scss (100%) rename packages/{dockview => dockview-core}/src/dockview/components/watermark/watermark.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/defaultGroupPanelView.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/deserializer.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/dockviewComponent.scss (100%) rename packages/{dockview => dockview-core}/src/dockview/dockviewComponent.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/dockviewPanel.ts (100%) rename packages/{dockview => dockview-core}/src/dockview/options.ts (100%) create mode 100644 packages/dockview-core/src/dockview/validation.ts rename packages/{dockview => dockview-core}/src/dom.ts (100%) rename packages/{dockview => dockview-core}/src/events.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/baseComponentGridview.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/basePanelView.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/branchNode.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/gridview.scss (100%) rename packages/{dockview => dockview-core}/src/gridview/gridview.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/gridviewComponent.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/gridviewPanel.ts (98%) rename packages/{dockview => dockview-core}/src/gridview/leafNode.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/options.ts (100%) rename packages/{dockview => dockview-core}/src/gridview/types.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/dnd.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/groupview.scss (100%) rename packages/{dockview => dockview-core}/src/groupview/groupview.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/groupviewPanel.ts (97%) rename packages/{dockview => dockview-core}/src/groupview/panel/content.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/tab.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/titlebar/tabsContainer.scss (100%) rename packages/{dockview => dockview-core}/src/groupview/titlebar/tabsContainer.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/titlebar/voidContainer.ts (100%) rename packages/{dockview => dockview-core}/src/groupview/types.ts (100%) rename packages/{dockview => dockview-core}/src/hostedContainer.ts (100%) create mode 100644 packages/dockview-core/src/index.ts rename packages/{dockview => dockview-core}/src/lifecycle.ts (100%) rename packages/{dockview => dockview-core}/src/math.ts (100%) rename packages/{dockview => dockview-core}/src/panel/componentFactory.ts (100%) rename packages/{dockview => dockview-core}/src/panel/types.ts (100%) rename packages/{dockview => dockview-core}/src/paneview/defaultPaneviewHeader.ts (100%) rename packages/{dockview => dockview-core}/src/paneview/draggablePaneviewPanel.ts (93%) rename packages/{dockview => dockview-core}/src/paneview/options.ts (100%) rename packages/{dockview => dockview-core}/src/paneview/paneview.scss (100%) rename packages/{dockview => dockview-core}/src/paneview/paneview.ts (100%) rename packages/{dockview => dockview-core}/src/paneview/paneviewComponent.ts (98%) rename packages/{dockview => dockview-core}/src/paneview/paneviewPanel.ts (100%) rename packages/{dockview => dockview-core}/src/splitview/core/options.ts (100%) rename packages/{dockview => dockview-core}/src/splitview/core/splitview.scss (100%) rename packages/{dockview => dockview-core}/src/splitview/core/splitview.ts (100%) rename packages/{dockview => dockview-core}/src/splitview/core/viewItem.ts (100%) rename packages/{dockview => dockview-core}/src/splitview/splitviewComponent.ts (100%) rename packages/{dockview => dockview-core}/src/splitview/splitviewPanel.ts (100%) rename packages/{dockview => dockview-core}/src/svg.scss (100%) rename packages/{dockview => dockview-core}/src/svg.ts (100%) rename packages/{dockview => dockview-core}/src/theme.scss (100%) create mode 100644 packages/dockview-core/src/types.ts create mode 100644 packages/dockview-core/test.html create mode 100644 packages/dockview-core/tsconfig.esm.json create mode 100644 packages/dockview-core/tsconfig.json create mode 100644 packages/dockview-core/typedoc.json rename packages/dockview/src/{react => }/deserializer.ts (75%) rename packages/dockview/src/{react => }/dockview/defaultTab.scss (100%) rename packages/dockview/src/{react => }/dockview/defaultTab.tsx (100%) rename packages/dockview/src/{react => }/dockview/dockview.scss (100%) rename packages/dockview/src/{react => }/dockview/dockview.tsx (95%) rename packages/dockview/src/{react => }/dockview/groupControlsRenderer.ts (89%) rename packages/dockview/src/{react => }/dockview/reactContentPart.ts (91%) rename packages/dockview/src/{react => }/dockview/reactHeaderPart.ts (88%) rename packages/dockview/src/{react => }/dockview/reactWatermarkPart.ts (93%) rename packages/dockview/src/{react => }/dockview/v2/reactContentRenderer.ts (92%) rename packages/dockview/src/{react => }/dockview/v2/reactGroupPanelView.ts (79%) rename packages/dockview/src/{react => }/dockview/v2/webviewContentRenderer.ts (85%) rename packages/dockview/src/{react => }/gridview/gridview.tsx (93%) rename packages/dockview/src/{react => }/gridview/view.ts (76%) create mode 100644 packages/dockview/src/index.scss rename packages/dockview/src/{react => }/paneview/paneview.tsx (92%) rename packages/dockview/src/{react => }/paneview/view.tsx (93%) rename packages/dockview/src/{react => }/react.ts (97%) delete mode 100644 packages/dockview/src/react/index.ts delete mode 100644 packages/dockview/src/react/types.ts rename packages/dockview/src/{react => }/splitview/splitview.tsx (92%) rename packages/dockview/src/{react => }/splitview/view.ts (81%) rename packages/dockview/src/{react => }/svg.tsx (100%) diff --git a/packages/dockview-core/README.md b/packages/dockview-core/README.md new file mode 100644 index 000000000..214dc0e75 --- /dev/null +++ b/packages/dockview-core/README.md @@ -0,0 +1,52 @@ +
+

dockview

+ +

Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support written in TypeScript

+ +
+ +--- + +[![npm version](https://badge.fury.io/js/dockview.svg)](https://www.npmjs.com/package/dockview) +[![CI Build](https://github.com/mathuo/dockview/workflows/CI/badge.svg)](https://github.com/mathuo/dockview/actions?query=workflow%3ACI) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=coverage)](https://sonarcloud.io/summary/overall?id=mathuo_dockview) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=mathuo_dockview&metric=alert_status)](https://sonarcloud.io/summary/overall?id=mathuo_dockview) +[![Bundle Phobia](https://badgen.net/bundlephobia/minzip/dockview)](https://bundlephobia.com/result?p=dockview) + +## + +Please see the website: https://dockview.dev + +Want to inspect the latest deployment? Go to https://unpkg.com/browse/dockview@latest/ + +## Features + +- Simple splitviews, nested splitviews (i.e. gridviews) supporting full layout managment with + dockable and tabular views +- Extensive API support at the component level and view level +- Themable and customizable +- Serialization / deserialization support +- Tabular docking and Drag and Drop support +- Documentation and examples + +This project was inspired by many popular IDE editors. Some parts of the core resizable panelling are inspired by code found in the VSCode codebase, [splitview](https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/splitview) and [gridview](https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/grid). + +## Quick start + +Dockview has a peer dependency on `react >= 16.8.0` and `react-dom >= 16.8.0`. You can install dockview from [npm](https://www.npmjs.com/package/dockview). Please see the [Getting Started Guide](https://mathuo.github.io/dockview/docs/). + +``` +npm install --save dockview +``` + +Within your project you must import or reference the stylesheet at `dockview/dist/styles/dockview.css` and attach a theme. + +```css +@import '~dockview/dist/styles/dockview.css'; +``` + +You should also attach a dockview theme to an element containing your components. For example: + +```html + +``` diff --git a/packages/dockview-core/gulpfile.js b/packages/dockview-core/gulpfile.js new file mode 100644 index 000000000..4b62c983d --- /dev/null +++ b/packages/dockview-core/gulpfile.js @@ -0,0 +1,6 @@ +const gulp = require('gulp'); +const buildfile = require('../../scripts/build'); + +buildfile.init(); + +gulp.task('run', gulp.series(['sass'])); diff --git a/packages/dockview-core/jest.config.js b/packages/dockview-core/jest.config.js new file mode 100644 index 000000000..e72f97d2c --- /dev/null +++ b/packages/dockview-core/jest.config.js @@ -0,0 +1,27 @@ +const { name } = require('./package'); + +const baseConfig = require('../../jest.config.base'); + +console.log('loaded'); + +module.exports = { + ...baseConfig, + roots: ['/packages/dockview'], + modulePaths: ['/packages/dockview/src'], + displayName: { name, color: 'blue' }, + rootDir: '../../', + collectCoverageFrom: [ + '/packages/dockview/src/**/*.{js,jsx,ts,tsx}', + ], + setupFiles: [ + '/packages/dockview/src/__tests__/__mocks__/resizeObserver.js', + ], + coveragePathIgnorePatterns: ['/node_modules/'], + modulePathIgnorePatterns: [ + '/packages/dockview/src/__tests__/__mocks__', + '/packages/dockview/src/__tests__/__test_utils__', + ], + coverageDirectory: '/packages/dockview/coverage/', + testResultsProcessor: 'jest-sonar-reporter', + testEnvironment: 'jsdom', +}; diff --git a/packages/dockview-core/package.json b/packages/dockview-core/package.json new file mode 100644 index 000000000..0a04d23cc --- /dev/null +++ b/packages/dockview-core/package.json @@ -0,0 +1,73 @@ +{ + "name": "dockview-core", + "version": "1.6.0", + "description": "Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support", + "main": "./dist/cjs/index.js", + "types": "./dist/cjs/index.d.ts", + "module": "./dist/esm/index.js", + "repository": { + "type": "git", + "url": "https://github.com/mathuo/dockview.git" + }, + "bugs": { + "url": "https://github.com/mathuo/dockview/issues" + }, + "homepage": "https://github.com/mathuo/dockview", + "scripts": { + "build:ci": "npm run build:cjs && npm run build:esm && npm run build:css", + "build:cjs": "cross-env ../../node_modules/.bin/tsc --project ./tsconfig.json --extendedDiagnostics", + "build:css": "gulp sass", + "build:esm": "cross-env ../../node_modules/.bin/tsc --project ./tsconfig.esm.json --extendedDiagnostics", + "build:modulefiles": "rollup -c", + "build": "npm run build:ci && npm run build:modulefiles", + "clean": "rimraf dist/ .build/", + "docs": "typedoc", + "prepack": "npm run rebuild && npm run test", + "rebuild": "npm run clean && npm run build", + "test": "cross-env ../../node_modules/.bin/jest --selectProjects dockview", + "test:cov": "cross-env ../../node_modules/.bin/jest --selectProjects dockview --coverage", + "dev-publish": "node ./scripts/publishExperimental.js" + }, + "files": [ + "dist", + "README.md" + ], + "keywords": [ + "splitview", + "split-view", + "gridview", + "grid-view", + "dockview", + "dock-view", + "grid", + "tabs", + "layout", + "layout manager", + "dock layout", + "dock", + "docking", + "splitter", + "drag-and-drop", + "drag", + "drop", + "react", + "react-component" + ], + "author": "https://github.com/mathuo", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-typescript": "^11.0.0", + "@testing-library/react": "^13.4.0", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "cross-env": "^7.0.3", + "postcss": "^8.4.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "rimraf": "^4.1.2", + "rollup": "^3.15.0", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-terser": "^7.0.2", + "typedoc": "^0.23.25" + } +} diff --git a/packages/dockview-core/rollup.config.js b/packages/dockview-core/rollup.config.js new file mode 100644 index 000000000..9abce3a84 --- /dev/null +++ b/packages/dockview-core/rollup.config.js @@ -0,0 +1,141 @@ +/* eslint-disable */ + +const { join } = require('path'); +const typescript = require('@rollup/plugin-typescript'); +const { terser } = require('rollup-plugin-terser'); +const postcss = require('rollup-plugin-postcss'); + +const { name, version, homepage, license } = require('./package.json'); +const reactMain = join(__dirname, './scripts/rollupEntryTarget-react.ts'); +const reactMainNoStyles = join(__dirname, './src/index.ts'); +const main = join(__dirname, './scripts/rollupEntryTarget-core.ts'); +const mainNoStyles = join(__dirname, './src/core.ts'); +const outputDir = join(__dirname, 'dist'); + +function outputFile(format, isMinified, withStyles, isReact) { + let filename = join(outputDir, name); + + if (isReact) { + filename += '.react'; + } + + if (format !== 'umd') { + filename += `.${format}`; + } + if (isMinified) { + filename += '.min'; + } + if (!withStyles) { + filename += '.noStyle'; + } + + return `${filename}.js`; +} + +function getInput(options) { + const { withStyles, isReact } = options; + + if (withStyles) { + return isReact ? reactMain : main; + } + + return isReact ? reactMainNoStyles : mainNoStyles; +} + +function createBundle(format, options) { + const { withStyles, isMinified, isReact } = options; + const input = getInput(options); + const file = outputFile(format, isMinified, withStyles, isReact); + + const external = []; + + const output = { + file, + format, + globals: {}, + banner: [ + `/**`, + ` * ${name}`, + ` * @version ${version}`, + ` * @link ${homepage}`, + ` * @license ${license}`, + ` */`, + ].join('\n'), + }; + + const plugins = [ + typescript({ + tsconfig: 'tsconfig.esm.json', + incremental: false, + tsBuildInfoFile: undefined, + outDir: undefined, + declaration: false, + }), + ]; + + if (isMinified) { + plugins.push(terser()); + } + if (withStyles) { + plugins.push(postcss()); + } + + if (format === 'umd') { + output['name'] = name; + } + + if (isReact) { + // TODO: should be conditional on whether user wants the React wrappers + external.push('react', 'react-dom'); + + if (format === 'umd') { + // TODO: should be conditional on whether user wants the React wrappers + output.globals['react'] = 'React'; + output.globals['react-dom'] = 'ReactDOM'; + } + } + + return { + input, + output, + plugins, + external, + // manualChunks(id) { + // if (id.includes('src/react/')) { + // return 'react'; + // } + // }, + }; +} + +module.exports = [ + // amd + createBundle('amd', { + withStyles: false, + isMinified: false, + isReact: true, + }), + createBundle('amd', { withStyles: true, isMinified: false, isReact: true }), + createBundle('amd', { withStyles: false, isMinified: true, isReact: true }), + createBundle('amd', { withStyles: true, isMinified: true, isReact: true }), + // umd + createBundle('umd', { + withStyles: false, + isMinified: false, + isReact: true, + }), + createBundle('umd', { withStyles: true, isMinified: false, isReact: true }), + createBundle('umd', { withStyles: false, isMinified: true, isReact: true }), + createBundle('umd', { withStyles: true, isMinified: true, isReact: true }), + // cjs + createBundle('cjs', { withStyles: true, isMinified: false, isReact: true }), + // esm + createBundle('esm', { withStyles: true, isMinified: false, isReact: true }), + createBundle('esm', { withStyles: true, isMinified: true, isReact: true }), + // core bundles (no-react) + createBundle('umd', { + withStyles: true, + isMinified: false, + isReact: false, + }), +]; diff --git a/packages/dockview-core/scripts/publishExperimental.js b/packages/dockview-core/scripts/publishExperimental.js new file mode 100644 index 000000000..efd1b8e2d --- /dev/null +++ b/packages/dockview-core/scripts/publishExperimental.js @@ -0,0 +1,63 @@ +const cp = require('child_process'); +const fs = require('fs-extra'); +const path = require('path'); + +const rootDir = path.join(__dirname, '..'); +const publishDir = path.join(rootDir, '__publish__'); + +cp.execSync('npm run clean', { cwd: rootDir, stdio: 'inherit' }); +cp.execSync('npm run test', { cwd: __dirname, stdio: 'inherit' }); +cp.execSync('npm run build', { cwd: rootDir, stdio: 'inherit' }); + +if (fs.existsSync(publishDir)) { + fs.removeSync(publishDir); +} +fs.mkdirSync(publishDir); + +if (!fs.existsSync(path.join(publishDir, 'dist'))) { + fs.mkdirSync(path.join(publishDir, 'dist')); +} + +const package = JSON.parse( + fs.readFileSync(path.join(rootDir, 'package.json')).toString() +); + +for (const file of package.files) { + fs.copySync(path.join(rootDir, file), path.join(publishDir, file)); +} + +const result = cp + .execSync('git rev-parse --short HEAD', { + cwd: rootDir, + }) + .toString() + .replace(/\n/g, ''); + +function formatDate() { + const date = new Date(); + + function pad(value) { + if (value.toString().length === 1) { + return `0${value}`; + } + return value; + } + + return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad( + date.getDate() + )}`; +} + +package.version = `0.0.0-experimental-${result}-${formatDate()}`; +package.scripts = {}; + +fs.writeFileSync( + path.join(publishDir, 'package.json'), + JSON.stringify(package, null, 4) +); + +const command = 'npm publish --tag experimental'; + +cp.execSync(command, { cwd: publishDir, stdio: 'inherit' }); + +fs.removeSync(publishDir); diff --git a/packages/dockview-core/scripts/rollupEntryTarget-core.ts b/packages/dockview-core/scripts/rollupEntryTarget-core.ts new file mode 100644 index 000000000..fc6590960 --- /dev/null +++ b/packages/dockview-core/scripts/rollupEntryTarget-core.ts @@ -0,0 +1,2 @@ +import '../dist/styles/dockview.css'; +export * from '../src/core'; diff --git a/packages/dockview-core/scripts/rollupEntryTarget-react.ts b/packages/dockview-core/scripts/rollupEntryTarget-react.ts new file mode 100644 index 000000000..6ce476579 --- /dev/null +++ b/packages/dockview-core/scripts/rollupEntryTarget-react.ts @@ -0,0 +1,2 @@ +import '../dist/styles/dockview.css'; +export * from '../src/index'; diff --git a/packages/dockview-core/src/__tests__/__mocks__/resizeObserver.js b/packages/dockview-core/src/__tests__/__mocks__/resizeObserver.js new file mode 100644 index 000000000..bcd486343 --- /dev/null +++ b/packages/dockview-core/src/__tests__/__mocks__/resizeObserver.js @@ -0,0 +1,13 @@ +class ResizeObserver { + observe() { + // do nothing + } + unobserve() { + // do nothing + } + disconnect() { + // do nothing + } +} + +window.ResizeObserver = ResizeObserver; \ No newline at end of file diff --git a/packages/dockview-core/src/__tests__/__test_utils__/utils.ts b/packages/dockview-core/src/__tests__/__test_utils__/utils.ts new file mode 100644 index 000000000..ab8dc0a9e --- /dev/null +++ b/packages/dockview-core/src/__tests__/__test_utils__/utils.ts @@ -0,0 +1,14 @@ +import * as React from 'react'; + +export function setMockRefElement(node: Partial): void { + const mockRef = { + get current() { + return node; + }, + set current(_value) { + //noop + }, + }; + + jest.spyOn(React, 'useRef').mockReturnValueOnce(mockRef); +} diff --git a/packages/dockview/src/__tests__/api/api.spec.ts b/packages/dockview-core/src/__tests__/api/api.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/api/api.spec.ts rename to packages/dockview-core/src/__tests__/api/api.spec.ts diff --git a/packages/dockview/src/__tests__/api/component.api.spec.ts b/packages/dockview-core/src/__tests__/api/component.api.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/api/component.api.spec.ts rename to packages/dockview-core/src/__tests__/api/component.api.spec.ts diff --git a/packages/dockview/src/__tests__/api/dockviewPanelApi.spec.ts b/packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/api/dockviewPanelApi.spec.ts rename to packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts diff --git a/packages/dockview/src/__tests__/array.spec.ts b/packages/dockview-core/src/__tests__/array.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/array.spec.ts rename to packages/dockview-core/src/__tests__/array.spec.ts diff --git a/packages/dockview/src/__tests__/dnd/abstractDragHandler.spec.ts b/packages/dockview-core/src/__tests__/dnd/abstractDragHandler.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dnd/abstractDragHandler.spec.ts rename to packages/dockview-core/src/__tests__/dnd/abstractDragHandler.spec.ts diff --git a/packages/dockview/src/__tests__/dnd/dataTransfer.spec.ts b/packages/dockview-core/src/__tests__/dnd/dataTransfer.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dnd/dataTransfer.spec.ts rename to packages/dockview-core/src/__tests__/dnd/dataTransfer.spec.ts diff --git a/packages/dockview/src/__tests__/dnd/droptarget.spec.ts b/packages/dockview-core/src/__tests__/dnd/droptarget.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dnd/droptarget.spec.ts rename to packages/dockview-core/src/__tests__/dnd/droptarget.spec.ts diff --git a/packages/dockview/src/__tests__/dockview/defaultGroupPanelView.spec.ts b/packages/dockview-core/src/__tests__/dockview/defaultGroupPanelView.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dockview/defaultGroupPanelView.spec.ts rename to packages/dockview-core/src/__tests__/dockview/defaultGroupPanelView.spec.ts diff --git a/packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts b/packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts rename to packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts diff --git a/packages/dockview/src/__tests__/dockview/dockviewPanel.spec.ts b/packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/dockview/dockviewPanel.spec.ts rename to packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts diff --git a/packages/dockview/src/__tests__/events.spec.ts b/packages/dockview-core/src/__tests__/events.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/events.spec.ts rename to packages/dockview-core/src/__tests__/events.spec.ts diff --git a/packages/dockview/src/__tests__/gridview/baseComponentGridview.spec.ts b/packages/dockview-core/src/__tests__/gridview/baseComponentGridview.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/gridview/baseComponentGridview.spec.ts rename to packages/dockview-core/src/__tests__/gridview/baseComponentGridview.spec.ts diff --git a/packages/dockview/src/__tests__/gridview/gridview.spec.ts b/packages/dockview-core/src/__tests__/gridview/gridview.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/gridview/gridview.spec.ts rename to packages/dockview-core/src/__tests__/gridview/gridview.spec.ts diff --git a/packages/dockview/src/__tests__/gridview/gridviewComponent.spec.ts b/packages/dockview-core/src/__tests__/gridview/gridviewComponent.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/gridview/gridviewComponent.spec.ts rename to packages/dockview-core/src/__tests__/gridview/gridviewComponent.spec.ts diff --git a/packages/dockview/src/__tests__/gridview/gridviewPanel.spec.ts b/packages/dockview-core/src/__tests__/gridview/gridviewPanel.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/gridview/gridviewPanel.spec.ts rename to packages/dockview-core/src/__tests__/gridview/gridviewPanel.spec.ts diff --git a/packages/dockview/src/__tests__/groupview/groupview.spec.ts b/packages/dockview-core/src/__tests__/groupview/groupview.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/groupview/groupview.spec.ts rename to packages/dockview-core/src/__tests__/groupview/groupview.spec.ts diff --git a/packages/dockview/src/__tests__/groupview/panel/content.spec.ts b/packages/dockview-core/src/__tests__/groupview/panel/content.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/groupview/panel/content.spec.ts rename to packages/dockview-core/src/__tests__/groupview/panel/content.spec.ts diff --git a/packages/dockview/src/__tests__/groupview/tab.spec.ts b/packages/dockview-core/src/__tests__/groupview/tab.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/groupview/tab.spec.ts rename to packages/dockview-core/src/__tests__/groupview/tab.spec.ts diff --git a/packages/dockview/src/__tests__/groupview/titlebar/tabsContainer.spec.ts b/packages/dockview-core/src/__tests__/groupview/titlebar/tabsContainer.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/groupview/titlebar/tabsContainer.spec.ts rename to packages/dockview-core/src/__tests__/groupview/titlebar/tabsContainer.spec.ts diff --git a/packages/dockview/src/__tests__/lifecycle.spec.ts b/packages/dockview-core/src/__tests__/lifecycle.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/lifecycle.spec.ts rename to packages/dockview-core/src/__tests__/lifecycle.spec.ts diff --git a/packages/dockview/src/__tests__/math.spec.ts b/packages/dockview-core/src/__tests__/math.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/math.spec.ts rename to packages/dockview-core/src/__tests__/math.spec.ts diff --git a/packages/dockview/src/__tests__/panel/componentFactory.spec.ts b/packages/dockview-core/src/__tests__/panel/componentFactory.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/panel/componentFactory.spec.ts rename to packages/dockview-core/src/__tests__/panel/componentFactory.spec.ts diff --git a/packages/dockview/src/__tests__/paneview/paneview.spec.ts b/packages/dockview-core/src/__tests__/paneview/paneview.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/paneview/paneview.spec.ts rename to packages/dockview-core/src/__tests__/paneview/paneview.spec.ts diff --git a/packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts b/packages/dockview-core/src/__tests__/paneview/paneviewComponent.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts rename to packages/dockview-core/src/__tests__/paneview/paneviewComponent.spec.ts diff --git a/packages/dockview/src/__tests__/splitview/core/splitview.spec.ts b/packages/dockview-core/src/__tests__/splitview/core/splitview.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/splitview/core/splitview.spec.ts rename to packages/dockview-core/src/__tests__/splitview/core/splitview.spec.ts diff --git a/packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts b/packages/dockview-core/src/__tests__/splitview/splitviewComponent.spec.ts similarity index 100% rename from packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts rename to packages/dockview-core/src/__tests__/splitview/splitviewComponent.spec.ts diff --git a/packages/dockview/src/actionbar/actionsContainer.scss b/packages/dockview-core/src/actionbar/actionsContainer.scss similarity index 100% rename from packages/dockview/src/actionbar/actionsContainer.scss rename to packages/dockview-core/src/actionbar/actionsContainer.scss diff --git a/packages/dockview/src/actionbar/actionsContainer.ts b/packages/dockview-core/src/actionbar/actionsContainer.ts similarity index 100% rename from packages/dockview/src/actionbar/actionsContainer.ts rename to packages/dockview-core/src/actionbar/actionsContainer.ts diff --git a/packages/dockview/src/api/component.api.ts b/packages/dockview-core/src/api/component.api.ts similarity index 99% rename from packages/dockview/src/api/component.api.ts rename to packages/dockview-core/src/api/component.api.ts index 2036781d3..c61d81c46 100644 --- a/packages/dockview/src/api/component.api.ts +++ b/packages/dockview-core/src/api/component.api.ts @@ -32,8 +32,8 @@ import { IView, Orientation, Sizing } from '../splitview/core/splitview'; import { ISplitviewPanel } from '../splitview/splitviewPanel'; import { GroupPanel, IGroupviewPanel } from '../groupview/groupviewPanel'; import { Emitter, Event } from '../events'; -import { PaneviewDropEvent } from '../react'; import { IDockviewPanel } from '../dockview/dockviewPanel'; +import { PaneviewDropEvent } from '../paneview/draggablePaneviewPanel'; export interface CommonApi { readonly height: number; diff --git a/packages/dockview/src/api/dockviewPanelApi.ts b/packages/dockview-core/src/api/dockviewPanelApi.ts similarity index 100% rename from packages/dockview/src/api/dockviewPanelApi.ts rename to packages/dockview-core/src/api/dockviewPanelApi.ts diff --git a/packages/dockview/src/api/gridviewPanelApi.ts b/packages/dockview-core/src/api/gridviewPanelApi.ts similarity index 100% rename from packages/dockview/src/api/gridviewPanelApi.ts rename to packages/dockview-core/src/api/gridviewPanelApi.ts diff --git a/packages/dockview/src/api/panelApi.ts b/packages/dockview-core/src/api/panelApi.ts similarity index 100% rename from packages/dockview/src/api/panelApi.ts rename to packages/dockview-core/src/api/panelApi.ts diff --git a/packages/dockview/src/api/paneviewPanelApi.ts b/packages/dockview-core/src/api/paneviewPanelApi.ts similarity index 100% rename from packages/dockview/src/api/paneviewPanelApi.ts rename to packages/dockview-core/src/api/paneviewPanelApi.ts diff --git a/packages/dockview/src/api/splitviewPanelApi.ts b/packages/dockview-core/src/api/splitviewPanelApi.ts similarity index 100% rename from packages/dockview/src/api/splitviewPanelApi.ts rename to packages/dockview-core/src/api/splitviewPanelApi.ts diff --git a/packages/dockview/src/array.ts b/packages/dockview-core/src/array.ts similarity index 100% rename from packages/dockview/src/array.ts rename to packages/dockview-core/src/array.ts diff --git a/packages/dockview/src/core.ts b/packages/dockview-core/src/core.ts similarity index 75% rename from packages/dockview/src/core.ts rename to packages/dockview-core/src/core.ts index 7cb102718..494755bd0 100644 --- a/packages/dockview/src/core.ts +++ b/packages/dockview-core/src/core.ts @@ -1,16 +1,36 @@ +export * from './hostedContainer'; + export * from './dnd/dataTransfer'; +export * from './math'; +export * from './dom'; +export * from './events'; +export * from './lifecycle'; + +export * from './panel/types'; +export * from './panel/componentFactory'; + export * from './splitview/core/splitview'; +export * from './splitview/core/options'; + export * from './paneview/paneview'; export * from './gridview/gridview'; export * from './groupview/groupview'; export * from './gridview/baseComponentGridview'; +export * from './paneview/draggablePaneviewPanel'; + export * from './groupview/panel/content'; export * from './groupview/tab'; export * from './groupview/dnd'; export * from './groupview/types'; +export * from './groupview/groupviewPanel'; + export * from './dockview/options'; +export * from './dockview/dockviewPanel'; +export * from './dockview/components/tab/defaultTab'; +export * from './dockview/deserializer'; +export * from './dockview/defaultGroupPanelView'; export * from './dockview/dockviewComponent'; export * from './gridview/gridviewComponent'; @@ -23,8 +43,6 @@ export * from './splitview/splitviewPanel'; export * from './paneview/paneviewPanel'; export * from './groupview/types'; -export * from './react'; // TODO: should be conditional on whether user wants the React wrappers - export { Event } from './events'; export { IDisposable } from './lifecycle'; export { diff --git a/packages/dockview/src/dnd/abstractDragHandler.ts b/packages/dockview-core/src/dnd/abstractDragHandler.ts similarity index 100% rename from packages/dockview/src/dnd/abstractDragHandler.ts rename to packages/dockview-core/src/dnd/abstractDragHandler.ts diff --git a/packages/dockview/src/dnd/dataTransfer.ts b/packages/dockview-core/src/dnd/dataTransfer.ts similarity index 100% rename from packages/dockview/src/dnd/dataTransfer.ts rename to packages/dockview-core/src/dnd/dataTransfer.ts diff --git a/packages/dockview/src/dnd/dnd.ts b/packages/dockview-core/src/dnd/dnd.ts similarity index 100% rename from packages/dockview/src/dnd/dnd.ts rename to packages/dockview-core/src/dnd/dnd.ts diff --git a/packages/dockview/src/dnd/droptarget.scss b/packages/dockview-core/src/dnd/droptarget.scss similarity index 100% rename from packages/dockview/src/dnd/droptarget.scss rename to packages/dockview-core/src/dnd/droptarget.scss diff --git a/packages/dockview/src/dnd/droptarget.ts b/packages/dockview-core/src/dnd/droptarget.ts similarity index 100% rename from packages/dockview/src/dnd/droptarget.ts rename to packages/dockview-core/src/dnd/droptarget.ts diff --git a/packages/dockview/src/dnd/ghost.ts b/packages/dockview-core/src/dnd/ghost.ts similarity index 100% rename from packages/dockview/src/dnd/ghost.ts rename to packages/dockview-core/src/dnd/ghost.ts diff --git a/packages/dockview/src/dnd/groupDragHandler.ts b/packages/dockview-core/src/dnd/groupDragHandler.ts similarity index 100% rename from packages/dockview/src/dnd/groupDragHandler.ts rename to packages/dockview-core/src/dnd/groupDragHandler.ts diff --git a/packages/dockview/src/dockview/components/tab/defaultTab.scss b/packages/dockview-core/src/dockview/components/tab/defaultTab.scss similarity index 100% rename from packages/dockview/src/dockview/components/tab/defaultTab.scss rename to packages/dockview-core/src/dockview/components/tab/defaultTab.scss diff --git a/packages/dockview/src/dockview/components/tab/defaultTab.ts b/packages/dockview-core/src/dockview/components/tab/defaultTab.ts similarity index 100% rename from packages/dockview/src/dockview/components/tab/defaultTab.ts rename to packages/dockview-core/src/dockview/components/tab/defaultTab.ts diff --git a/packages/dockview/src/dockview/components/watermark/watermark.scss b/packages/dockview-core/src/dockview/components/watermark/watermark.scss similarity index 100% rename from packages/dockview/src/dockview/components/watermark/watermark.scss rename to packages/dockview-core/src/dockview/components/watermark/watermark.scss diff --git a/packages/dockview/src/dockview/components/watermark/watermark.ts b/packages/dockview-core/src/dockview/components/watermark/watermark.ts similarity index 100% rename from packages/dockview/src/dockview/components/watermark/watermark.ts rename to packages/dockview-core/src/dockview/components/watermark/watermark.ts diff --git a/packages/dockview/src/dockview/defaultGroupPanelView.ts b/packages/dockview-core/src/dockview/defaultGroupPanelView.ts similarity index 100% rename from packages/dockview/src/dockview/defaultGroupPanelView.ts rename to packages/dockview-core/src/dockview/defaultGroupPanelView.ts diff --git a/packages/dockview/src/dockview/deserializer.ts b/packages/dockview-core/src/dockview/deserializer.ts similarity index 100% rename from packages/dockview/src/dockview/deserializer.ts rename to packages/dockview-core/src/dockview/deserializer.ts diff --git a/packages/dockview/src/dockview/dockviewComponent.scss b/packages/dockview-core/src/dockview/dockviewComponent.scss similarity index 100% rename from packages/dockview/src/dockview/dockviewComponent.scss rename to packages/dockview-core/src/dockview/dockviewComponent.scss diff --git a/packages/dockview/src/dockview/dockviewComponent.ts b/packages/dockview-core/src/dockview/dockviewComponent.ts similarity index 100% rename from packages/dockview/src/dockview/dockviewComponent.ts rename to packages/dockview-core/src/dockview/dockviewComponent.ts diff --git a/packages/dockview/src/dockview/dockviewPanel.ts b/packages/dockview-core/src/dockview/dockviewPanel.ts similarity index 100% rename from packages/dockview/src/dockview/dockviewPanel.ts rename to packages/dockview-core/src/dockview/dockviewPanel.ts diff --git a/packages/dockview/src/dockview/options.ts b/packages/dockview-core/src/dockview/options.ts similarity index 100% rename from packages/dockview/src/dockview/options.ts rename to packages/dockview-core/src/dockview/options.ts diff --git a/packages/dockview-core/src/dockview/validation.ts b/packages/dockview-core/src/dockview/validation.ts new file mode 100644 index 000000000..f0a11f155 --- /dev/null +++ b/packages/dockview-core/src/dockview/validation.ts @@ -0,0 +1,117 @@ +import { SerializedGridObject } from '../gridview/gridview'; +import { GroupPanelViewState } from '../groupview/groupview'; +import { GroupviewPanelState } from '../groupview/types'; +import { Orientation } from '../splitview/core/splitview'; +import { SerializedDockview } from './dockviewComponent'; + +function validateGroupViewPanelState(value: GroupviewPanelState): void { + if (typeof value.id !== 'string') { + throw new Error('invalid layout'); + } + + if (typeof value.title !== 'string') { + throw new Error('invalid layout'); + } + + if (value.params !== undefined && typeof value.params !== 'object') { + throw new Error('invalid layout'); + } +} + +function validateGroupPanelViewState(value: GroupPanelViewState): void { + if (typeof value.id !== 'string') { + throw new Error('invalid layout'); + } + if (value.locked !== undefined && typeof value.locked !== 'boolean') { + throw new Error('invalid layout'); + } + if (value.hideHeader !== undefined && typeof value.locked !== 'boolean') { + throw new Error('invalid layout'); + } + if ( + value.activeView !== undefined && + typeof value.activeView !== 'string' + ) { + throw new Error('invalid layout'); + } + + if (!Array.isArray(value.views)) { + throw new Error('invalid layout'); + } + + for (const child of value.views) { + if (typeof child !== 'string') { + if (!Array.isArray(value.views)) { + throw new Error('invalid layout'); + } + } + } +} + +function validateSerializedGridObject( + value: SerializedGridObject +): void { + if (value.size !== undefined && typeof value.size !== 'number') { + throw new Error('invalid layout'); + } + + if (value.visible !== undefined && typeof value.size !== 'boolean') { + throw new Error('invalid layout'); + } + + if (value.type !== 'branch' && value.type !== 'leaf') { + throw new Error('invalid layout'); + } + + if (Array.isArray(value.data)) { + for (const child of value.data) { + validateSerializedGridObject(child); + } + } else { + validateGroupPanelViewState(value.data); + } +} + +export function validateSerializedDockview(data: SerializedDockview): void { + if (typeof data !== 'object') { + throw new Error('invalid layout'); + } + + const { grid, panels, options, activeGroup } = data; + + if (typeof grid !== 'object') { + throw new Error('invalid layout'); + } + + if (typeof grid.height !== 'number') { + throw new Error('invalid layout'); + } + + if (typeof grid.width !== 'number') { + throw new Error('invalid layout'); + } + + if ( + grid.orientation !== Orientation.HORIZONTAL && + grid.orientation !== Orientation.VERTICAL + ) { + throw new Error('invalid layout'); + } + + validateSerializedGridObject(grid.root); + + if ( + data.activeGroup !== undefined && + typeof data.activeGroup !== 'string' + ) { + throw new Error('invalid layout'); + } + + if (typeof data.panels !== 'object') { + throw new Error('invalid layout'); + } + + for (const value of Object.values(data.panels)) { + validateGroupViewPanelState(value); + } +} diff --git a/packages/dockview/src/dom.ts b/packages/dockview-core/src/dom.ts similarity index 100% rename from packages/dockview/src/dom.ts rename to packages/dockview-core/src/dom.ts diff --git a/packages/dockview/src/events.ts b/packages/dockview-core/src/events.ts similarity index 100% rename from packages/dockview/src/events.ts rename to packages/dockview-core/src/events.ts diff --git a/packages/dockview/src/gridview/baseComponentGridview.ts b/packages/dockview-core/src/gridview/baseComponentGridview.ts similarity index 100% rename from packages/dockview/src/gridview/baseComponentGridview.ts rename to packages/dockview-core/src/gridview/baseComponentGridview.ts diff --git a/packages/dockview/src/gridview/basePanelView.ts b/packages/dockview-core/src/gridview/basePanelView.ts similarity index 100% rename from packages/dockview/src/gridview/basePanelView.ts rename to packages/dockview-core/src/gridview/basePanelView.ts diff --git a/packages/dockview/src/gridview/branchNode.ts b/packages/dockview-core/src/gridview/branchNode.ts similarity index 100% rename from packages/dockview/src/gridview/branchNode.ts rename to packages/dockview-core/src/gridview/branchNode.ts diff --git a/packages/dockview/src/gridview/gridview.scss b/packages/dockview-core/src/gridview/gridview.scss similarity index 100% rename from packages/dockview/src/gridview/gridview.scss rename to packages/dockview-core/src/gridview/gridview.scss diff --git a/packages/dockview/src/gridview/gridview.ts b/packages/dockview-core/src/gridview/gridview.ts similarity index 100% rename from packages/dockview/src/gridview/gridview.ts rename to packages/dockview-core/src/gridview/gridview.ts diff --git a/packages/dockview/src/gridview/gridviewComponent.ts b/packages/dockview-core/src/gridview/gridviewComponent.ts similarity index 100% rename from packages/dockview/src/gridview/gridviewComponent.ts rename to packages/dockview-core/src/gridview/gridviewComponent.ts diff --git a/packages/dockview/src/gridview/gridviewPanel.ts b/packages/dockview-core/src/gridview/gridviewPanel.ts similarity index 98% rename from packages/dockview/src/gridview/gridviewPanel.ts rename to packages/dockview-core/src/gridview/gridviewPanel.ts index 34d620747..b95603bec 100644 --- a/packages/dockview/src/gridview/gridviewPanel.ts +++ b/packages/dockview-core/src/gridview/gridviewPanel.ts @@ -126,8 +126,8 @@ export abstract class GridviewPanel return this.api.isActive; } - constructor(id: string, component: string, api: GridviewPanelApiImpl) { - super(id, component, api); + constructor(id: string, component: string) { + super(id, component, new GridviewPanelApiImpl(id)); this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement diff --git a/packages/dockview/src/gridview/leafNode.ts b/packages/dockview-core/src/gridview/leafNode.ts similarity index 100% rename from packages/dockview/src/gridview/leafNode.ts rename to packages/dockview-core/src/gridview/leafNode.ts diff --git a/packages/dockview/src/gridview/options.ts b/packages/dockview-core/src/gridview/options.ts similarity index 100% rename from packages/dockview/src/gridview/options.ts rename to packages/dockview-core/src/gridview/options.ts diff --git a/packages/dockview/src/gridview/types.ts b/packages/dockview-core/src/gridview/types.ts similarity index 100% rename from packages/dockview/src/gridview/types.ts rename to packages/dockview-core/src/gridview/types.ts diff --git a/packages/dockview/src/groupview/dnd.ts b/packages/dockview-core/src/groupview/dnd.ts similarity index 100% rename from packages/dockview/src/groupview/dnd.ts rename to packages/dockview-core/src/groupview/dnd.ts diff --git a/packages/dockview/src/groupview/groupview.scss b/packages/dockview-core/src/groupview/groupview.scss similarity index 100% rename from packages/dockview/src/groupview/groupview.scss rename to packages/dockview-core/src/groupview/groupview.scss diff --git a/packages/dockview/src/groupview/groupview.ts b/packages/dockview-core/src/groupview/groupview.ts similarity index 100% rename from packages/dockview/src/groupview/groupview.ts rename to packages/dockview-core/src/groupview/groupview.ts diff --git a/packages/dockview/src/groupview/groupviewPanel.ts b/packages/dockview-core/src/groupview/groupviewPanel.ts similarity index 97% rename from packages/dockview/src/groupview/groupviewPanel.ts rename to packages/dockview-core/src/groupview/groupviewPanel.ts index cf1a0e276..4ef6caa77 100644 --- a/packages/dockview/src/groupview/groupviewPanel.ts +++ b/packages/dockview-core/src/groupview/groupviewPanel.ts @@ -74,7 +74,7 @@ export class GroupPanel extends GridviewPanel implements IGroupviewPanel { id: string, options: GroupOptions ) { - super(id, 'groupview_default', new GroupviewApi(id)); + super(id, 'groupview_default'); this._model = new Groupview(this.element, accessor, id, options, this); } diff --git a/packages/dockview/src/groupview/panel/content.ts b/packages/dockview-core/src/groupview/panel/content.ts similarity index 100% rename from packages/dockview/src/groupview/panel/content.ts rename to packages/dockview-core/src/groupview/panel/content.ts diff --git a/packages/dockview/src/groupview/tab.ts b/packages/dockview-core/src/groupview/tab.ts similarity index 100% rename from packages/dockview/src/groupview/tab.ts rename to packages/dockview-core/src/groupview/tab.ts diff --git a/packages/dockview/src/groupview/titlebar/tabsContainer.scss b/packages/dockview-core/src/groupview/titlebar/tabsContainer.scss similarity index 100% rename from packages/dockview/src/groupview/titlebar/tabsContainer.scss rename to packages/dockview-core/src/groupview/titlebar/tabsContainer.scss diff --git a/packages/dockview/src/groupview/titlebar/tabsContainer.ts b/packages/dockview-core/src/groupview/titlebar/tabsContainer.ts similarity index 100% rename from packages/dockview/src/groupview/titlebar/tabsContainer.ts rename to packages/dockview-core/src/groupview/titlebar/tabsContainer.ts diff --git a/packages/dockview/src/groupview/titlebar/voidContainer.ts b/packages/dockview-core/src/groupview/titlebar/voidContainer.ts similarity index 100% rename from packages/dockview/src/groupview/titlebar/voidContainer.ts rename to packages/dockview-core/src/groupview/titlebar/voidContainer.ts diff --git a/packages/dockview/src/groupview/types.ts b/packages/dockview-core/src/groupview/types.ts similarity index 100% rename from packages/dockview/src/groupview/types.ts rename to packages/dockview-core/src/groupview/types.ts diff --git a/packages/dockview/src/hostedContainer.ts b/packages/dockview-core/src/hostedContainer.ts similarity index 100% rename from packages/dockview/src/hostedContainer.ts rename to packages/dockview-core/src/hostedContainer.ts diff --git a/packages/dockview-core/src/index.ts b/packages/dockview-core/src/index.ts new file mode 100644 index 000000000..2621031ac --- /dev/null +++ b/packages/dockview-core/src/index.ts @@ -0,0 +1,2 @@ +export * from './core'; +// export * from './react'; // TODO: should be conditional on whether user wants the React wrappers diff --git a/packages/dockview/src/lifecycle.ts b/packages/dockview-core/src/lifecycle.ts similarity index 100% rename from packages/dockview/src/lifecycle.ts rename to packages/dockview-core/src/lifecycle.ts diff --git a/packages/dockview/src/math.ts b/packages/dockview-core/src/math.ts similarity index 100% rename from packages/dockview/src/math.ts rename to packages/dockview-core/src/math.ts diff --git a/packages/dockview/src/panel/componentFactory.ts b/packages/dockview-core/src/panel/componentFactory.ts similarity index 100% rename from packages/dockview/src/panel/componentFactory.ts rename to packages/dockview-core/src/panel/componentFactory.ts diff --git a/packages/dockview/src/panel/types.ts b/packages/dockview-core/src/panel/types.ts similarity index 100% rename from packages/dockview/src/panel/types.ts rename to packages/dockview-core/src/panel/types.ts diff --git a/packages/dockview/src/paneview/defaultPaneviewHeader.ts b/packages/dockview-core/src/paneview/defaultPaneviewHeader.ts similarity index 100% rename from packages/dockview/src/paneview/defaultPaneviewHeader.ts rename to packages/dockview-core/src/paneview/defaultPaneviewHeader.ts diff --git a/packages/dockview/src/paneview/draggablePaneviewPanel.ts b/packages/dockview-core/src/paneview/draggablePaneviewPanel.ts similarity index 93% rename from packages/dockview/src/paneview/draggablePaneviewPanel.ts rename to packages/dockview-core/src/paneview/draggablePaneviewPanel.ts index 55e3b26a5..9194456f9 100644 --- a/packages/dockview/src/paneview/draggablePaneviewPanel.ts +++ b/packages/dockview-core/src/paneview/draggablePaneviewPanel.ts @@ -1,3 +1,4 @@ +import { Paneview, PaneviewApi } from '../core'; import { DragHandler } from '../dnd/abstractDragHandler'; import { getPaneData, @@ -15,16 +16,17 @@ import { PaneviewPanel, } from './paneviewPanel'; -export interface PaneviewDropEvent2 extends DroptargetEvent { +export interface PaneviewDropEvent extends DroptargetEvent { panel: IPaneviewPanel; getData: () => PaneTransfer | undefined; + api: PaneviewApi; } export abstract class DraggablePaneviewPanel extends PaneviewPanel { private handler: DragHandler | undefined; private target: Droptarget | undefined; - private readonly _onDidDrop = new Emitter(); + private readonly _onDidDrop = new Emitter(); readonly onDidDrop = this._onDidDrop.event; constructor( @@ -117,6 +119,7 @@ export abstract class DraggablePaneviewPanel extends PaneviewPanel { this._onDidDrop.fire({ ...event, panel: this, + api: new PaneviewApi(this.accessor), getData: getPaneData, }); return; @@ -133,6 +136,7 @@ export abstract class DraggablePaneviewPanel extends PaneviewPanel { ...event, panel: this, getData: getPaneData, + api: new PaneviewApi(this.accessor), }); return; } diff --git a/packages/dockview/src/paneview/options.ts b/packages/dockview-core/src/paneview/options.ts similarity index 100% rename from packages/dockview/src/paneview/options.ts rename to packages/dockview-core/src/paneview/options.ts diff --git a/packages/dockview/src/paneview/paneview.scss b/packages/dockview-core/src/paneview/paneview.scss similarity index 100% rename from packages/dockview/src/paneview/paneview.scss rename to packages/dockview-core/src/paneview/paneview.scss diff --git a/packages/dockview/src/paneview/paneview.ts b/packages/dockview-core/src/paneview/paneview.ts similarity index 100% rename from packages/dockview/src/paneview/paneview.ts rename to packages/dockview-core/src/paneview/paneview.ts diff --git a/packages/dockview/src/paneview/paneviewComponent.ts b/packages/dockview-core/src/paneview/paneviewComponent.ts similarity index 98% rename from packages/dockview/src/paneview/paneviewComponent.ts rename to packages/dockview-core/src/paneview/paneviewComponent.ts index d0995b3a6..7cf3b04a1 100644 --- a/packages/dockview/src/paneview/paneviewComponent.ts +++ b/packages/dockview-core/src/paneview/paneviewComponent.ts @@ -21,7 +21,7 @@ import { } from './paneviewPanel'; import { DraggablePaneviewPanel, - PaneviewDropEvent2, + PaneviewDropEvent, } from './draggablePaneviewPanel'; import { DefaultHeader } from './defaultPaneviewHeader'; import { sequentialNumberGenerator } from '../math'; @@ -115,7 +115,7 @@ export interface IPaneviewComponent extends IDisposable { readonly options: PaneviewComponentOptions; readonly onDidAddView: Event; readonly onDidRemoveView: Event; - readonly onDidDrop: Event; + readonly onDidDrop: Event; readonly onDidLayoutChange: Event; readonly onDidLayoutFromJSON: Event; addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel; @@ -146,8 +146,8 @@ export class PaneviewComponent private readonly _onDidLayoutChange = new Emitter(); readonly onDidLayoutChange: Event = this._onDidLayoutChange.event; - private readonly _onDidDrop = new Emitter(); - readonly onDidDrop: Event = this._onDidDrop.event; + private readonly _onDidDrop = new Emitter(); + readonly onDidDrop: Event = this._onDidDrop.event; private readonly _onDidAddView = new Emitter(); readonly onDidAddView = this._onDidAddView.event; diff --git a/packages/dockview/src/paneview/paneviewPanel.ts b/packages/dockview-core/src/paneview/paneviewPanel.ts similarity index 100% rename from packages/dockview/src/paneview/paneviewPanel.ts rename to packages/dockview-core/src/paneview/paneviewPanel.ts diff --git a/packages/dockview/src/splitview/core/options.ts b/packages/dockview-core/src/splitview/core/options.ts similarity index 100% rename from packages/dockview/src/splitview/core/options.ts rename to packages/dockview-core/src/splitview/core/options.ts diff --git a/packages/dockview/src/splitview/core/splitview.scss b/packages/dockview-core/src/splitview/core/splitview.scss similarity index 100% rename from packages/dockview/src/splitview/core/splitview.scss rename to packages/dockview-core/src/splitview/core/splitview.scss diff --git a/packages/dockview/src/splitview/core/splitview.ts b/packages/dockview-core/src/splitview/core/splitview.ts similarity index 100% rename from packages/dockview/src/splitview/core/splitview.ts rename to packages/dockview-core/src/splitview/core/splitview.ts diff --git a/packages/dockview/src/splitview/core/viewItem.ts b/packages/dockview-core/src/splitview/core/viewItem.ts similarity index 100% rename from packages/dockview/src/splitview/core/viewItem.ts rename to packages/dockview-core/src/splitview/core/viewItem.ts diff --git a/packages/dockview/src/splitview/splitviewComponent.ts b/packages/dockview-core/src/splitview/splitviewComponent.ts similarity index 100% rename from packages/dockview/src/splitview/splitviewComponent.ts rename to packages/dockview-core/src/splitview/splitviewComponent.ts diff --git a/packages/dockview/src/splitview/splitviewPanel.ts b/packages/dockview-core/src/splitview/splitviewPanel.ts similarity index 100% rename from packages/dockview/src/splitview/splitviewPanel.ts rename to packages/dockview-core/src/splitview/splitviewPanel.ts diff --git a/packages/dockview/src/svg.scss b/packages/dockview-core/src/svg.scss similarity index 100% rename from packages/dockview/src/svg.scss rename to packages/dockview-core/src/svg.scss diff --git a/packages/dockview/src/svg.ts b/packages/dockview-core/src/svg.ts similarity index 100% rename from packages/dockview/src/svg.ts rename to packages/dockview-core/src/svg.ts diff --git a/packages/dockview/src/theme.scss b/packages/dockview-core/src/theme.scss similarity index 100% rename from packages/dockview/src/theme.scss rename to packages/dockview-core/src/theme.scss diff --git a/packages/dockview-core/src/types.ts b/packages/dockview-core/src/types.ts new file mode 100644 index 000000000..fbe4b5799 --- /dev/null +++ b/packages/dockview-core/src/types.ts @@ -0,0 +1,13 @@ +export interface Constructor { + new (): T; +} + +export interface FrameworkFactory { + createComponent: (id: string, componentId: string, component: any) => T; +} + +export type FunctionOrValue = (() => T) | T; + +export function isBooleanValue(value: any): value is boolean { + return typeof value === 'boolean'; +} diff --git a/packages/dockview-core/test.html b/packages/dockview-core/test.html new file mode 100644 index 000000000..dc77f294d --- /dev/null +++ b/packages/dockview-core/test.html @@ -0,0 +1,87 @@ + + + + + + + +
+
+
+
+ + + diff --git a/packages/dockview-core/tsconfig.esm.json b/packages/dockview-core/tsconfig.esm.json new file mode 100644 index 000000000..b48538b62 --- /dev/null +++ b/packages/dockview-core/tsconfig.esm.json @@ -0,0 +1,11 @@ +{ + "extends": "../../module-build/tsconfig.esm.json", + "compilerOptions": { + "outDir": "dist/esm", + "tsBuildInfoFile": ".build/tsconfig.tsbuildinfo.esm", + "jsx": "react", + "rootDir": "src" + }, + "include": ["src"], + "exclude": ["**/node_modules", "src/__tests__"] +} diff --git a/packages/dockview-core/tsconfig.json b/packages/dockview-core/tsconfig.json new file mode 100644 index 000000000..9ff78cef1 --- /dev/null +++ b/packages/dockview-core/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../module-build/tsconfig.json", + "compilerOptions": { + "outDir": "dist/cjs", + "tsBuildInfoFile": ".build/tsconfig.tsbuildinfo.cjs", + "jsx": "react", + "rootDir": "src" + }, + "include": ["src"], + "exclude": ["**/node_modules", "src/__tests__"] +} \ No newline at end of file diff --git a/packages/dockview-core/typedoc.json b/packages/dockview-core/typedoc.json new file mode 100644 index 000000000..9ab13c458 --- /dev/null +++ b/packages/dockview-core/typedoc.json @@ -0,0 +1,7 @@ +{ + "out": "typedocs", + "entryPoints": ["./src/index.ts"], + "exclude": ["**/_test/**/*.*", "**/index.ts"], + "excludeExternals": true, + "excludePrivate": true +} diff --git a/packages/dockview/package.json b/packages/dockview/package.json index d2adaf103..932a6e24f 100644 --- a/packages/dockview/package.json +++ b/packages/dockview/package.json @@ -55,6 +55,9 @@ ], "author": "https://github.com/mathuo", "license": "MIT", + "dependencies": { + "dockview-core": "^1.6.0" + }, "devDependencies": { "@rollup/plugin-typescript": "^11.0.0", "@testing-library/react": "^13.4.0", diff --git a/packages/dockview/src/react/deserializer.ts b/packages/dockview/src/deserializer.ts similarity index 75% rename from packages/dockview/src/react/deserializer.ts rename to packages/dockview/src/deserializer.ts index 36f16d570..d071fa66e 100644 --- a/packages/dockview/src/react/deserializer.ts +++ b/packages/dockview/src/deserializer.ts @@ -1,13 +1,16 @@ -import { DockviewComponent } from '../dockview/dockviewComponent'; -import { GroupviewPanelState } from '../groupview/types'; -import { DockviewPanel, IDockviewPanel } from '../dockview/dockviewPanel'; -import { IPanelDeserializer } from '../dockview/deserializer'; -import { createComponent } from '../panel/componentFactory'; -import { DockviewApi } from '../api/component.api'; -import { DefaultTab } from '../dockview/components/tab/defaultTab'; -import { DefaultGroupPanelView } from '../dockview/defaultGroupPanelView'; -import { GroupPanel } from '../groupview/groupviewPanel'; -import { ITabRenderer } from '../groupview/types'; +import { + ITabRenderer, + GroupPanel, + DefaultGroupPanelView, + DefaultTab, + DockviewApi, + createComponent, + IPanelDeserializer, + DockviewPanel, + IDockviewPanel, + GroupviewPanelState, + DockviewComponent, +} from 'dockview-core'; export class ReactPanelDeserialzier implements IPanelDeserializer { constructor(private readonly layout: DockviewComponent) {} diff --git a/packages/dockview/src/react/dockview/defaultTab.scss b/packages/dockview/src/dockview/defaultTab.scss similarity index 100% rename from packages/dockview/src/react/dockview/defaultTab.scss rename to packages/dockview/src/dockview/defaultTab.scss diff --git a/packages/dockview/src/react/dockview/defaultTab.tsx b/packages/dockview/src/dockview/defaultTab.tsx similarity index 100% rename from packages/dockview/src/react/dockview/defaultTab.tsx rename to packages/dockview/src/dockview/defaultTab.tsx diff --git a/packages/dockview/src/react/dockview/dockview.scss b/packages/dockview/src/dockview/dockview.scss similarity index 100% rename from packages/dockview/src/react/dockview/dockview.scss rename to packages/dockview/src/dockview/dockview.scss diff --git a/packages/dockview/src/react/dockview/dockview.tsx b/packages/dockview/src/dockview/dockview.tsx similarity index 95% rename from packages/dockview/src/react/dockview/dockview.tsx rename to packages/dockview/src/dockview/dockview.tsx index d6250d786..35c8b7232 100644 --- a/packages/dockview/src/react/dockview/dockview.tsx +++ b/packages/dockview/src/dockview/dockview.tsx @@ -2,28 +2,28 @@ import * as React from 'react'; import { DockviewComponent, DockviewDropEvent, -} from '../../dockview/dockviewComponent'; -import { ReactPanelContentPart } from './reactContentPart'; -import { ReactPanelHeaderPart } from './reactHeaderPart'; -import { ReactPanelDeserialzier } from '../deserializer'; -import { DockviewDndOverlayEvent, GroupPanelFrameworkComponentFactory, IGroupControlRenderer, -} from '../../dockview/options'; -import { DockviewPanelApi } from '../../api/dockviewPanelApi'; + DockviewPanelApi, + DockviewApi, + IContentRenderer, + ITabRenderer, + watchElementResize, + GroupPanel, + DEFAULT_TAB_IDENTIFIER, +} from 'dockview-core'; +import { ReactPanelContentPart } from './reactContentPart'; +import { ReactPanelHeaderPart } from './reactHeaderPart'; +import { ReactPanelDeserialzier } from '../deserializer'; + import { ReactPortalStore, usePortalsLifecycle } from '../react'; -import { DockviewApi } from '../../api/component.api'; import { IWatermarkPanelProps, ReactWatermarkPart } from './reactWatermarkPart'; import { PanelCollection, PanelParameters } from '../types'; -import { watchElementResize } from '../../dom'; -import { IContentRenderer, ITabRenderer } from '../../groupview/types'; import { IDockviewGroupControlProps, ReactGroupControlsRendererPart, } from './groupControlsRenderer'; -import { GroupPanel } from '../../groupview/groupviewPanel'; -import { DEFAULT_TAB_IDENTIFIER } from '../../dockview/components/tab/defaultTab'; function createGroupControlElement( component: React.FunctionComponent | undefined, diff --git a/packages/dockview/src/react/dockview/groupControlsRenderer.ts b/packages/dockview/src/dockview/groupControlsRenderer.ts similarity index 89% rename from packages/dockview/src/react/dockview/groupControlsRenderer.ts rename to packages/dockview/src/dockview/groupControlsRenderer.ts index e1014518a..1b954a66b 100644 --- a/packages/dockview/src/react/dockview/groupControlsRenderer.ts +++ b/packages/dockview/src/dockview/groupControlsRenderer.ts @@ -1,10 +1,14 @@ import * as React from 'react'; import { ReactPart, ReactPortalStore } from '../react'; -import { PanelUpdateEvent } from '../../panel/types'; -import { GroupPanel, GroupviewPanelApi } from '../../groupview/groupviewPanel'; -import { DockviewApi } from '../../api/component.api'; -import { CompositeDisposable, MutableDisposable } from '../../lifecycle'; -import { IDockviewPanel } from '../../dockview/dockviewPanel'; +import { + IDockviewPanel, + CompositeDisposable, + MutableDisposable, + DockviewApi, + GroupPanel, + GroupviewPanelApi, + PanelUpdateEvent, +} from 'dockview-core'; export interface IDockviewGroupControlProps { api: GroupviewPanelApi; diff --git a/packages/dockview/src/react/dockview/reactContentPart.ts b/packages/dockview/src/dockview/reactContentPart.ts similarity index 91% rename from packages/dockview/src/react/dockview/reactContentPart.ts rename to packages/dockview/src/dockview/reactContentPart.ts index 41ea1d954..9f3557609 100644 --- a/packages/dockview/src/react/dockview/reactContentPart.ts +++ b/packages/dockview/src/dockview/reactContentPart.ts @@ -1,13 +1,14 @@ import * as React from 'react'; -import { - IContentRenderer, - GroupPanelContentPartInitParameters, -} from '../../groupview/types'; import { ReactPart, ReactPortalStore } from '../react'; import { IDockviewPanelProps } from '../dockview/dockview'; -import { PanelUpdateEvent } from '../../panel/types'; -import { GroupPanel } from '../../groupview/groupviewPanel'; -import { Emitter, Event } from '../../events'; +import { + Emitter, + Event, + GroupPanel, + PanelUpdateEvent, + IContentRenderer, + GroupPanelContentPartInitParameters, +} from 'dockview-core'; export class ReactPanelContentPart implements IContentRenderer { private _element: HTMLElement; diff --git a/packages/dockview/src/react/dockview/reactHeaderPart.ts b/packages/dockview/src/dockview/reactHeaderPart.ts similarity index 88% rename from packages/dockview/src/react/dockview/reactHeaderPart.ts rename to packages/dockview/src/dockview/reactHeaderPart.ts index b2f137ea8..602054d36 100644 --- a/packages/dockview/src/react/dockview/reactHeaderPart.ts +++ b/packages/dockview/src/dockview/reactHeaderPart.ts @@ -1,13 +1,14 @@ import * as React from 'react'; -import { - ITabRenderer, - GroupPanelPartInitParameters, -} from '../../groupview/types'; -import { GroupPanel } from '../../groupview/groupviewPanel'; -import { PanelUpdateEvent } from '../../panel/types'; + import { ReactPart, ReactPortalStore } from '../react'; import { IGroupPanelBaseProps } from './dockview'; -import { DEFAULT_TAB_IDENTIFIER } from '../../dockview/components/tab/defaultTab'; +import { + DEFAULT_TAB_IDENTIFIER, + PanelUpdateEvent, + GroupPanel, + ITabRenderer, + GroupPanelPartInitParameters, +} from 'dockview-core'; export class ReactPanelHeaderPart implements ITabRenderer { private _element: HTMLElement; diff --git a/packages/dockview/src/react/dockview/reactWatermarkPart.ts b/packages/dockview/src/dockview/reactWatermarkPart.ts similarity index 93% rename from packages/dockview/src/react/dockview/reactWatermarkPart.ts rename to packages/dockview/src/dockview/reactWatermarkPart.ts index 7fa44d505..e0b7253ed 100644 --- a/packages/dockview/src/react/dockview/reactWatermarkPart.ts +++ b/packages/dockview/src/dockview/reactWatermarkPart.ts @@ -1,12 +1,12 @@ import * as React from 'react'; -import { - GroupPanelPartInitParameters, - IWatermarkRenderer, -} from '../../groupview/types'; -import { GroupPanel } from '../../groupview/groupviewPanel'; import { ReactPart, ReactPortalStore } from '../react'; import { IGroupPanelBaseProps } from './dockview'; -import { PanelUpdateEvent } from '../../panel/types'; +import { + PanelUpdateEvent, + GroupPanel, + GroupPanelPartInitParameters, + IWatermarkRenderer, +} from 'dockview-core'; export interface IWatermarkPanelProps extends IGroupPanelBaseProps { close: () => void; diff --git a/packages/dockview/src/react/dockview/v2/reactContentRenderer.ts b/packages/dockview/src/dockview/v2/reactContentRenderer.ts similarity index 92% rename from packages/dockview/src/react/dockview/v2/reactContentRenderer.ts rename to packages/dockview/src/dockview/v2/reactContentRenderer.ts index 83f693b80..2ffeef9ae 100644 --- a/packages/dockview/src/react/dockview/v2/reactContentRenderer.ts +++ b/packages/dockview/src/dockview/v2/reactContentRenderer.ts @@ -1,10 +1,10 @@ import { GroupPanelPartInitParameters, IContentRenderer, -} from '../../../groupview/types'; -import { GroupPanel } from '../../../groupview/groupviewPanel'; -import { HostedContainer } from '../../../hostedContainer'; -import { PanelUpdateEvent } from '../../../panel/types'; + GroupPanel, + HostedContainer, + PanelUpdateEvent, +} from 'dockview-core'; import { ReactPart, ReactPortalStore } from '../../react'; import { IDockviewPanelProps } from '../dockview'; diff --git a/packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts b/packages/dockview/src/dockview/v2/reactGroupPanelView.ts similarity index 79% rename from packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts rename to packages/dockview/src/dockview/v2/reactGroupPanelView.ts index b9925790a..d0b39f730 100644 --- a/packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts +++ b/packages/dockview/src/dockview/v2/reactGroupPanelView.ts @@ -1,10 +1,10 @@ -import { DefaultTab } from '../../../dockview/components/tab/defaultTab'; +import { ReactPortalStore } from '../../react'; import { + DefaultGroupPanelView, DockviewRenderFunctions, ViewFactoryData, -} from '../../../dockview/options'; -import { ReactPortalStore } from '../../react'; -import { DefaultGroupPanelView } from '../../../dockview/defaultGroupPanelView'; + DefaultTab, +} from 'dockview-core'; import { ReactContentRenderer } from './reactContentRenderer'; export class ReactGroupPanelView extends DefaultGroupPanelView { diff --git a/packages/dockview/src/react/dockview/v2/webviewContentRenderer.ts b/packages/dockview/src/dockview/v2/webviewContentRenderer.ts similarity index 85% rename from packages/dockview/src/react/dockview/v2/webviewContentRenderer.ts rename to packages/dockview/src/dockview/v2/webviewContentRenderer.ts index 71c5beb31..374b887ba 100644 --- a/packages/dockview/src/react/dockview/v2/webviewContentRenderer.ts +++ b/packages/dockview/src/dockview/v2/webviewContentRenderer.ts @@ -1,10 +1,10 @@ import { GroupPanelPartInitParameters, IContentRenderer, -} from '../../../groupview/types'; -import { GroupPanel } from '../../../groupview/groupviewPanel'; -import { HostedContainer } from '../../../hostedContainer'; -import { PanelUpdateEvent } from '../../../panel/types'; + GroupPanel, + HostedContainer, + PanelUpdateEvent, +} from 'dockview-core'; export class WebviewContentRenderer implements IContentRenderer { private _hostedContainer: HostedContainer; diff --git a/packages/dockview/src/react/gridview/gridview.tsx b/packages/dockview/src/gridview/gridview.tsx similarity index 93% rename from packages/dockview/src/react/gridview/gridview.tsx rename to packages/dockview/src/gridview/gridview.tsx index d13db6eb2..bd330e65d 100644 --- a/packages/dockview/src/react/gridview/gridview.tsx +++ b/packages/dockview/src/gridview/gridview.tsx @@ -2,14 +2,14 @@ import * as React from 'react'; import { GridviewComponent, IGridviewComponent, -} from '../../gridview/gridviewComponent'; -import { GridviewPanelApi } from '../../api/gridviewPanelApi'; -import { Orientation } from '../../splitview/core/splitview'; + GridviewPanelApi, + Orientation, + GridviewApi, + watchElementResize, +} from 'dockview-core'; import { ReactGridPanelView } from './view'; import { usePortalsLifecycle } from '../react'; -import { GridviewApi } from '../../api/component.api'; import { PanelCollection, PanelParameters } from '../types'; -import { watchElementResize } from '../../dom'; export interface GridviewReadyEvent { api: GridviewApi; diff --git a/packages/dockview/src/react/gridview/view.ts b/packages/dockview/src/gridview/view.ts similarity index 76% rename from packages/dockview/src/react/gridview/view.ts rename to packages/dockview/src/gridview/view.ts index 992e647da..c941457e5 100644 --- a/packages/dockview/src/react/gridview/view.ts +++ b/packages/dockview/src/gridview/view.ts @@ -1,10 +1,9 @@ -import { GridviewApi } from '../../api/component.api'; -import { GridviewPanelApiImpl } from '../../api/gridviewPanelApi'; import { + GridviewApi, GridviewPanel, GridviewInitParameters, -} from '../../gridview/gridviewPanel'; -import { IFrameworkPart } from '../../panel/types'; + IFrameworkPart, +} from 'dockview-core'; import { ReactPart, ReactPortalStore } from '../react'; import { IGridviewPanelProps } from './gridview'; @@ -15,7 +14,7 @@ export class ReactGridPanelView extends GridviewPanel { private readonly reactComponent: React.FunctionComponent, private readonly reactPortalStore: ReactPortalStore ) { - super(id, component, new GridviewPanelApiImpl(id)); + super(id, component); } getComponent(): IFrameworkPart { diff --git a/packages/dockview/src/index.scss b/packages/dockview/src/index.scss new file mode 100644 index 000000000..7c4a8f79e --- /dev/null +++ b/packages/dockview/src/index.scss @@ -0,0 +1 @@ +@import "dockview-core/dist/styles/dockview.css" diff --git a/packages/dockview/src/index.ts b/packages/dockview/src/index.ts index 1b788ad1a..acc7fec37 100644 --- a/packages/dockview/src/index.ts +++ b/packages/dockview/src/index.ts @@ -1,2 +1,11 @@ -export * from './core'; -export * from './react'; // TODO: should be conditional on whether user wants the React wrappers +export * from 'dockview-core'; + +export * from './dockview/dockview'; +export * from './dockview/defaultTab'; +export * from './splitview/splitview'; +export * from './gridview/gridview'; +export { IDockviewGroupControlProps } from './dockview/groupControlsRenderer'; +export { IWatermarkPanelProps } from './dockview/reactWatermarkPart'; +export * from './paneview/paneview'; +export * from './types'; +export * from './react'; diff --git a/packages/dockview/src/react/paneview/paneview.tsx b/packages/dockview/src/paneview/paneview.tsx similarity index 92% rename from packages/dockview/src/react/paneview/paneview.tsx rename to packages/dockview/src/paneview/paneview.tsx index 8dbba197f..ed27f9893 100644 --- a/packages/dockview/src/react/paneview/paneview.tsx +++ b/packages/dockview/src/paneview/paneview.tsx @@ -1,16 +1,16 @@ import * as React from 'react'; -import { PaneviewPanelApi } from '../../api/paneviewPanelApi'; import { + PaneviewPanelApi, PaneviewComponent, IPaneviewComponent, PaneviewDndOverlayEvent, -} from '../../paneview/paneviewComponent'; + PaneviewApi, + watchElementResize, + PaneviewDropEvent, +} from 'dockview-core'; import { usePortalsLifecycle } from '../react'; -import { PaneviewApi } from '../../api/component.api'; import { PanePanelSection } from './view'; import { PanelCollection, PanelParameters } from '../types'; -import { watchElementResize } from '../../dom'; -import { PaneviewDropEvent2 } from '../../paneview/draggablePaneviewPanel'; export interface PaneviewReadyEvent { api: PaneviewApi; @@ -23,10 +23,6 @@ export interface IPaneviewPanelProps title: string; } -export interface PaneviewDropEvent extends PaneviewDropEvent2 { - api: PaneviewApi; -} - export interface IPaneviewReactProps { onReady: (event: PaneviewReadyEvent) => void; components: PanelCollection; diff --git a/packages/dockview/src/react/paneview/view.tsx b/packages/dockview/src/paneview/view.tsx similarity index 93% rename from packages/dockview/src/react/paneview/view.tsx rename to packages/dockview/src/paneview/view.tsx index 06624a873..5a3ccfc2c 100644 --- a/packages/dockview/src/react/paneview/view.tsx +++ b/packages/dockview/src/paneview/view.tsx @@ -1,9 +1,9 @@ import * as React from 'react'; -import { PanelUpdateEvent } from '../../panel/types'; import { + PanelUpdateEvent, IPaneBodyPart, PanePanelComponentInitParameter, -} from '../../paneview/paneviewPanel'; +} from 'dockview-core'; import { ReactPart, ReactPortalStore } from '../react'; import { IPaneviewPanelProps } from './paneview'; diff --git a/packages/dockview/src/react/react.ts b/packages/dockview/src/react.ts similarity index 97% rename from packages/dockview/src/react/react.ts rename to packages/dockview/src/react.ts index 73bb1e3ef..52991e7c6 100644 --- a/packages/dockview/src/react/react.ts +++ b/packages/dockview/src/react.ts @@ -1,8 +1,10 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { IDisposable } from '../lifecycle'; -import { sequentialNumberGenerator } from '../math'; -import { IFrameworkPart } from '../panel/types'; +import { + IFrameworkPart, + sequentialNumberGenerator, + IDisposable, +} from 'dockview-core'; export interface ReactPortalStore { addPortal: (portal: React.ReactPortal) => IDisposable; diff --git a/packages/dockview/src/react/index.ts b/packages/dockview/src/react/index.ts deleted file mode 100644 index 96c0eef63..000000000 --- a/packages/dockview/src/react/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './dockview/dockview'; -export * from './dockview/defaultTab'; -export * from './splitview/splitview'; -export * from './gridview/gridview'; -export { IDockviewGroupControlProps } from './dockview/groupControlsRenderer'; -export { IWatermarkPanelProps } from './dockview/reactWatermarkPart'; -export * from './paneview/paneview'; -export * from './types'; -export * from './react'; diff --git a/packages/dockview/src/react/types.ts b/packages/dockview/src/react/types.ts deleted file mode 100644 index d5b7b07a3..000000000 --- a/packages/dockview/src/react/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as React from 'react'; - -export interface PanelCollection { - [name: string]: React.FunctionComponent; -} - -export interface PanelParameters> { - params: T; -} diff --git a/packages/dockview/src/react/splitview/splitview.tsx b/packages/dockview/src/splitview/splitview.tsx similarity index 92% rename from packages/dockview/src/react/splitview/splitview.tsx rename to packages/dockview/src/splitview/splitview.tsx index 7fe6877c8..d6382a29f 100644 --- a/packages/dockview/src/react/splitview/splitview.tsx +++ b/packages/dockview/src/splitview/splitview.tsx @@ -1,15 +1,15 @@ import * as React from 'react'; -import { SplitviewApi } from '../../api/component.api'; -import { SplitviewPanelApi } from '../../api/splitviewPanelApi'; import { + SplitviewApi, + SplitviewPanelApi, ISplitviewComponent, SplitviewComponent, -} from '../../splitview/splitviewComponent'; -import { Orientation } from '../../splitview/core/splitview'; + Orientation, + watchElementResize, +} from 'dockview-core'; import { usePortalsLifecycle } from '../react'; import { PanelCollection, PanelParameters } from '../types'; import { ReactPanelView } from './view'; -import { watchElementResize } from '../../dom'; export interface SplitviewReadyEvent { api: SplitviewApi; diff --git a/packages/dockview/src/react/splitview/view.ts b/packages/dockview/src/splitview/view.ts similarity index 81% rename from packages/dockview/src/react/splitview/view.ts rename to packages/dockview/src/splitview/view.ts index 9c7c66450..51a7aa53b 100644 --- a/packages/dockview/src/react/splitview/view.ts +++ b/packages/dockview/src/splitview/view.ts @@ -1,6 +1,8 @@ -import { SplitviewApi } from '../../api/component.api'; -import { PanelViewInitParameters } from '../../splitview/core/options'; -import { SplitviewPanel } from '../../splitview/splitviewPanel'; +import { + SplitviewApi, + PanelViewInitParameters, + SplitviewPanel, +} from 'dockview-core'; import { ReactPart, ReactPortalStore } from '../react'; import { ISplitviewPanelProps } from './splitview'; diff --git a/packages/dockview/src/react/svg.tsx b/packages/dockview/src/svg.tsx similarity index 100% rename from packages/dockview/src/react/svg.tsx rename to packages/dockview/src/svg.tsx diff --git a/packages/dockview/src/types.ts b/packages/dockview/src/types.ts index fbe4b5799..d5b7b07a3 100644 --- a/packages/dockview/src/types.ts +++ b/packages/dockview/src/types.ts @@ -1,13 +1,9 @@ -export interface Constructor { - new (): T; +import * as React from 'react'; + +export interface PanelCollection { + [name: string]: React.FunctionComponent; } -export interface FrameworkFactory { - createComponent: (id: string, componentId: string, component: any) => T; -} - -export type FunctionOrValue = (() => T) | T; - -export function isBooleanValue(value: any): value is boolean { - return typeof value === 'boolean'; +export interface PanelParameters> { + params: T; }