;
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 93%
rename from packages/dockview/src/react/react.ts
rename to packages/dockview/src/react.ts
index 73bb1e3ef..9d78ba4c1 100644
--- a/packages/dockview/src/react/react.ts
+++ b/packages/dockview/src/react.ts
@@ -1,11 +1,9 @@
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, IDockviewDisposable } from 'dockview-core';
export interface ReactPortalStore {
- addPortal: (portal: React.ReactPortal) => IDisposable;
+ addPortal: (portal: React.ReactPortal) => IDockviewDisposable;
}
interface IPanelWrapperProps {
@@ -58,7 +56,10 @@ ReactComponentBridge.displayName = 'DockviewReactJsBridge';
* require a key property like any other React element rendered in an array
* to prevent excessive re-rendering
*/
-const uniquePortalKeyGenerator = sequentialNumberGenerator();
+const uniquePortalKeyGenerator = (() => {
+ let value = 1;
+ return { next: () => `dockview_react_portal_key_${(value++).toString()}` };
+})();
export const ReactPartContext = React.createContext<{}>({});
@@ -67,7 +68,10 @@ export class ReactPart
{
private _initialProps: Record = {};
private componentInstance?: IPanelWrapperRef;
- private ref?: { portal: React.ReactPortal; disposable: IDisposable };
+ private ref?: {
+ portal: React.ReactPortal;
+ disposable: IDockviewDisposable;
+ };
private disposed = false;
constructor(
@@ -154,7 +158,7 @@ export class ReactPart
type PortalLifecycleHook = () => [
React.ReactPortal[],
- (portal: React.ReactPortal) => IDisposable
+ (portal: React.ReactPortal) => IDockviewDisposable
];
/**
diff --git a/packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts b/packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts
deleted file mode 100644
index b9925790a..000000000
--- a/packages/dockview/src/react/dockview/v2/reactGroupPanelView.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { DefaultTab } from '../../../dockview/components/tab/defaultTab';
-import {
- DockviewRenderFunctions,
- ViewFactoryData,
-} from '../../../dockview/options';
-import { ReactPortalStore } from '../../react';
-import { DefaultGroupPanelView } from '../../../dockview/defaultGroupPanelView';
-import { ReactContentRenderer } from './reactContentRenderer';
-
-export class ReactGroupPanelView extends DefaultGroupPanelView {
- constructor(
- id: string,
- options: DockviewRenderFunctions,
- private readonly data: ViewFactoryData,
- reactPortalStore: ReactPortalStore
- ) {
- super({
- content: new ReactContentRenderer(
- id,
- options.frameworkComponents![data.content],
- reactPortalStore
- ),
- tab: new DefaultTab(),
- });
- }
-
- // toJSON() {
- // return { ...this.data };
- // }
-}
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;
}
diff --git a/packages/dockview/tsconfig.json b/packages/dockview/tsconfig.json
index 9ff78cef1..9e9f62ec0 100644
--- a/packages/dockview/tsconfig.json
+++ b/packages/dockview/tsconfig.json
@@ -6,6 +6,9 @@
"jsx": "react",
"rootDir": "src"
},
+ "references": [
+ { "dockview-core": "../dockview-core" }
+ ],
"include": ["src"],
"exclude": ["**/node_modules", "src/__tests__"]
-}
\ No newline at end of file
+}
diff --git a/sonar-project.properties b/sonar-project.properties
index 9ceed39eb..92decfee7 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -1,9 +1,9 @@
sonar.projectKey=mathuo_dockview
sonar.organization=dockview
-sonar.inclusions=packages/dockview/src/**/*
-sonar.exclusions=packages/dockview/src/__tests__/**
-sonar.tests=packages/dockview/src/__tests__
+sonar.inclusions=packages/dockview/src/**/*,packages/dockview-core/src/**/*
+sonar.exclusions=packages/dockview/src/__tests__/**,packages/dockview-core/src/__tests__/**
+sonar.tests=packages/dockview/src/__tests__,packages/dockview-core/src/__tests__
sonar.testExecutionReportPaths=test-report.xml
sonar.javascript.lcov.reportPaths=coverage/lcov.info
diff --git a/yarn.lock b/yarn.lock
index 73e8049a2..87f2953e5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2409,6 +2409,18 @@
resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+"@rollup/plugin-node-resolve@^15.0.1":
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz#72be449b8e06f6367168d5b3cd5e2802e0248971"
+ integrity sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==
+ dependencies:
+ "@rollup/pluginutils" "^5.0.1"
+ "@types/resolve" "1.20.2"
+ deepmerge "^4.2.2"
+ is-builtin-module "^3.2.0"
+ is-module "^1.0.0"
+ resolve "^1.22.1"
+
"@rollup/plugin-typescript@^11.0.0":
version "11.0.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz#f136272d1df5209daca0cb6f171c574b1d505545"
@@ -2926,6 +2938,11 @@
"@types/scheduler" "*"
csstype "^3.0.2"
+"@types/resolve@1.20.2":
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
+ integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
+
"@types/retry@0.12.0":
version "0.12.0"
resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz"
@@ -4114,6 +4131,11 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+builtin-modules@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
+ integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+
builtins@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz"
@@ -7717,6 +7739,13 @@ is-buffer@^2.0.0:
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz"
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+is-builtin-module@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169"
+ integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==
+ dependencies:
+ builtin-modules "^3.3.0"
+
is-ci@2.0.0, is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -7844,6 +7873,11 @@ is-lambda@^1.0.1:
resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz"
integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+ integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
+
is-negated-glob@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz"