Skip to content

Commit bd4924f

Browse files
authored
Merge pull request #76 from projectstorm/missing_features
missing features and dependency upgrade
2 parents 5e4e18e + 6d89b0f commit bd4924f

42 files changed

Lines changed: 3611 additions & 2813 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/modern-owl-dance.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
'@projectstorm/react-workspaces-core': minor
3+
'@projectstorm/react-workspaces-behavior-panel-dropzone': minor
4+
'@projectstorm/react-workspaces-dropzone-plugin-tabs': minor
5+
'@projectstorm/react-workspaces-dropzone-plugin-tray': minor
6+
'@projectstorm/react-workspaces-behavior-divider-dropzone': patch
7+
'@projectstorm/react-workspaces-behavior-resize': patch
8+
'@projectstorm/react-workspaces-defaults': patch
9+
'@projectstorm/react-workspaces-model-floating-window': patch
10+
'@projectstorm/react-workspaces-model-tabs': patch
11+
'@projectstorm/react-workspaces-model-tray': patch
12+
---
13+
14+
Upgrade the workspace to the latest TypeScript, React, Storybook, and build-tool dependencies.
15+
16+
Add improved panel drop targets, including reliable transform-zone activation, root-level tab and tray splitting, and gap-free directional layouts while preserving boundary drop zones.

.github/workflows/release.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ on:
77

88
concurrency: ${{ github.workflow }}-${{ github.ref }}
99

10+
permissions:
11+
contents: write
12+
pull-requests: write
13+
id-token: write
14+
1015
jobs:
1116
release:
1217
name: Release
@@ -23,6 +28,7 @@ jobs:
2328
uses: actions/setup-node@v4
2429
with:
2530
node-version: "${{ steps.nvm.outputs.NVMRC }}"
31+
registry-url: 'https://registry.npmjs.org'
2632

2733
- name: Install PNPM
2834
uses: pnpm/action-setup@v4
@@ -40,8 +46,7 @@ jobs:
4046
publish: pnpm release
4147
env:
4248
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
4449

4550
- name: publish storybook
4651
if: steps.changesets.outputs.published == 'true'
47-
run: pnpm release:storybook
52+
run: pnpm release:storybook

demo/.storybook/main.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import type { StorybookConfig } from '@storybook/react-webpack5';
33
const config: StorybookConfig = {
44
stories: ['../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
55
addons: ['@storybook/addon-webpack5-compiler-swc'],
6+
core: {
7+
disableWhatsNewNotifications: true
8+
},
9+
features: {
10+
sidebarOnboardingChecklist: false
11+
},
612
framework: {
713
name: '@storybook/react-webpack5',
814
options: {}

demo/package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818
"@projectstorm/react-workspaces-model-floating-window": "workspace:*",
1919
"@projectstorm/react-workspaces-model-tabs": "workspace:*",
2020
"@projectstorm/react-workspaces-model-tray": "workspace:*",
21-
"lodash": "^4.17.23",
22-
"react": "^19.2.4",
21+
"lodash": "^4.18.1",
22+
"react": "^19.2.7",
2323
"typeface-open-sans": "^1.1.13"
2424
},
2525
"devDependencies": {
26-
"@types/lodash": "^4.17.23",
27-
"@types/node": "^25.2.3",
28-
"@types/react": "19.2.14",
26+
"@types/lodash": "^4.17.24",
27+
"@types/node": "^26.1.1",
28+
"@types/react": "19.2.17",
2929
"@types/react-dom": "^19.2.3",
30-
"react-dom": "19.2.4",
30+
"react-dom": "19.2.7",
3131
"source-map-loader": "^5.0.0",
32-
"storybook": "^10.2.9",
33-
"@storybook/react-webpack5": "^10.2.9",
34-
"@storybook/addon-webpack5-compiler-swc": "^4.0.2",
35-
"webpack": "^5.105.2"
32+
"storybook": "^10.4.6",
33+
"@storybook/react-webpack5": "^10.4.6",
34+
"@storybook/addon-webpack5-compiler-swc": "^4.0.3",
35+
"webpack": "^5.108.4"
3636
}
3737
}

demo/stories/Affinity.stories.tsx

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,29 @@ import * as React from 'react';
22
import { useState } from 'react';
33
import 'typeface-open-sans';
44
import { WorkspaceNodeModel } from '@projectstorm/react-workspaces-core';
5-
import { CompInternal, SharedArgs, useEngine } from './helpers/tools';
5+
import { CompInternal, SharedArgs, StoryArgs, useEngine } from './helpers/tools';
66
import { DefaultWorkspacePanelModel } from '@projectstorm/react-workspaces-defaults';
77

8-
export const AffinityStories = function (args) {
9-
const engine = useEngine(args);
10-
const [model] = useState(() => {
11-
let model = new WorkspaceNodeModel();
12-
model.setHorizontal(true);
13-
model
14-
.addModel(new DefaultWorkspacePanelModel('left'))
15-
.addModel(new DefaultWorkspacePanelModel('left'))
16-
.addModel(new DefaultWorkspacePanelModel('left'))
17-
.addModel(new DefaultWorkspacePanelModel('expand').setExpand(true, true))
18-
.addModel(new DefaultWorkspacePanelModel('right'))
19-
.addModel(new DefaultWorkspacePanelModel('right'))
20-
.addModel(new DefaultWorkspacePanelModel('right'));
21-
return model;
22-
});
23-
return <CompInternal model={model} engine={engine} />;
24-
}.bind({});
25-
26-
AffinityStories.args = SharedArgs;
8+
export const AffinityStories = Object.assign(
9+
function AffinityStories(args: StoryArgs) {
10+
const engine = useEngine(args);
11+
const [model] = useState(() => {
12+
let model = new WorkspaceNodeModel();
13+
model.setHorizontal(true);
14+
model
15+
.addModel(new DefaultWorkspacePanelModel('left'))
16+
.addModel(new DefaultWorkspacePanelModel('left'))
17+
.addModel(new DefaultWorkspacePanelModel('left'))
18+
.addModel(new DefaultWorkspacePanelModel('expand').setExpand(true, true))
19+
.addModel(new DefaultWorkspacePanelModel('right'))
20+
.addModel(new DefaultWorkspacePanelModel('right'))
21+
.addModel(new DefaultWorkspacePanelModel('right'));
22+
return model;
23+
});
24+
return <CompInternal model={model} engine={engine} />;
25+
},
26+
{ args: SharedArgs }
27+
);
2728

2829
export default {
2930
title: 'Workspace',

demo/stories/Basic.stories.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import * as React from 'react';
22
import { useState } from 'react';
33
import 'typeface-open-sans';
4-
import { CompInternal, SharedArgs, useEngine } from './helpers/tools';
4+
import { CompInternal, SharedArgs, StoryArgs, useEngine } from './helpers/tools';
55
import { createSimpleModel } from './helpers/simpleModel';
66

7-
export const Basic = function (args) {
8-
const engine = useEngine(args);
9-
const [model] = useState(() => {
10-
return createSimpleModel();
11-
});
12-
return <CompInternal model={model} engine={engine} />;
13-
}.bind({});
14-
15-
Basic.args = SharedArgs;
7+
export const Basic = Object.assign(
8+
function Basic(args: StoryArgs) {
9+
const engine = useEngine(args);
10+
const [model] = useState(() => {
11+
return createSimpleModel();
12+
});
13+
return <CompInternal model={model} engine={engine} />;
14+
},
15+
{ args: SharedArgs }
16+
);
1617

1718
export default {
1819
title: 'Workspace',

demo/stories/Complex.stories.tsx

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,39 @@
11
import * as React from 'react';
22
import { useEffect, useState } from 'react';
33
import 'typeface-open-sans';
4-
import { Buttons, CompInternal, SharedArgs, useEngine, useRootModel } from './helpers/tools';
4+
import { Buttons, CompInternal, SharedArgs, StoryArgs, useEngine, useRootModel } from './helpers/tools';
55
import { createComplexModel } from './helpers/complexModel';
66
import { useForceUpdate } from '@projectstorm/react-workspaces-core';
77

8-
export const ComplexLayout = function (args) {
9-
const forceUpdate = useForceUpdate();
10-
const engine = useEngine(args);
11-
const [model] = useState(() => {
12-
return createComplexModel(engine);
13-
});
14-
useEffect(() => {
15-
return engine.registerListener({
16-
lockUpdated: () => {
17-
forceUpdate();
18-
}
8+
export const ComplexLayout = Object.assign(
9+
function ComplexLayout(args: StoryArgs) {
10+
const forceUpdate = useForceUpdate();
11+
const engine = useEngine(args);
12+
const [model] = useState(() => {
13+
return createComplexModel(engine);
1914
});
20-
}, []);
21-
useRootModel(model, args);
22-
return (
23-
<Buttons
24-
btns={{
25-
[engine.locked ? 'Unlock' : 'Lock']: () => {
26-
engine.setLocked(!engine.locked);
15+
useEffect(() => {
16+
return engine.registerListener({
17+
lockUpdated: () => {
18+
forceUpdate();
2719
}
28-
}}
29-
>
30-
<CompInternal model={model} engine={engine} />
31-
</Buttons>
32-
);
33-
}.bind({});
34-
35-
ComplexLayout.args = SharedArgs;
20+
});
21+
}, []);
22+
useRootModel(model, args);
23+
return (
24+
<Buttons
25+
btns={{
26+
[engine.locked ? 'Unlock' : 'Lock']: () => {
27+
engine.setLocked(!engine.locked);
28+
}
29+
}}
30+
>
31+
<CompInternal model={model} engine={engine} />
32+
</Buttons>
33+
);
34+
},
35+
{ args: SharedArgs }
36+
);
3637

3738
export default {
3839
title: 'Workspace',

demo/stories/FloatingWindows.stories.tsx

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,56 @@ import 'typeface-open-sans';
44
import { DefaultWindowModel, DefaultWorkspacePanelModel } from '@projectstorm/react-workspaces-defaults';
55
import { WorkspaceTabModel } from '@projectstorm/react-workspaces-model-tabs';
66
import { RootWorkspaceModel } from '@projectstorm/react-workspaces-model-floating-window';
7-
import { CompInternal, genVerticalNode, SharedArgs, useEngine, useRootModel } from './helpers/tools';
8-
9-
export const FloatingWindows = function (args) {
10-
const engine = useEngine(args);
11-
const [model] = useState(() => {
12-
let model = new RootWorkspaceModel(engine, false);
13-
model.setHorizontal(true);
14-
model
15-
16-
//left panel
17-
.addModel(genVerticalNode())
18-
19-
//tab panel
20-
.addModel(
21-
new WorkspaceTabModel()
22-
23-
.addModel(new DefaultWorkspacePanelModel('Tab 4'))
24-
.addModel(new DefaultWorkspacePanelModel('Tab 5'))
25-
.addModel(new DefaultWorkspacePanelModel('Tab 6'))
26-
)
27-
28-
.addModel(genVerticalNode());
29-
30-
const window1 = new DefaultWindowModel(new DefaultWorkspacePanelModel('Floating window 1'));
31-
window1.position.update({
32-
top: 100,
33-
left: 100
34-
});
35-
window1.setWidth(400);
36-
window1.setHeight(400);
37-
model.addFloatingWindow(window1);
38-
39-
const window2 = new DefaultWindowModel(new DefaultWorkspacePanelModel('Floating window 2'));
40-
window2.position.update({
41-
top: 100,
42-
left: 600
7+
import { CompInternal, genVerticalNode, SharedArgs, StoryArgs, useEngine, useRootModel } from './helpers/tools';
8+
9+
export const FloatingWindows = Object.assign(
10+
function FloatingWindows(args: StoryArgs) {
11+
const engine = useEngine(args);
12+
const [model] = useState(() => {
13+
let model = new RootWorkspaceModel(engine, false);
14+
model.setHorizontal(true);
15+
model
16+
17+
//left panel
18+
.addModel(genVerticalNode())
19+
20+
//tab panel
21+
.addModel(
22+
new WorkspaceTabModel()
23+
24+
.addModel(new DefaultWorkspacePanelModel('Tab 4'))
25+
.addModel(new DefaultWorkspacePanelModel('Tab 5'))
26+
.addModel(new DefaultWorkspacePanelModel('Tab 6'))
27+
)
28+
29+
.addModel(genVerticalNode());
30+
31+
const window1 = new DefaultWindowModel(new DefaultWorkspacePanelModel('Floating window 1'));
32+
window1.position.update({
33+
top: 100,
34+
left: 100
35+
});
36+
window1.setWidth(400);
37+
window1.setHeight(400);
38+
model.addFloatingWindow(window1);
39+
40+
const window2 = new DefaultWindowModel(new DefaultWorkspacePanelModel('Floating window 2'));
41+
window2.position.update({
42+
top: 100,
43+
left: 600
44+
});
45+
window2.setWidth(400);
46+
window2.setHeight(400);
47+
model.addFloatingWindow(window2);
48+
49+
return model;
4350
});
44-
window2.setWidth(400);
45-
window2.setHeight(400);
46-
model.addFloatingWindow(window2);
47-
48-
return model;
49-
});
50-
useRootModel(model, args);
51-
52-
return <CompInternal model={model} engine={engine} />;
53-
}.bind({});
51+
useRootModel(model, args);
5452

55-
FloatingWindows.args = SharedArgs;
53+
return <CompInternal model={model} engine={engine} />;
54+
},
55+
{ args: SharedArgs }
56+
);
5657

5758
export default {
5859
title: 'Workspace',

0 commit comments

Comments
 (0)