mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
[WIP] Improve PIXI export and preview in newIDE
This commit is contained in:
BIN
Binaries/Output/Release_Windows/res/ribbon_default/export32.png
Normal file
BIN
Binaries/Output/Release_Windows/res/ribbon_default/export32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 293 B |
@@ -261,18 +261,12 @@ gd::String EventsCodeGenerator::GenerateConditionCode(gd::Instruction & conditio
|
||||
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
|
||||
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
|
||||
{
|
||||
cout << "Bad object (" << objectInParameter << ") in a parameter of a condition " << condition.GetType() << endl;
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
}
|
||||
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
|
||||
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
|
||||
{
|
||||
cout << "Bad object type in a parameter of a condition " << condition.GetType() << endl;
|
||||
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Condition has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
|
||||
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
}
|
||||
@@ -407,17 +401,12 @@ gd::String EventsCodeGenerator::GenerateActionCode(gd::Instruction & action, Eve
|
||||
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
|
||||
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
|
||||
{
|
||||
cout << "Bad object (" << objectInParameter << ") in a parameter of an action " << action.GetType() << endl;
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
}
|
||||
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
|
||||
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
|
||||
{
|
||||
cout << "Bad object type in parameter "+gd::String::From(pNb)+" of an action " << action.GetType() << endl;
|
||||
cout << "Action wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Action has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
|
||||
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
"devDependencies": {
|
||||
"flow-bin": "^0.46.0",
|
||||
"prettier": "^0.22.0",
|
||||
"react-scripts": "1.0.1",
|
||||
"react-scripts": "1.0.6",
|
||||
"shelljs": "^0.7.7"
|
||||
},
|
||||
"dependencies": {
|
||||
|
@@ -1,11 +1,12 @@
|
||||
import React, { Component } from 'react';
|
||||
import Dialog from 'material-ui/Dialog';
|
||||
import FlatButton from 'material-ui/FlatButton';
|
||||
import nodeFileSystem from './NodeFileSystem';
|
||||
import { findGDJS } from './LocalGDJSFinder';
|
||||
import localFileSystem from './LocalFileSystem';
|
||||
import assignIn from 'lodash/assignIn';
|
||||
const gd = global.gd;
|
||||
|
||||
export default class ExportDialog extends Component {
|
||||
export default class LocalExportDialog extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@@ -30,22 +31,27 @@ export default class ExportDialog extends Component {
|
||||
const { project } = this.props;
|
||||
if (!project) return;
|
||||
|
||||
const fileSystem = assignIn(new gd.AbstractFileSystemJS(), nodeFileSystem);
|
||||
const outputDir = '/Users/florian/desktop/testexport';
|
||||
const gdjsRoot = '/Users/florian/Projects/F/GD/Binaries/Output/Release_Darwin/JsPlatform';
|
||||
const exportForCordova = false;
|
||||
const exporter = new gd.Exporter(
|
||||
fileSystem,
|
||||
gdjsRoot,
|
||||
);
|
||||
exporter.exportWholePixiProject(
|
||||
project,
|
||||
outputDir,
|
||||
false,
|
||||
exportForCordova
|
||||
);
|
||||
console.log(exporter.getLastError());
|
||||
exporter.delete();
|
||||
findGDJS(gdjsRoot => {
|
||||
if (!gdjsRoot) {
|
||||
//TODO
|
||||
console.log("Could not find GDJS");
|
||||
return;
|
||||
}
|
||||
console.log("GDJS found in ", gdjsRoot);
|
||||
|
||||
const fileSystem = assignIn(new gd.AbstractFileSystemJS(), localFileSystem);
|
||||
const outputDir = '/Users/florian/desktop/testexport';
|
||||
const exportForCordova = false;
|
||||
const exporter = new gd.Exporter(fileSystem, gdjsRoot);
|
||||
exporter.exportWholePixiProject(
|
||||
project,
|
||||
outputDir,
|
||||
false,
|
||||
exportForCordova
|
||||
);
|
||||
console.log(exporter.getLastError());
|
||||
exporter.delete();
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
@@ -1,6 +1,7 @@
|
||||
import optionalRequire from '../Utils/OptionalRequire.js';
|
||||
var fs = optionalRequire('fs-extra');
|
||||
var path = optionalRequire('path');
|
||||
var os = optionalRequire('os');
|
||||
const gd = global.gd;
|
||||
|
||||
export default {
|
||||
@@ -34,7 +35,7 @@ export default {
|
||||
}
|
||||
},
|
||||
getTempDir: function() {
|
||||
return '/tmp/';
|
||||
return os.tmpdir();
|
||||
},
|
||||
fileNameFrom: function(fullpath) {
|
||||
if (this._isExternalURL(fullpath)) return fullpath;
|
43
newIDE/app/src/Export/LocalGDJSFinder.js
Normal file
43
newIDE/app/src/Export/LocalGDJSFinder.js
Normal file
@@ -0,0 +1,43 @@
|
||||
// @flow
|
||||
|
||||
import optionalRequire from '../Utils/OptionalRequire.js';
|
||||
import path from 'path';
|
||||
const fs = optionalRequire('fs');
|
||||
const process = optionalRequire('process');
|
||||
var isWin = process && /^win/.test(process.platform);
|
||||
var isDarwin = process && /^darwin/.test(process.platform);
|
||||
|
||||
const tryPath = (
|
||||
path: string,
|
||||
onExists: (string) => void,
|
||||
onNoAccess: Function
|
||||
) =>
|
||||
fs.access(path, fs.constants.R_OK, err => {
|
||||
if (!err) onExists(path);
|
||||
else onNoAccess();
|
||||
});
|
||||
|
||||
export const findGDJS = (cb: (?string) => void) => {
|
||||
if (!process || !fs) return '';
|
||||
|
||||
const cwd = process.cwd();
|
||||
const releaseFolder = isWin
|
||||
? 'Release_Windows'
|
||||
: isDarwin ? 'Release_Darwin' : 'Release_Linux';
|
||||
tryPath(path.join(cwd, 'JsPlatform'), cb, () => {
|
||||
tryPath(path.join(cwd, '..', 'JsPlatform'), cb, () => {
|
||||
const devPath = path.join(
|
||||
cwd,
|
||||
'..',
|
||||
'..',
|
||||
'Binaries',
|
||||
'Output',
|
||||
releaseFolder,
|
||||
'JsPlatform'
|
||||
);
|
||||
tryPath(devPath, cb, () => {
|
||||
cb(null);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
64
newIDE/app/src/Export/LocalPreviewLauncher.js
Normal file
64
newIDE/app/src/Export/LocalPreviewLauncher.js
Normal file
@@ -0,0 +1,64 @@
|
||||
// @flow
|
||||
|
||||
import localFileSystem from './LocalFileSystem';
|
||||
import optionalRequire from '../Utils/OptionalRequire';
|
||||
import { findGDJS } from './LocalGDJSFinder';
|
||||
import assignIn from 'lodash/assignIn';
|
||||
import path from 'path';
|
||||
const electron = optionalRequire('electron');
|
||||
const BrowserWindow = electron ? electron.remote.BrowserWindow : null;
|
||||
const gd = global.gd;
|
||||
|
||||
export default class LocalPreviewLauncher {
|
||||
static _openPreviewWindow = (project, gamePath): void => {
|
||||
if (!BrowserWindow) return;
|
||||
|
||||
const win = new BrowserWindow({
|
||||
width: project.getMainWindowDefaultWidth(),
|
||||
height: project.getMainWindowDefaultHeight(),
|
||||
title: `Preview of ${project.getName()}`,
|
||||
});
|
||||
win.loadURL(`file://${gamePath}/index.html`);
|
||||
};
|
||||
|
||||
static launchLayoutPreview = (project, layout): Promise<any> => {
|
||||
if (!project || !layout) return Promise.reject();
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
findGDJS(gdjsRoot => {
|
||||
if (!gdjsRoot) {
|
||||
//TODO
|
||||
console.error('Could not find GDJS');
|
||||
return reject();
|
||||
}
|
||||
console.info('GDJS found in ', gdjsRoot);
|
||||
|
||||
const fileSystem = assignIn(
|
||||
new gd.AbstractFileSystemJS(),
|
||||
localFileSystem
|
||||
);
|
||||
const outputDir = path.join(fileSystem.getTempDir(), 'preview');
|
||||
const exporter = new gd.Exporter(fileSystem, gdjsRoot);
|
||||
|
||||
var t0 = performance.now();
|
||||
|
||||
exporter.exportLayoutForPixiPreview(project, layout, outputDir);
|
||||
exporter.delete();
|
||||
|
||||
var t1 = performance.now();
|
||||
console.log(
|
||||
'Call to exporter.exportLayoutForPixiPreview took ' +
|
||||
(t1 - t0) +
|
||||
' milliseconds.'
|
||||
);
|
||||
|
||||
LocalPreviewLauncher._openPreviewWindow(project, outputDir);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
static launchExternalLayoutPreview = (): Promise<any> => {
|
||||
throw new Error('todo');
|
||||
};
|
||||
}
|
@@ -1,18 +1,40 @@
|
||||
// @flow
|
||||
|
||||
import Bridge from './Bridge.js';
|
||||
import React, { Component } from 'react';
|
||||
import Window from '../Utils/Window.js';
|
||||
const gd = global.gd;
|
||||
|
||||
type _State = {
|
||||
loading: boolean,
|
||||
};
|
||||
|
||||
type _Props = {
|
||||
serverPort: number,
|
||||
isIntegrated: boolean,
|
||||
editor: string,
|
||||
editedElementName: string,
|
||||
children: React$Element<any>,
|
||||
};
|
||||
|
||||
class ExternalEditor extends Component {
|
||||
constructor(props) {
|
||||
state: _State;
|
||||
props: _Props;
|
||||
|
||||
bridge: Bridge;
|
||||
editorOpened: boolean = false;
|
||||
lastShowCommandDate: number = 0;
|
||||
sendingUpdate: boolean = false;
|
||||
editor: any = null;
|
||||
_serializedObject: any = null;
|
||||
|
||||
constructor(props: _Props) {
|
||||
super(props);
|
||||
|
||||
this.bridge = new Bridge();
|
||||
this.lastShowCommandDate = 0;
|
||||
this.state = {
|
||||
loading: false,
|
||||
};
|
||||
this.editorOpened = false;
|
||||
|
||||
if (this.bridge.isSupported()) {
|
||||
console.log('Connection to an external editor...');
|
||||
@@ -105,12 +127,13 @@ class ExternalEditor extends Component {
|
||||
console.log('Update send done');
|
||||
};
|
||||
|
||||
launchPreview = () => {
|
||||
launchPreview = (): Promise<any> => {
|
||||
this.sendUpdate();
|
||||
this.bridge.send('requestPreview', undefined);
|
||||
return Promise.resolve();
|
||||
};
|
||||
|
||||
editObject = object => {
|
||||
editObject = (object: any) => {
|
||||
this.sendUpdate();
|
||||
this.bridge.send('editObject', object.getName());
|
||||
};
|
||||
@@ -119,12 +142,12 @@ class ExternalEditor extends Component {
|
||||
* Request an update to the server. Note that if forcedUpdate is set to false,
|
||||
* the server may not send back an update (for example if nothing changed).
|
||||
*/
|
||||
requestUpdate = (scope = '', forcedUpdate = false) => {
|
||||
requestUpdate = (scope: string = '', forcedUpdate: boolean = false) => {
|
||||
const command = forcedUpdate ? 'requestForcedUpdate' : 'requestUpdate';
|
||||
this.bridge.send(command, undefined, scope);
|
||||
};
|
||||
|
||||
_onUpdateReceived = (payload, scope) => {
|
||||
_onUpdateReceived = (payload: any, scope: string) => {
|
||||
console.log('Received project update from server');
|
||||
if (scope !== '') {
|
||||
console.warn(`Not implemented: received ${scope} update from server`);
|
||||
@@ -179,7 +202,8 @@ class ExternalEditor extends Component {
|
||||
loading: this.state.loading,
|
||||
ref: editor => this.editor = editor,
|
||||
requestUpdate: () => this.requestUpdate('', true),
|
||||
onPreview: this.launchPreview,
|
||||
onLayoutPreview: this.launchPreview,
|
||||
onExternalLayoutPreview: this.launchPreview,
|
||||
onEditObject: this.editObject,
|
||||
singleEditor: true,
|
||||
});
|
||||
|
@@ -25,15 +25,17 @@ export default class MainFrameToolbar extends Component {
|
||||
return (
|
||||
<Toolbar>
|
||||
<ToolbarGroup firstChild={true}>
|
||||
<ToolbarIcon
|
||||
onClick={this.props.toggleProjectManager}
|
||||
src="res/ribbon_default/projectManager32.png"
|
||||
disabled={!this.props.hasProject}
|
||||
/>
|
||||
<ToolbarIcon
|
||||
onClick={this.props.openProject}
|
||||
src="res/ribbon_default/open32.png"
|
||||
/>
|
||||
{this.props.showProjectIcons &&
|
||||
<ToolbarIcon
|
||||
onClick={this.props.toggleProjectManager}
|
||||
src="res/ribbon_default/projectManager32.png"
|
||||
disabled={!this.props.hasProject}
|
||||
/>}
|
||||
{this.props.showProjectIcons &&
|
||||
<ToolbarIcon
|
||||
onClick={this.props.openProject}
|
||||
src="res/ribbon_default/open32.png"
|
||||
/>}
|
||||
{this.isDev &&
|
||||
<IconMenu
|
||||
iconButtonElement={
|
||||
|
@@ -9,7 +9,6 @@ import NavigationClose from 'material-ui/svg-icons/navigation/close';
|
||||
import Toolbar from './Toolbar';
|
||||
import StartPage from './StartPage';
|
||||
import ProjectTitlebar from './ProjectTitlebar';
|
||||
import ExportDialog from '../Export/ExportDialog';
|
||||
import ConfirmCloseDialog from './ConfirmCloseDialog';
|
||||
import EventsSheetContainer from '../EventsSheet/EventsSheetContainer.js';
|
||||
import SceneEditor from '../SceneEditor';
|
||||
@@ -29,6 +28,7 @@ import {
|
||||
getCurrentTab,
|
||||
closeProjectTabs,
|
||||
} from './EditorTabsHandler';
|
||||
import { watchPromiseInState } from '../Utils/WatchPromiseInState';
|
||||
import FileOpener from '../Utils/FileOpener';
|
||||
import FileWriter from '../Utils/FileWriter';
|
||||
|
||||
@@ -40,6 +40,7 @@ class MainFrame extends Component {
|
||||
super();
|
||||
this.state = {
|
||||
loadingProject: false,
|
||||
previewLoading: false,
|
||||
currentProject: null,
|
||||
projectManagerOpen: false,
|
||||
editorTabs: getEditorTabsInitialState(),
|
||||
@@ -91,10 +92,6 @@ class MainFrame extends Component {
|
||||
return editorTab.editorRef.getSerializedElements();
|
||||
};
|
||||
|
||||
requestUpdate = () => {
|
||||
this.props.requestUpdate();
|
||||
};
|
||||
|
||||
loadBuiltinGame = () => {
|
||||
this.setState(
|
||||
{
|
||||
@@ -160,7 +157,11 @@ class MainFrame extends Component {
|
||||
project={this.state.currentProject}
|
||||
layoutName={name}
|
||||
setToolbar={this.setEditorToolbar}
|
||||
onPreview={this.props.onPreview}
|
||||
onPreview={(project, layout) =>
|
||||
watchPromiseInState(this, 'previewLoading', () =>
|
||||
this.props.onLayoutPreview(project, layout)).catch(() => {
|
||||
/*TODO: Error*/
|
||||
})}
|
||||
showPreviewButton
|
||||
onEditObject={this.props.onEditObject}
|
||||
/>
|
||||
@@ -180,7 +181,14 @@ class MainFrame extends Component {
|
||||
project={this.state.currentProject}
|
||||
externalLayoutName={name}
|
||||
setToolbar={this.setEditorToolbar}
|
||||
onPreview={this.props.onPreview}
|
||||
onPreview={(project, externalLayout) =>
|
||||
watchPromiseInState(this, 'previewLoading', () =>
|
||||
this.props.onExternalLayoutPreview(
|
||||
project,
|
||||
externalLayout
|
||||
)).catch(() => {
|
||||
/*TODO: Error*/
|
||||
})}
|
||||
showPreviewButton
|
||||
onEditObject={this.props.onEditObject}
|
||||
/>
|
||||
@@ -285,7 +293,7 @@ class MainFrame extends Component {
|
||||
this.state.currentProject.delete();
|
||||
this.setState({
|
||||
currentProject: null,
|
||||
})
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
@@ -293,7 +301,7 @@ class MainFrame extends Component {
|
||||
|
||||
_onExportProject = () => {
|
||||
this.exportDialog.show();
|
||||
}
|
||||
};
|
||||
|
||||
_onChangeEditorTab = value => {
|
||||
this.setState({
|
||||
@@ -316,6 +324,10 @@ class MainFrame extends Component {
|
||||
const {
|
||||
currentProject,
|
||||
} = this.state;
|
||||
const ExportDialog = this.props.exportDialogComponent;
|
||||
const showLoader = this.state.loadingProject ||
|
||||
this.state.previewLoading ||
|
||||
this.props.loading;
|
||||
|
||||
return (
|
||||
<MuiThemeProvider muiTheme={defaultTheme}>
|
||||
@@ -344,11 +356,12 @@ class MainFrame extends Component {
|
||||
</Drawer>
|
||||
<Toolbar
|
||||
ref={toolbar => this.toolbar = toolbar}
|
||||
showProjectIcons={!this.props.singleEditor}
|
||||
hasProject={!!this.state.currentProject}
|
||||
toggleProjectManager={this.toggleProjectManager}
|
||||
openProject={this._onOpenFromFile}
|
||||
loadBuiltinGame={this.loadBuiltinGame}
|
||||
requestUpdate={this.requestUpdate}
|
||||
requestUpdate={this.props.requestUpdate}
|
||||
/>
|
||||
<Tabs
|
||||
value={getCurrentTabIndex(this.state.editorTabs)}
|
||||
@@ -369,14 +382,16 @@ class MainFrame extends Component {
|
||||
</Tab>
|
||||
))}
|
||||
</Tabs>
|
||||
<LoaderModal show={this.state.loadingProject || this.props.loading} />
|
||||
<LoaderModal show={showLoader} />
|
||||
<ConfirmCloseDialog
|
||||
ref={confirmCloseDialog => this.confirmCloseDialog = confirmCloseDialog}
|
||||
/>
|
||||
<ExportDialog
|
||||
ref={exportDialog => this.exportDialog = exportDialog}
|
||||
project={this.state.currentProject}
|
||||
ref={confirmCloseDialog =>
|
||||
this.confirmCloseDialog = confirmCloseDialog}
|
||||
/>
|
||||
{!!ExportDialog &&
|
||||
<ExportDialog
|
||||
ref={exportDialog => this.exportDialog = exportDialog}
|
||||
project={this.state.currentProject}
|
||||
/>}
|
||||
</div>
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
|
@@ -33,7 +33,7 @@ export default class ProjectManager extends React.Component {
|
||||
<ListItem
|
||||
key="export"
|
||||
primaryText="Export"
|
||||
leftIcon={<ListIcon src="res/ribbon_default/close32.png" />}
|
||||
leftIcon={<ListIcon src="res/ribbon_default/export32.png" />}
|
||||
onTouchTap={() => this.props.onExportProject()}
|
||||
/>,
|
||||
]}
|
||||
|
@@ -66,6 +66,7 @@ export default class ExternalLayoutEditor extends BaseEditor {
|
||||
initialUiSettings={serializeToJSObject(
|
||||
externalLayout.getAssociatedSettings()
|
||||
)}
|
||||
onPreview={() => this.props.onPreview(project, externalLayout)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
@@ -47,6 +47,7 @@ export default class SceneEditor extends BaseEditor {
|
||||
initialUiSettings={serializeToJSObject(
|
||||
layout.getAssociatedSettings()
|
||||
)}
|
||||
onPreview={() => this.props.onPreview(project, layout)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
25
newIDE/app/src/Utils/WatchPromiseInState.js
Normal file
25
newIDE/app/src/Utils/WatchPromiseInState.js
Normal file
@@ -0,0 +1,25 @@
|
||||
// @flow
|
||||
import React from 'react';
|
||||
|
||||
export const watchPromiseInState = (
|
||||
component: React.Component<*, *, *>,
|
||||
stateField: string,
|
||||
fn: () => Promise<any>
|
||||
) => {
|
||||
component.setState({
|
||||
[stateField]: true,
|
||||
});
|
||||
return fn()
|
||||
.then(value => {
|
||||
component.setState({
|
||||
[stateField]: false,
|
||||
});
|
||||
return value;
|
||||
})
|
||||
.catch(err => {
|
||||
component.setState({
|
||||
[stateField]: false,
|
||||
});
|
||||
throw err;
|
||||
});
|
||||
};
|
@@ -3,6 +3,8 @@ import ReactDOM from 'react-dom';
|
||||
import MainFrame from './MainFrame';
|
||||
import ExternalEditor from './ExternalEditor';
|
||||
import Window from './Utils/Window';
|
||||
import LocalPreviewLauncher from './Export/LocalPreviewLauncher';
|
||||
import LocalExportDialog from './Export/LocalExportDialog';
|
||||
import injectTapEventPlugin from 'react-tap-event-plugin';
|
||||
import registerServiceWorker from './registerServiceWorker';
|
||||
import 'react-virtualized/styles.css'; // Styles for react-virtualized Table
|
||||
@@ -26,7 +28,11 @@ if (appArguments['server-port']) {
|
||||
</ExternalEditor>
|
||||
);
|
||||
} else {
|
||||
app = <MainFrame />;
|
||||
app = <MainFrame
|
||||
onLayoutPreview={LocalPreviewLauncher.launchLayoutPreview}
|
||||
onExternalLayoutPreview={LocalPreviewLauncher.launchExternalLayoutPreview}
|
||||
exportDialogComponent={LocalExportDialog}
|
||||
/>;
|
||||
}
|
||||
|
||||
ReactDOM.render(app, document.getElementById('root'));
|
||||
|
@@ -759,15 +759,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1:
|
||||
babel-plugin-syntax-async-generators "^6.5.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.8.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
|
||||
dependencies:
|
||||
babel-helper-remap-async-to-generator "^6.22.0"
|
||||
babel-plugin-syntax-async-functions "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-async-to-generator@^6.24.1:
|
||||
babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
|
||||
dependencies:
|
||||
@@ -775,6 +767,14 @@ babel-plugin-transform-async-to-generator@^6.24.1:
|
||||
babel-plugin-syntax-async-functions "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-async-to-generator@^6.8.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
|
||||
dependencies:
|
||||
babel-helper-remap-async-to-generator "^6.22.0"
|
||||
babel-plugin-syntax-async-functions "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-class-constructor-call@^6.24.1:
|
||||
version "6.24.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
|
||||
@@ -1015,14 +1015,14 @@ babel-plugin-transform-function-bind@^6.22.0:
|
||||
babel-plugin-syntax-function-bind "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-object-rest-spread@6.22.0:
|
||||
babel-plugin-transform-object-rest-spread@6.22.0, babel-plugin-transform-object-rest-spread@^6.22.0:
|
||||
version "6.22.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc"
|
||||
dependencies:
|
||||
babel-plugin-syntax-object-rest-spread "^6.8.0"
|
||||
babel-runtime "^6.22.0"
|
||||
|
||||
babel-plugin-transform-object-rest-spread@6.23.0, babel-plugin-transform-object-rest-spread@^6.22.0:
|
||||
babel-plugin-transform-object-rest-spread@6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921"
|
||||
dependencies:
|
||||
@@ -1374,11 +1374,11 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22
|
||||
lodash "^4.2.0"
|
||||
to-fast-properties "^1.0.1"
|
||||
|
||||
babylon@6.15.0, babylon@^6.11.0:
|
||||
babylon@6.15.0, babylon@^6.11.0, babylon@^6.15.0:
|
||||
version "6.15.0"
|
||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
|
||||
|
||||
babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0:
|
||||
babylon@^6.13.0, babylon@^6.17.0:
|
||||
version "6.17.1"
|
||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
|
||||
|
||||
@@ -1687,7 +1687,11 @@ capture-stack-trace@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
|
||||
|
||||
case-sensitive-paths-webpack-plugin@2.0.0, case-sensitive-paths-webpack-plugin@^2.0.0:
|
||||
case-sensitive-paths-webpack-plugin@1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz#8aaedd5699a86cac2b34cf40d9b4145758978472"
|
||||
|
||||
case-sensitive-paths-webpack-plugin@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.0.0.tgz#60142d7d0beabdb35676ef0aeace3027da0578ba"
|
||||
|
||||
@@ -1935,7 +1939,7 @@ configstore@^3.0.0:
|
||||
write-file-atomic "^2.0.0"
|
||||
xdg-basedir "^3.0.0"
|
||||
|
||||
connect-history-api-fallback@1.3.0, connect-history-api-fallback@^1.3.0:
|
||||
connect-history-api-fallback@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
|
||||
|
||||
@@ -2641,9 +2645,9 @@ escope@^3.6.0:
|
||||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-config-react-app@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-1.0.1.tgz#8ce98d0b05d7075711ad3971458ed1fb3ab88855"
|
||||
eslint-config-react-app@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-1.0.4.tgz#c0178f535a922236c53daafea4f397203db7d9af"
|
||||
|
||||
eslint-import-resolver-node@^0.2.0:
|
||||
version "0.2.3"
|
||||
@@ -2692,9 +2696,9 @@ eslint-plugin-import@2.2.0:
|
||||
minimatch "^3.0.3"
|
||||
pkg-up "^1.0.0"
|
||||
|
||||
eslint-plugin-jsx-a11y@5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.1.tgz#48e678891fec9fe1e53ef53adc2f7d05fee6640c"
|
||||
eslint-plugin-jsx-a11y@5.0.3:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.3.tgz#4a939f76ec125010528823331bf948cc573380b6"
|
||||
dependencies:
|
||||
aria-query "^0.5.0"
|
||||
array-includes "^3.0.3"
|
||||
@@ -5733,9 +5737,9 @@ react-color@2.11.7:
|
||||
reactcss "^1.2.0"
|
||||
tinycolor2 "^1.1.2"
|
||||
|
||||
react-dev-utils@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-1.0.1.tgz#3eee71e3a28d31810838d3464576b2b41b06052c"
|
||||
react-dev-utils@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-2.0.1.tgz#5843504d89f038f046258a871fc26071775fc065"
|
||||
dependencies:
|
||||
"@timer/detect-port" "1.1.3"
|
||||
address "1.0.1"
|
||||
@@ -5753,6 +5757,7 @@ react-dev-utils@^1.0.1:
|
||||
shell-quote "1.6.1"
|
||||
sockjs-client "1.1.4"
|
||||
strip-ansi "3.0.1"
|
||||
text-table "0.2.0"
|
||||
|
||||
react-dnd-html5-backend@^2.1.2:
|
||||
version "2.3.0"
|
||||
@@ -5790,14 +5795,14 @@ react-dom@15.4.2:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
react-error-overlay@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-1.0.1.tgz#b22d7b28ce7c828cf407b1961e129a3b5a54baa2"
|
||||
react-error-overlay@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-1.0.6.tgz#f40ba0791f05b5bb973f4ff66454a7c70f324fdc"
|
||||
dependencies:
|
||||
anser "1.2.5"
|
||||
babel-code-frame "6.22.0"
|
||||
babel-runtime "6.23.0"
|
||||
react-dev-utils "^1.0.1"
|
||||
react-dev-utils "^2.0.1"
|
||||
settle-promise "1.0.0"
|
||||
source-map "0.5.6"
|
||||
|
||||
@@ -5866,9 +5871,9 @@ react-mosaic-component@^0.3.4:
|
||||
react-dnd-html5-backend "^2.1.2"
|
||||
uuid "^3.0.1"
|
||||
|
||||
react-scripts@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.1.tgz#369e3fc8000e761b8fbbd232033e34c79902e580"
|
||||
react-scripts@1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.6.tgz#09db92d4dd756f940b6eb71739b6f4b8232cefe3"
|
||||
dependencies:
|
||||
autoprefixer "7.1.0"
|
||||
babel-core "6.24.1"
|
||||
@@ -5877,31 +5882,28 @@ react-scripts@1.0.1:
|
||||
babel-loader "7.0.0"
|
||||
babel-preset-react-app "^3.0.0"
|
||||
babel-runtime "6.23.0"
|
||||
case-sensitive-paths-webpack-plugin "2.0.0"
|
||||
case-sensitive-paths-webpack-plugin "1.1.4"
|
||||
chalk "1.1.3"
|
||||
connect-history-api-fallback "1.3.0"
|
||||
cross-spawn "4.0.2"
|
||||
css-loader "0.28.1"
|
||||
dotenv "4.0.0"
|
||||
eslint "3.19.0"
|
||||
eslint-config-react-app "^1.0.1"
|
||||
eslint-config-react-app "^1.0.4"
|
||||
eslint-loader "1.7.1"
|
||||
eslint-plugin-flowtype "2.33.0"
|
||||
eslint-plugin-import "2.2.0"
|
||||
eslint-plugin-jsx-a11y "5.0.1"
|
||||
eslint-plugin-jsx-a11y "5.0.3"
|
||||
eslint-plugin-react "7.0.1"
|
||||
extract-text-webpack-plugin "2.1.0"
|
||||
file-loader "0.11.1"
|
||||
fs-extra "3.0.1"
|
||||
html-webpack-plugin "2.28.0"
|
||||
inquirer "3.0.6"
|
||||
jest "20.0.3"
|
||||
object-assign "4.1.1"
|
||||
postcss-flexbugs-fixes "3.0.0"
|
||||
postcss-loader "2.0.5"
|
||||
promise "7.1.1"
|
||||
react-dev-utils "^1.0.1"
|
||||
react-error-overlay "^1.0.1"
|
||||
react-dev-utils "^2.0.1"
|
||||
react-error-overlay "^1.0.6"
|
||||
style-loader "0.17.0"
|
||||
sw-precache-webpack-plugin "0.9.1"
|
||||
url-loader "0.5.8"
|
||||
@@ -5999,7 +6001,7 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.2.6:
|
||||
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.2.2, readable-stream@^2.2.6:
|
||||
version "2.2.9"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
|
||||
dependencies:
|
||||
@@ -6011,7 +6013,7 @@ readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.
|
||||
string_decoder "~1.0.0"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2:
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
|
||||
dependencies:
|
||||
@@ -6314,15 +6316,15 @@ right-align@^0.1.1:
|
||||
dependencies:
|
||||
align-text "^0.1.1"
|
||||
|
||||
rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
|
||||
rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
|
||||
version "2.5.4"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
|
||||
dependencies:
|
||||
glob "^7.0.5"
|
||||
|
||||
rimraf@~2.5.1, rimraf@~2.5.4:
|
||||
version "2.5.4"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
|
||||
rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
|
||||
dependencies:
|
||||
glob "^7.0.5"
|
||||
|
||||
@@ -6899,7 +6901,7 @@ test-exclude@^4.1.0:
|
||||
read-pkg-up "^1.0.1"
|
||||
require-main-filename "^1.0.1"
|
||||
|
||||
text-table@~0.2.0:
|
||||
text-table@0.2.0, text-table@~0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
|
||||
|
Reference in New Issue
Block a user