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
+
+
+
+---
+
+[](https://www.npmjs.com/package/dockview)
+[](https://github.com/mathuo/dockview/actions?query=workflow%3ACI)
+[](https://sonarcloud.io/summary/overall?id=mathuo_dockview)
+[](https://sonarcloud.io/summary/overall?id=mathuo_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;
}