Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68636236a1 | |||
| 59cff0f219 | |||
| 81c17a56fb | |||
| 802b8c50d5 |
@@ -0,0 +1,26 @@
|
|||||||
|
name: Changelog in sync for packages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Setup Node.js 12.x
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12.x
|
||||||
|
|
||||||
|
- name: Install and run changelog check
|
||||||
|
run: |
|
||||||
|
npm ci
|
||||||
|
npm run changelog:check
|
||||||
|
env:
|
||||||
|
CI: true
|
||||||
+2
-1
@@ -100,6 +100,7 @@
|
|||||||
"test:other": "npm run prettier -- --list-different",
|
"test:other": "npm run prettier -- --list-different",
|
||||||
"test:typecheck": "tsc",
|
"test:typecheck": "tsc",
|
||||||
"test:update": "npm run test:app -- --updateSnapshot --watchAll=false",
|
"test:update": "npm run test:app -- --updateSnapshot --watchAll=false",
|
||||||
"test": "npm run test:app"
|
"test": "npm run test:app",
|
||||||
|
"changelog:check": "node ./scripts/changelog-check.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
const { exec } = require("child_process");
|
||||||
|
|
||||||
|
const changeLogCheck = () => {
|
||||||
|
exec(
|
||||||
|
"git diff origin/master --cached --name-only",
|
||||||
|
(error, stdout, stderr) => {
|
||||||
|
if (error || stderr) {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!stdout || stdout.includes("packages/excalidraw/CHANGELOG.MD")) {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const onlyNonSrcFilesUpdated = stdout.indexOf("src") < 0;
|
||||||
|
if (onlyNonSrcFilesUpdated) {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const changedFiles = stdout.trim().split("\n");
|
||||||
|
const filesToIgnoreRegex = /src\/excalidraw-app|packages\/utils/;
|
||||||
|
|
||||||
|
const excalidrawPackageFiles = changedFiles.filter((file) => {
|
||||||
|
return file.indexOf("src") >= 0 && !filesToIgnoreRegex.test(file);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (excalidrawPackageFiles.length) {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
process.exit(0);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
changeLogCheck();
|
||||||
@@ -351,6 +351,9 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|||||||
const canvasWidth = canvasDOMWidth * canvasScale;
|
const canvasWidth = canvasDOMWidth * canvasScale;
|
||||||
const canvasHeight = canvasDOMHeight * canvasScale;
|
const canvasHeight = canvasDOMHeight * canvasScale;
|
||||||
|
|
||||||
|
const DEFAULT_PASTE_X = canvasDOMWidth / 2;
|
||||||
|
const DEFAULT_PASTE_Y = canvasDOMHeight / 2;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="excalidraw"
|
className="excalidraw"
|
||||||
@@ -371,7 +374,11 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|||||||
onCollabButtonClick={onCollabButtonClick}
|
onCollabButtonClick={onCollabButtonClick}
|
||||||
onLockToggle={this.toggleLock}
|
onLockToggle={this.toggleLock}
|
||||||
onInsertShape={(elements) =>
|
onInsertShape={(elements) =>
|
||||||
this.addElementsFromPasteOrLibrary(elements)
|
this.addElementsFromPasteOrLibrary(
|
||||||
|
elements,
|
||||||
|
DEFAULT_PASTE_X,
|
||||||
|
DEFAULT_PASTE_Y,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
zenModeEnabled={zenModeEnabled}
|
zenModeEnabled={zenModeEnabled}
|
||||||
toggleZenMode={this.toggleZenMode}
|
toggleZenMode={this.toggleZenMode}
|
||||||
|
|||||||
@@ -6,8 +6,10 @@
|
|||||||
right: 12px;
|
right: 12px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
margin: 0 24px 8px 0;
|
margin: 0 24px 8px 0;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.close {
|
.close {
|
||||||
@@ -29,9 +31,21 @@
|
|||||||
}
|
}
|
||||||
tr {
|
tr {
|
||||||
td:nth-child(2) {
|
td:nth-child(2) {
|
||||||
min-width: 48px;
|
min-width: 24px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root[dir="rtl"] & {
|
||||||
|
left: 12px;
|
||||||
|
right: initial;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 0 0 8px 24px;
|
||||||
|
}
|
||||||
|
.close {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export interface CollabAPI {
|
|||||||
onPointerUpdate: CollabInstance["onPointerUpdate"];
|
onPointerUpdate: CollabInstance["onPointerUpdate"];
|
||||||
initializeSocketClient: CollabInstance["initializeSocketClient"];
|
initializeSocketClient: CollabInstance["initializeSocketClient"];
|
||||||
onCollabButtonClick: CollabInstance["onCollabButtonClick"];
|
onCollabButtonClick: CollabInstance["onCollabButtonClick"];
|
||||||
broadcastElements: CollabInstance["broadcastElements"];
|
broadcastScene: CollabInstance["broadcastScene"];
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReconciledElements = readonly ExcalidrawElement[] & {
|
type ReconciledElements = readonly ExcalidrawElement[] & {
|
||||||
@@ -239,11 +239,9 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
return;
|
return;
|
||||||
case SCENE.INIT: {
|
case SCENE.INIT: {
|
||||||
if (!this.portal.socketInitialized) {
|
if (!this.portal.socketInitialized) {
|
||||||
const remoteElements = decryptedData.payload.elements;
|
const { elements, appState } = decryptedData.payload;
|
||||||
const reconciledElements = this.reconcileElements(
|
const reconciledElements = this.reconcileElements(elements);
|
||||||
remoteElements,
|
this.handleRemoteSceneUpdate(reconciledElements, appState, {
|
||||||
);
|
|
||||||
this.handleRemoteSceneUpdate(reconciledElements, {
|
|
||||||
init: true,
|
init: true,
|
||||||
});
|
});
|
||||||
this.initializeSocket();
|
this.initializeSocket();
|
||||||
@@ -254,6 +252,7 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
case SCENE.UPDATE:
|
case SCENE.UPDATE:
|
||||||
this.handleRemoteSceneUpdate(
|
this.handleRemoteSceneUpdate(
|
||||||
this.reconcileElements(decryptedData.payload.elements),
|
this.reconcileElements(decryptedData.payload.elements),
|
||||||
|
decryptedData.payload.appState,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case "MOUSE_LOCATION": {
|
case "MOUSE_LOCATION": {
|
||||||
@@ -323,6 +322,7 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
|
|
||||||
private handleRemoteSceneUpdate = (
|
private handleRemoteSceneUpdate = (
|
||||||
elements: ReconciledElements,
|
elements: ReconciledElements,
|
||||||
|
appState: AppState,
|
||||||
{
|
{
|
||||||
init = false,
|
init = false,
|
||||||
initFromSnapshot = false,
|
initFromSnapshot = false,
|
||||||
@@ -334,6 +334,7 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
|
|
||||||
this.excalidrawRef.current!.updateScene({
|
this.excalidrawRef.current!.updateScene({
|
||||||
elements,
|
elements,
|
||||||
|
appState,
|
||||||
commitToHistory: !!init,
|
commitToHistory: !!init,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -383,22 +384,28 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
this.portal.broadcastMouseLocation(payload);
|
this.portal.broadcastMouseLocation(payload);
|
||||||
};
|
};
|
||||||
|
|
||||||
broadcastElements = (
|
broadcastScene = (
|
||||||
elements: readonly ExcalidrawElement[],
|
elements: readonly ExcalidrawElement[],
|
||||||
state: AppState,
|
state: AppState,
|
||||||
) => {
|
) => {
|
||||||
|
const didBackgroundUpdate =
|
||||||
|
this.excalidrawAppState?.viewBackgroundColor !==
|
||||||
|
state.viewBackgroundColor;
|
||||||
this.excalidrawAppState = state;
|
this.excalidrawAppState = state;
|
||||||
if (
|
if (
|
||||||
getSceneVersion(elements) >
|
getSceneVersion(elements) >
|
||||||
this.getLastBroadcastedOrReceivedSceneVersion()
|
this.getLastBroadcastedOrReceivedSceneVersion() ||
|
||||||
|
didBackgroundUpdate
|
||||||
) {
|
) {
|
||||||
this.portal.broadcastScene(
|
this.portal.broadcastScene(
|
||||||
SCENE.UPDATE,
|
SCENE.UPDATE,
|
||||||
getSyncableElements(elements),
|
getSyncableElements(elements),
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
this.lastBroadcastedOrReceivedSceneVersion = getSceneVersion(elements);
|
if (!didBackgroundUpdate) {
|
||||||
this.queueBroadcastAllElements();
|
this.lastBroadcastedOrReceivedSceneVersion = getSceneVersion(elements);
|
||||||
|
this.queueBroadcastAllElements();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -466,7 +473,7 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
|
|||||||
onPointerUpdate: this.onPointerUpdate,
|
onPointerUpdate: this.onPointerUpdate,
|
||||||
initializeSocketClient: this.initializeSocketClient,
|
initializeSocketClient: this.initializeSocketClient,
|
||||||
onCollabButtonClick: this.onCollabButtonClick,
|
onCollabButtonClick: this.onCollabButtonClick,
|
||||||
broadcastElements: this.broadcastElements,
|
broadcastScene: this.broadcastScene,
|
||||||
})}
|
})}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ class Portal {
|
|||||||
type: sceneType,
|
type: sceneType,
|
||||||
payload: {
|
payload: {
|
||||||
elements: syncableElements,
|
elements: syncableElements,
|
||||||
|
appState: this.app.excalidrawAppState!,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -40,12 +40,14 @@ export type SocketUpdateDataSource = {
|
|||||||
type: "SCENE_INIT";
|
type: "SCENE_INIT";
|
||||||
payload: {
|
payload: {
|
||||||
elements: readonly ExcalidrawElement[];
|
elements: readonly ExcalidrawElement[];
|
||||||
|
appState: AppState;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
SCENE_UPDATE: {
|
SCENE_UPDATE: {
|
||||||
type: "SCENE_UPDATE";
|
type: "SCENE_UPDATE";
|
||||||
payload: {
|
payload: {
|
||||||
elements: readonly ExcalidrawElement[];
|
elements: readonly ExcalidrawElement[];
|
||||||
|
appState: AppState;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
MOUSE_LOCATION: {
|
MOUSE_LOCATION: {
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ function ExcalidrawWrapper(props: { collab: CollabAPI }) {
|
|||||||
) => {
|
) => {
|
||||||
saveDebounced(elements, appState);
|
saveDebounced(elements, appState);
|
||||||
if (collab.isCollaborating) {
|
if (collab.isCollaborating) {
|
||||||
collab.broadcastElements(elements, appState);
|
collab.broadcastScene(elements, appState);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,41 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
<!--
|
||||||
|
Guidelines for changelog:
|
||||||
|
The change should be grouped under one of the below section and must contain PR link.
|
||||||
|
- Features: For new features.
|
||||||
|
- Fixes: For bug fixes.
|
||||||
|
- Chore: Changes for non src files example package.json.
|
||||||
|
- Improvements: For any improvements.
|
||||||
|
- Refactor: For any refactoring.
|
||||||
|
-->
|
||||||
|
|
||||||
## 0.1.0
|
## [Unreleased]
|
||||||
|
|
||||||
First release of `@excalidraw/excalidraw`
|
### Features
|
||||||
|
- Insert Library items in the middle of the screen [#2527](https://github.com/excalidraw/excalidraw/pull/2527)
|
||||||
|
- Show shortcut context menu [#2501](https://github.com/excalidraw/excalidraw/pull/2501)
|
||||||
|
- Aligns arrowhead schemas [#2517](https://github.com/excalidraw/excalidraw/pull/2517)
|
||||||
|
- Add Cut to menus [#2511](https://github.com/excalidraw/excalidraw/pull/2511)
|
||||||
|
- More Arrowheads: dot, bar [#2486](https://github.com/excalidraw/excalidraw/pull/2486)
|
||||||
|
- Support CSV graphs and improve the look and feel [#2495](https://github.com/excalidraw/excalidraw/pull/2495)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- Fix Library Menu Layout [#2502](https://github.com/excalidraw/excalidraw/pull/2502)
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
- RTL support for the stats dialog [#2530](https://github.com/excalidraw/excalidraw/pull/2530)
|
||||||
|
- Expand canvas padding based on zoom. [#2515](https://github.com/excalidraw/excalidraw/pull/2515)
|
||||||
|
- Hide shortcuts on pickers for mobile [#2508](https://github.com/excalidraw/excalidraw/pull/2508)
|
||||||
|
- Hide stats and scrollToContent-button when mobile menus open [#2509](https://github.com/excalidraw/excalidraw/pull/2509)
|
||||||
|
|
||||||
|
### Chore
|
||||||
|
- Bump ini from 1.3.5 to 1.3.7 in /src/packages/excalidraw [#2500](https://github.com/excalidraw/excalidraw/pull/2500)
|
||||||
|
|
||||||
## 0.1.1
|
## 0.1.1
|
||||||
|
|
||||||
#### Fix
|
#### Fix
|
||||||
- Update the homepage URL so it redirects to correct readme [#2498](https://github.com/excalidraw/excalidraw/pull/2498)
|
- Update the homepage URL so it redirects to correct readme [#2498](https://github.com/excalidraw/excalidraw/pull/2498)
|
||||||
|
|
||||||
|
## 0.1.0
|
||||||
|
|
||||||
|
First release of `@excalidraw/excalidraw`
|
||||||
|
|||||||
Reference in New Issue
Block a user