Przeglądaj źródła

13.10.0 release

David Benson [draw.io] 4 lat temu
rodzic
commit
a872b35113

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+18-NOV-2020: 13.10.0
+
+- Internal release for Github actions testing
+- Conf Cloud: Viewer settings direct from the viewer
+- Conf Cloud: Adds custom libraries to more shapes dialog
+
 15-NOV-2020: 13.9.9
 
 - Improves Lucidchart import

+ 2 - 0
README.md

@@ -11,6 +11,8 @@ The source code in this repo is licensed under the Apache v2.
 Development
 -----------
 
+Note: We cannot accept non-trivial PRs for legal reasons. We need to retain copyright over the entire codebase.
+
 A development guide is being started on the GitHub project wiki. There is a [draw.io](http://stackoverflow.com/questions/tagged/draw.io) tag on Stack Overflow currently, please make sure any questions adhere to their guidelines for questions.
 
 The [mxGraph documentation](https://jgraph.github.io/mxgraph/) provides a lot of the docs for the bottom part of the stack. There is an [mxgraph tag on SO](http://stackoverflow.com/questions/tagged/mxgraph).

+ 1 - 1
VERSION

@@ -1 +1 @@
-13.9.9
+13.10.0

Plik diff jest za duży
+ 1 - 1
src/main/webapp/js/app.min.js


+ 277 - 80
src/main/webapp/js/diagramly/Extensions.js

@@ -9,6 +9,7 @@ LucidImporter = {};
 {
 	// Global import transformation
 	var defaultFontSize = '11';
+	var defaultLucidFont = 'Liberation Sans';
 	var scale = 0.6;
 	var dx = 0;
 	var dy = 0;
@@ -86,13 +87,13 @@ LucidImporter = {};
 			'PreparationBlock': 'shape=hexagon;perimeter=hexagonPerimeter2',
 			'DataBlock': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0',
 			'DataBlockNew': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0',
-			'DatabaseBlock': 'shape=cylinder;size=0.1;anchorPointDirection=0;boundedLbl=1;',
-			'DirectAccessStorageBlock': 'shape=cylinder;direction=south;size=0.1;anchorPointDirection=0;boundedLbl=1;',
+			'DatabaseBlock': 'shape=cylinder3;size=10;anchorPointDirection=0;boundedLbl=1;',
+			'DirectAccessStorageBlock': 'shape=cylinder3;direction=south;size=10;anchorPointDirection=0;boundedLbl=1;',
 			'InternalStorageBlock': 'shape=internalStorage;dx=10;dy=10',
 			'PaperTapeBlock': 'shape=tape;size=0.2',
 			'ManualOperationBlockNew': 'shape=trapezoid;perimeter=trapezoidPerimeter;anchorPointDirection=0;flipV=1',
 			'DelayBlock': 'shape=delay',
-			'StoredDataBlock': 'shape=dataStorage',
+			'StoredDataBlock': 'shape=cylinder3;boundedLbl=1;size=15;lid=0;direction=south;',
 			'MergeBlock': 'triangle;direction=south;anchorPointDirection=0',
 			'ConnectorBlock': 'ellipse',
 			'OrBlock': s + 'flowchart.summing_function',
@@ -114,11 +115,11 @@ LucidImporter = {};
 			'BraceBlockRotated': cs,
 			'BracketBlockRotated': cs,
 //Geometric shapes
-			'IsoscelesTriangleBlock': 'triangle;direction=north;anchorPointDirection=0',
+			'IsoscelesTriangleBlock': 'shape=mxgraph.basic.acute_triangle;dx=0.5;anchorPointDirection=0',
 			'RightTriangleBlock': s + 'basic.orthogonal_triangle',
 			'PentagonBlock': s + 'basic.pentagon',
 			'HexagonBlock': 'shape=hexagon;perimeter=hexagonPerimeter2',
-			'OctagonBlock': s + 'basic.octagon',
+			'OctagonBlock': s + 'basic.octagon2;dx=15;',
 			'CrossBlock': 'shape=cross;size=0.6',
 			'CloudBlock': 'ellipse;shape=cloud',
 			'HeartBlock': s + 'basic.heart',
@@ -219,7 +220,7 @@ LucidImporter = {};
 			'MindMapDiamondBlock' : 'shape=rhombus',
 			'MindMapPentagonBlock' : s + 'basic.pentagon',
 			'MindMapHexagonBlock' : 'shape=hexagon;perimeter=hexagonPerimeter2',
-			'MindMapOctagonBlock' : s + 'basic.octagon',
+			'MindMapOctagonBlock' : s + 'basic.octagon2;dx=10;',
 			'MindMapCrossBlock' : s + 'basic.cross2;dx=20',
 //Entity Relationship
 			'ERDEntityBlock' : cs,
@@ -230,7 +231,8 @@ LucidImporter = {};
 			'UMLClassBlock': cs,
 			'UMLActiveClassBlock': 'shape=process',
 			'UMLMultiplicityBlock' : cs,
-			'UMLPackageBlock': 'shape=folder;tabPosition=left',
+//			'UMLPackageBlock': 'shape=folder;tabPosition=left',
+			'UMLPackageBlock': '',
 			'UMLConstraintBlock' : cs,
 			'UMLNoteBlock': 'shape=note;size=15',
 			'UMLNoteBlockV2': 'shape=note;size=15',
@@ -310,7 +312,7 @@ LucidImporter = {};
 			'DFDExternalEntityBlock2' : '',
 			'YDMDFDProcessBlock' : 'ellipse',
 			'YDMDFDDataStoreBlock' : 'shape=partialRectangle;right=0;left=0',
-			'GSDFDProcessBlock' : 'shape=swimlane;rounded=1;arcSize=10',
+			'GSDFDProcessBlock' : cs,
 			'GSDFDProcessBlock2' : 'rounded=1;arcSize=10;',
 			'GSDFDDataStoreBlock' : cs,
 			'GSDFDDataStoreBlock2' : 'shape=partialRectangle;right=0',
@@ -334,8 +336,8 @@ LucidImporter = {};
 //Shipments
 			'VSMExternalShipmentAirplaneBlock' : s + 'lean_mapping.airplane_7',
 			'VSMExternalShipmentForkliftBlock' : s + 'lean_mapping.move_by_forklift',
-			'VSMExternalShipmentTruckBlock' : s + 'lean_mapping.truck_shipment',
-			'VSMExternalShipmentBoatBlock' : s + 'lean_mapping.boat_shipment',
+			'VSMExternalShipmentTruckBlock' : s + 'lean_mapping.truck_shipment;align=left;',
+			'VSMExternalShipmentBoatBlock' : s + 'lean_mapping.boat_shipment;verticalAlign=bottom;',
 //Information
 			'VSMProductionControlBlock' : cs,
 			'VSMOtherInformationBlock' : '',
@@ -1649,62 +1651,62 @@ LucidImporter = {};
 			'Cisco_cisco_workstation' : s + 'cisco.computers_and_peripherals.workstation;' + c,
 			'Cisco_cisco_www_server' : s + 'cisco.servers.www_server;' + c,
 //Computers and Monitors
-			'NET_PC' : s + 'networks.pc;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Virtual-PC' : s + 'networks.virtual_pc;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Terminal' : s + 'networks.terminal;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_DataPipe' : s + 'networks.bus;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_SlateDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff', 
-			'NET_TabletDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Laptop' : s + 'networks.laptop;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_PDA' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_CRTMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_LCDMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_PC' : s + 'networks.pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Virtual-PC' : s + 'networks.virtual_pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Terminal' : s + 'networks.terminal;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_DataPipe' : s + 'networks.bus;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_SlateDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 
+			'NET_TabletDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Laptop' : s + 'networks.laptop;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_PDA' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_CRTMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_LCDMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //Detailed Network Diagrams
 //			'NET_ABSwitch' NA
 //			'NET_Repeater' NA
 //			'NET_DiagnosticDevice' NA
 //			'NET_CardReader' NA
 //			'NET_PatchPanel' NA
-			'NET_RadioTower' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_RadioTower' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_BiometricReader' NA
-			'NET_ExternalHardDrive' : s + 'networks.external_storage;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_ExternalHardDrive' : s + 'networks.external_storage;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_WebService' NA
 //			'NET_FiberOptic' NA
-			'NET_SatelliteDish' : s + 'networks.satellite_dish;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Satellite' : s + 'networks.satellite;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_SatelliteDish' : s + 'networks.satellite_dish;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Satellite' : s + 'networks.satellite;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_VoIPPhone' NA
 //			'NET_PBX' NA
 //			'NET_MLPS' NA
 //Basic Network Shapes
-			'NET_WirelessAccessPoint' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#29AAE1',
+			'NET_WirelessAccessPoint' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#29AAE1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 			'NET_RingNetwork' : cs,
 			'NET_Ethernet' : cs,
-			'NET_Server' : s + 'networks.server;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_Server' : s + 'networks.server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_ExternalMediaDrive' NA
-			'NET_Mainframe' : s + 'networks.mainframe;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Router' : s + 'networks.wireless_hub;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Switch' : s + 'networks.switch;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Firewall' : s + 'networks.firewall;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_User' : s + 'networks.user_male;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_CommLink' : s + 'networks.comm_link_edge;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_SuperComputer' : s + 'networks.supercomputer;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_VirtualServer' : s + 'networks.virtual_server;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Printer' : s + 'networks.printer;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_Mainframe' : s + 'networks.mainframe;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Router' : s + 'networks.wireless_hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Switch' : s + 'networks.switch;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Firewall' : s + 'networks.firewall;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_User' : s + 'networks.user_male;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_CommLink' : s + 'networks.comm_link_edge;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_SuperComputer' : s + 'networks.supercomputer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_VirtualServer' : s + 'networks.virtual_server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Printer' : s + 'networks.printer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_Plotter' NA
-			'NET_Scanner' : s + 'networks.scanner;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Copier' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_Scanner' : s + 'networks.scanner;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Copier' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_FaxMachine' NA
-			'NET_MultiFunctionMachine' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Projector' : s + 'networks.video_projector;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_ProjectorScreen' : s + 'networks.video_projector_screen;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Bridge' : s + 'networks.router;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Hub' : s + 'networks.hub;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Modem' : s + 'networks.modem;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_Telephone' : s + 'signs.tech.telephone_5;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_CellPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff',
-			'NET_SmartPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_MultiFunctionMachine' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Projector' : s + 'networks.video_projector;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_ProjectorScreen' : s + 'networks.video_projector_screen;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Bridge' : s + 'networks.router;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Hub' : s + 'networks.hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Modem' : s + 'networks.modem;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_Telephone' : s + 'signs.tech.telephone_5;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_CellPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
+			'NET_SmartPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_VideoPhone' NA
-			'NET_Camera' : s + 'signs.tech.camera_2;fillColor=#29AAE1;strokeColor=#ffffff',
+			'NET_Camera' : s + 'signs.tech.camera_2;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
 //			'NET_VideoCamera' NA
 //Server Racks
 			'RackServerRack' : s + 'rackGeneral.container;container=1;collapsible=0;childLayout=rack;marginLeft=9;marginRight=9;marginTop=21;marginBottom=22;textColor=#000000;numDisp=off',
@@ -1791,26 +1793,37 @@ LucidImporter = {};
 			'EE_Lightbulb' : s + 'electrical.miscellaneous.light_bulb',
 			'EE_IntegratedCircuit' : 'shape=mxgraph.electrical.logic_gates.dual_inline_ic',
 //Power Sources
-			'EE_AcSource' : s + 'electrical.signal_sources.ac_source;strokeWidth=1',
-			'EE_VoltageSource' : s + 'electrical.signal_sources.dc_source_3',
-			'EE_CurrentSource' : s + 'electrical.signal_sources.dc_source_2;direction=north',
-			'EE_ControlledCurrentSource' : s + 'electrical.signal_sources.dependent_source_2;direction=west',
-			'EE_ControlledVoltageSource' : s + 'electrical.signal_sources.dependent_source_3',
+			'EE_AcSource' : s + 'electrical.signal_sources.ac_source;strokeWidth=1;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
+			'EE_VoltageSource' : s + 'electrical.signal_sources.dc_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
+			'EE_CurrentSource' : s + 'electrical.signal_sources.dc_source_2;direction=north;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
+			'EE_ControlledCurrentSource' : s + 'electrical.signal_sources.dependent_source_2;direction=west;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
+			'EE_ControlledVoltageSource' : s + 'electrical.signal_sources.dependent_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
 			'EE_DcSource1' : s + 'electrical.miscellaneous.monocell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
 			'EE_DcSource2' : s + 'electrical.miscellaneous.multicell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
 			'EE_Vss' : s + 'electrical.signal_sources.vss2;verticalLabelPosition=top;verticalAlign=bottom;fontSize=24',
 			'EE_Vdd' : s + 'electrical.signal_sources.vdd;verticalLabelPosition=bottom;verticalAlign=top',
 //Transistors
+			
 			'EE_BJT_NPN1' : s + 'electrical.transistors.pnp_transistor_1',
+			'EE_BJT_NPN1_V2' : s + 'electrical.transistors.npn_transistor_1;',
 			'EE_BJT_PNP1' : s + 'electrical.transistors.npn_transistor_1',
+			'EE_BJT_PNP1_V2' : s + 'electrical.transistors.pnp_transistor_1',
 			'EE_JFET_P' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1',
+			'EE_JFET_P_V2' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1',
 			'EE_JFET_N' : s + 'electrical.transistors.n-channel_jfet_1',
+			'EE_JFET_N_V2' : s + 'electrical.transistors.n-channel_jfet_1',
 			'EE_MOSFET_P1' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1',
+			'EE_MOSFET_P1_V2' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1',
 			'EE_MOSFET_P2' : s + 'electrical.mosfets1.mosfet_p_no_bulk',
+			'EE_MOSFET_P2_V2' : s + 'electrical.mosfets1.mosfet_p_no_bulk',
 			'EE_MOSFET_P3' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1',
+			'EE_MOSFET_P3_V2' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1',
 			'EE_MOSFET_N1' : s + 'electrical.mosfets1.mosfet_ic_n',
+			'EE_MOSFET_N1_V2' : s + 'electrical.mosfets1.mosfet_ic_n',
 			'EE_MOSFET_N2' : s + 'electrical.mosfets1.mosfet_n_no_bulk',
+			'EE_MOSFET_N2_V2' : s + 'electrical.mosfets1.mosfet_n_no_bulk',
 			'EE_MOSFET_N3' : s + 'electrical.mosfets1.n-channel_mosfet_1',
+			'EE_MOSFET_N3_V2' : s + 'electrical.mosfets1.n-channel_mosfet_1',
 //Relays
 //			'EE_SPST' NA
 //			'EE_SPDT' NA
@@ -2046,6 +2059,20 @@ LucidImporter = {};
 			'GCPIconGenericBlock' : gcpIcon + 'placeholder',
 			'GCPIconPredictionAPIBlock' : gcpIcon + 'prediction_api',
 			//'GCPGoogleCloudPlatformLockupBlock' : gcpIcon + 'gcp_google_cloud_platform_lockup',
+			'GCPAutoScalingModifier' : 'shape=mxgraph.gcp2.modifiers_autoscaling;fillColor=#757575;strokeColor=none;',
+			'GCPCustomVirtualMachineModifier' : 'shape=mxgraph.gcp2.modifiers_custom_virtual_machine;fillColor=#757575;strokeColor=none;',
+			'GCPHighCPUMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_cpu_machine;fillColor=#757575;strokeColor=none;',
+			'GCPHighMemoryMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_memory_machine;fillColor=#757575;strokeColor=none;',
+			'GCPPreemptableVSModifier' : 'shape=mxgraph.gcp2.modifiers_preemptable_vm;fillColor=#757575;strokeColor=none;',
+			'GCPSharedCoreMachineF1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_f1;fillColor=#757575;strokeColor=none;',
+			'GCPSharedCoreMachineG1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_g1;fillColor=#757575;strokeColor=none;',
+			'GCPStandardMachineModifier' : 'shape=mxgraph.gcp2.modifiers_standard_machine;fillColor=#757575;strokeColor=none;',
+			'GCPStorageModifier' : 'shape=mxgraph.gcp2.modifiers_storage;fillColor=#757575;strokeColor=none;',
+			'GCPAppEngineProductCard' : cs,
+			'GCPCloudDataflowProductCard' : cs,
+			'GCPCloudDataprocProductCard' : cs,
+			'GCPComputeEngineProductCard' : cs,
+			'GCPContainerEngineProductCard' : cs,
 			
 //Kubernetes Icons
 			'CronjobLabeledKub19' : kupIcon + 'cronjob',
@@ -2345,7 +2372,7 @@ LucidImporter = {};
 			'PEClarifierBlock' : s + 'pid.vessels.bunker_(conical_bottom);verticalLabelPosition=bottom;verticalAlign=top',
 			'PETankBlock' : s + 'pid.vessels.tank_(conical_roof);verticalLabelPosition=bottom;verticalAlign=top',
 			'PETrayColumnBlock' : s + 'pid2misc.column;columnType=tray;verticalLabelPosition=bottom;verticalAlign=top',
-			'PEReactionVesselBlock' : s + 'pid.vessels.reactor',
+			'PEReactionVesselBlock' : s + 'pid.vessels.reactor;verticalLabelPosition=bottom;verticalAlign=top',
 			'PEBin' : s + 'pid.vessels.tank_(conical_bottom)',
 			'PEDomeRoofTank' : s + 'pid.vessels.tank_(dished_roof)',
 			'PEConeRoofTank' : s + 'pid.vessels.tank_(conical_roof)',
@@ -2371,7 +2398,7 @@ LucidImporter = {};
 			'PEShellAndTubeHeat2Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_2;verticalLabelPosition=bottom;verticalAlign=top',
 			'PEShellAndTubeHeat3Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;direction=north;verticalLabelPosition=bottom;verticalAlign=top',
 			'PESinglePassHeatBlock' : s + 'pid.heat_exchangers.single_pass_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
-			'PEHeaterBlock' : s + 'pid.heat_exchangers.heater',
+			'PEHeaterBlock' : s + 'pid.heat_exchangers.heater;verticalLabelPosition=bottom;verticalAlign=top',
 //Pumps
 			'PEEjectorInjectorBlock' : s + 'pid.fittings.injector;verticalLabelPosition=bottom;verticalAlign=top',
 			'PECompressorTurbineBlock' : cs,
@@ -2578,7 +2605,8 @@ LucidImporter = {};
 			'UI2BrowserBlock' : cs,
 			'UI2WindowBlock' : cs, 
 			'UI2DialogBlock' : cs,
-			'UI2AreaBlock' : '',
+			'UI2AreaBlock' : 'rounded=1;arcSize=3',
+			'UIAreaBlock' : 'rounded=1;arcSize=3;fillColor=none',
 			'UI2ElementBlock' : '',
 			'UI2AccordionBlock' : cs,
 			'UI2TabBarContainerBlock' : cs,
@@ -2848,17 +2876,17 @@ LucidImporter = {};
 			'AmazonConnect2017' : 'shape=mxgraph.aws3.connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
 			
 // AWS 17 - Containers			
-//			'AutoScalingGroup2017' : '',
-//			'AvailabilityZone2017' : '',
-//			'Region2017' : '',
+			'AutoScalingGroup2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 3 1 3;verticalAlign=bottom',
+			'AvailabilityZone2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 4;verticalAlign=bottom',
+			'Region2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=1 1;verticalAlign=bottom',
 			'SecurityGroup2017' : 'verticalAlign=bottom',
-//			'ElasticBeanStalkContainer2017' : '',
-//			'EC2InstanceContents2017' : '',
-//			'VPCSubnet2017' : '',
-//			'ServerContents2017' : '',
-//			'VirtualPrivateCloudContainer2017' : '',
-//			'AWSCloudContainer2017' : '',
-//			'CorporateDataCenterContainer2017' : '',
+			'ElasticBeanStalkContainer2017' : cs,
+			'EC2InstanceContents2017' : cs,
+			'VPCSubnet2017' : cs,
+			'ServerContents2017' : 'rounded=1;arcSize=10;dashed=0;fillColor=#DBDBDB;gradientColor=none;verticalAlign=bottom',
+			'VirtualPrivateCloudContainer2017' : cs,
+			'AWSCloudContainer2017' : cs,
+			'CorporateDataCenterContainer2017' : cs,
 			
 // AWS 17 - Database			
 			'AmazonDynamoDB2017' : 'shape=mxgraph.aws3.dynamo_db;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
@@ -3116,6 +3144,7 @@ LucidImporter = {};
 			'volume2017' : 'shape=mxgraph.aws3.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
 			
 // AWS 19 Analytics			
+			
 			'AnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
 			'AmazonAthenaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.athena;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff',
 			'AmazonCloudSearchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudsearch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff',
@@ -3207,7 +3236,15 @@ LucidImporter = {};
 			'AWSElasticBeanstalk_ApplicationAWS19' : 'shape=mxgraph.aws4.application;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none',
 			'AWSElasticBeanstalk_DeploymentAWS19' : 'shape=mxgraph.aws4.deployment;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none',
 			'AWSLambda_LambdaFunctionAWS19' : 'shape=mxgraph.aws4.lambda_function;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none',
-
+			'AWSThinkboxDeadlineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_deadline;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxDraftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_draft;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxFrostAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_frost;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxKrakatoaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_krakatoa;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxSequoiaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_sequoia;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxStokeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_stoke;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			'AWSThinkboxXMeshAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_xmesh;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;',
+			
+			
 // AWS 19 - Cost Management		
 			'AWSCostManagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
 			'AWSBudgetsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.budgets;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff',
@@ -3714,8 +3751,8 @@ LucidImporter = {};
 			'GCPInputPhone' : cs,
 			'GCPInputBlank' : cs,
 
-// Site Map			
-//			'SMPage' : s + 'rect',
+// Site Map	
+			'SMPage' : cs,
 			'SMHome' : s + 'sitemap.home;strokeColor=#000000;fillColor=#E6E6E6',
 			'SMGallery' : s + 'sitemap.gallery;strokeColor=#000000;fillColor=#E6E6E6',
 			'SMShopping' : s + 'sitemap.shopping;strokeColor=#000000;fillColor=#E6E6E6',
@@ -3765,7 +3802,7 @@ LucidImporter = {};
 			'ExtShapeServerBlock': ss + 'citrix.tower_server;verticalLabelPosition=bottom;verticalAlign=top',
 			'ExtShapeCloudBlock': ss + 'citrix.cloud;verticalLabelPosition=bottom;verticalAlign=top',
 			'ExtShapeUserBlock': ss + 'aws3d.end_user;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#073763',
-			'ExtShapeWorkstationLCDBlock': ss + 'veeam.3d.workstation;verticalLabelPosition=bottom;verticalAlign=top',
+			'ExtShapeWorkstationLCDBlock': ss + 'veeam.3d.workstation;verticalLabelPosition=bottom;verticalAlign=top'
 	};
 	
 	// actual code start
@@ -3773,7 +3810,7 @@ LucidImporter = {};
 	function convertTxt2Html(txt, srcM, props)
 	{
 		var blockStyles = {'a': true, 'il': true, 'ir': true, 'mt': true, 'mb': true, 'p': true, 't': true, 'l': true};
-		var nonBlockStyles = {'lk': true, 's': true, 'c': true, 'b': true, 'fc': true, 'i': true, 'u': true, 'k': true};
+		var nonBlockStyles = {'lk': true, 's': true, 'c': true, 'b': true, 'fc': true, 'i': true, 'u': true, 'k': true, 'f': true};
 
 		srcM.sort(function(a, b)
 		{
@@ -4044,6 +4081,22 @@ LucidImporter = {};
 				str += 'font-style: italic;';
 			}
 			
+			var fontFamily = null;
+			
+			if (styles['f'])
+			{
+				fontFamily = styles['f'].v;
+			}
+			else if (props.Font)
+			{
+				fontFamily = props.Font;
+			}
+			
+			if (fontFamily && fontFamily != defaultLucidFont)
+			{
+				str += 'font-family: ' + fontFamily + ';';
+			}
+			
 			var td = [];
 
 			if (styles['u'] && styles['u'].v)
@@ -4382,6 +4435,7 @@ LucidImporter = {};
 	{
 		var style = 'whiteSpace=wrap;' + (noLblStyle? 'overflow=block;html=1;fontSize=' + defaultFontSize + ';' : 
 				getFontSize(properties) +
+				getFontFamily(properties) +
 				getFontColor(properties) + 
 				getFontStyle(properties) +
 				getTextAlignment(properties) + 
@@ -4410,7 +4464,8 @@ LucidImporter = {};
 		  (noLblStyle? (hasStyle(style, 'overflow')? '' : 'overflow=block;') + 
 			(hasStyle(style, 'html')? '' : 'html=1;') + 'fontSize=' + defaultFontSize + ';' 
 			:
-			addStyle(mxConstants.STYLE_FONTSIZE, style, properties, action, cell) +		
+			addStyle(mxConstants.STYLE_FONTSIZE, style, properties, action, cell) +	
+			addStyle(mxConstants.STYLE_FONTFAMILY, style, properties, action, cell) +		
 			addStyle(mxConstants.STYLE_FONTCOLOR, style, properties, action, cell) +			
 			addStyle(mxConstants.STYLE_FONTSTYLE, style, properties, action, cell) +		
 			addStyle(mxConstants.STYLE_ALIGN, style, properties, action, cell) +		
@@ -4444,7 +4499,10 @@ LucidImporter = {};
 			{
 				case mxConstants.STYLE_FONTSIZE :
 					return getFontSize(properties);
-					
+				
+				case mxConstants.STYLE_FONTFAMILY :
+					return getFontFamily(properties);
+				
 				case mxConstants.STYLE_FONTCOLOR :
 					return getFontColor(properties);
 					
@@ -4551,7 +4609,32 @@ LucidImporter = {};
 		
 		return '';
 	}
+	
+	function getFontFamily(properties)
+	{
+		var m = getTextM(properties);
+		var fontFamily;
 		
+		if (m != null)
+		{
+			for (var i = 0; i < m.length; i++)
+			{
+				if (m[i].n == 'f' && m[i].v)
+				{
+					fontFamily = m[i].v;
+					break;
+				}
+			}
+		}
+		
+		if (!fontFamily && properties.Font)
+		{
+			fontFamily = properties.Font;
+		}
+		
+		return fontFamily && fontFamily != defaultLucidFont ?'fontFamily=' + fontFamily + ';' : '';
+	};
+	
 	function getLink(m)
 	{
 		if (m != null)
@@ -5718,6 +5801,9 @@ LucidImporter = {};
 			
 			var group = new mxCell('', new mxGeometry(), 'group;dropTarget=0;');
 			group.vertex = true;
+			//Store z-order to use it in groups
+			group.zOrder = obj.ZOrder;
+
 			var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
 			var members = obj.Members, memberCells = [];
 			
@@ -5741,7 +5827,7 @@ LucidImporter = {};
 				var ai = a.zOrder;
 				var bi = b.zOrder;
 				
-				return (ai != null && bi != null) ? ai - bi : 0;
+				return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative
 			});
 			
 			for (var i = 0; i < memberCells.length; i++)
@@ -5934,7 +6020,7 @@ LucidImporter = {};
 				var ai = (a.Properties != null) ? a.Properties.ZOrder : a.ZOrder;
 				var bi = (b.Properties != null) ? b.Properties.ZOrder : b.ZOrder;
 				
-				return (ai != null && bi != null) ? ai - bi : 0;
+				return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative
 			});
 			
 			function addLine(obj, p)
@@ -6385,6 +6471,32 @@ LucidImporter = {};
     	v.insert(icon1);
 	};
 	
+	function addGCP2ExpandedProductCard(icon, scaleX, scaleY, w, h, v, p, a)
+	{
+		if (icon != 'transparent')
+		{
+			var s = mxConstants.STYLE_SHAPE + '=mxgraph.gcp.';
+		}
+		else
+		{
+			var s = mxConstants.STYLE_SHAPE + '=';
+		}
+
+		v.style = 'rounded=1;absoluteArcSize=1;arcSize=2;verticalAlign=bottom;fillColor=#ffffff;strokeColor=#dddddd;whiteSpace=wrap;';
+		v.style += addAllStyles(v.style, p, a, v);
+		
+		v.value = convertText(p);
+    	v.vertex = true;
+	    var icon1 = new mxCell(null, new mxGeometry(0.5, 0, w * 0.7 * scaleX, w * 0.7 * scaleY), 
+	    		s + icon + ';part=1;dashed=0;connectable=0;html=1;strokeColor=none;shadow=0;'); 
+
+	    icon1.geometry.relative = true;
+	    icon1.geometry.offset = new mxPoint(- scaleX * w * 0.35, 10 + (1 - scaleY) * w * 0.35);
+    	icon1.vertex = true;
+    	icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML);
+    	v.insert(icon1);
+	};
+	
 	function hasStyle(style, key)
 	{
 		if (style != null && key != null)
@@ -6815,6 +6927,19 @@ LucidImporter = {};
 					v.insert(content);
 				}
 				break;
+			case 'GSDFDProcessBlock' : 
+				var startSize = Math.round(p.nameHeight * scale);
+				v.style = 'shape=swimlane;html=1;rounded=1;arcSize=10;collapsible=0;startSize=' + startSize;
+				v.value = convertText(p.Number, true);
+				v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
+				v.style += getFillColor(p, a).replace('fillColor', 'swimlaneFillColor');
+				
+				var content = new mxCell('', new mxGeometry(0, startSize, w, h - startSize), 'rounded=1;arcSize=10;strokeColor=none;fillColor=none');
+				content.value = convertText(p.Text, true);
+				content.style += addAllStyles(content.style, p, a, content, isLastLblHTML);
+				content.vertex = true;
+				v.insert(content);
+				break;
 			case 'AndroidDevice' :
 				if (p.AndroidDeviceName != null)
 				{
@@ -8134,11 +8259,12 @@ LucidImporter = {};
 				break;
 				
 			case 'SMPage' :
+			//TODO Link icon (p.Url != "")
 				if (p.Group)
 				{
 					v.style += 'strokeColor=none;fillColor=none;'
 						
-					var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.9, h * 0.9), 'part=1;');
+					var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;');
 					item1.vertex = true;
 					v.insert(item1);
 					
@@ -8148,7 +8274,7 @@ LucidImporter = {};
 						getShadow(p) +
 						getStrokeWidth(p); 
 
-					var item2 = new mxCell('', new mxGeometry(w * 0.1, h * 0.1, w * 0.9, h * 0.9), 'part=1;');
+					var item2 = new mxCell('', new mxGeometry(w * 0.1, h * 0.1, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;');
 					item2.vertex = true;
 					v.insert(item2);
 					
@@ -8162,15 +8288,17 @@ LucidImporter = {};
 					
 					if (p.Future)
 					{
-						item1.style += 'dashed=1;';
-						item2.style += 'dashed=1;';
+						item1.style += 'dashed=1;fixDash=1;';
+						item2.style += 'dashed=1;fixDash=1;';
 					}
 				}
 				else
 				{
+					v.style += 'rounded=1;arcSize=3;';
+					
 					if (p.Future)
 					{
-						v.style += 'dashed=1;';
+						v.style += 'dashed=1;fixDash=1;';
 					}
 					
 					v.value = convertText(p.Text);
@@ -8403,7 +8531,7 @@ LucidImporter = {};
 							getLabelStyle(p.Text, isLastLblHTML);
 						break
 					case 3:
-						v.style += 'shape=ext;dashed=1;dashPattern=2 1;' +
+						v.style += 'shape=ext;dashed=1;dashPattern=2 5;' +
 							getLabelStyle(p.Text, isLastLblHTML);
 						break
 					case 4:
@@ -11285,6 +11413,8 @@ LucidImporter = {};
 				break;
 				
 			case 'UI2TableBlock' :
+				//TODO Add this (probably a table support in general)
+				LucidImporter.hasUnknownShapes = true;
 				break;
 			case 'UI2ButtonBarBlock' :
 				v.style += addAllStyles(v.style, p, a, v);
@@ -12210,6 +12340,22 @@ LucidImporter = {};
 			case 'GCPInputBlank' :
 				addGCP2UserDeviceCard('transparent', 1, 1, w, h, v, p, a);
 				break;
+// no corresponding icons, only with shadows							
+//			case 'GCPAppEngineProductCard' :
+//				addGCP2ExpandedProductCard('compute.app_engine', 1, 1, w, h, v, p, a);
+//				break;
+//			case 'GCPCloudDataflowProductCard' :
+//				addGCP2ExpandedProductCard('cloud_dataflow', 1, 1, w, h, v, p, a);
+//				break;
+//			case 'GCPCloudDataprocProductCard' :
+//				addGCP2ExpandedProductCard('cloud_dataproc', 1, 1, w, h, v, p, a);
+//				break;
+//			case 'GCPComputeEngineProductCard' :
+//				addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a);
+//				break;
+//			case 'GCPContainerEngineProductCard' :
+//				addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a);
+//				break;
 			case 'PresentationFrameBlock' :
 				if (p.ZOrder == 0) //These are hidden
 				{
@@ -12525,6 +12671,57 @@ LucidImporter = {};
 				v.value = convertText(p);
 				v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
 			break;
+			case 'VPCSubnet2017':
+			case 'VirtualPrivateCloudContainer2017':
+			case 'ElasticBeanStalkContainer2017':
+			case 'EC2InstanceContents2017':
+			case 'AWSCloudContainer2017':
+			case 'CorporateDataCenterContainer2017':
+				//all use the same code, just icon is different
+				var iconStyle, iconW, iconH;
+				
+				switch(cls)
+				{
+					case 'VPCSubnet2017':
+						iconStyle = 'shape=mxgraph.aws3.permissions;fillColor=#D9A741;';
+						iconW = 30;
+						iconH = 35;
+					break;
+					case 'VirtualPrivateCloudContainer2017':
+						iconStyle = 'shape=mxgraph.aws3.virtual_private_cloud;fillColor=#F58536;';
+						iconW = 52;
+						iconH = 36;
+					break;
+					case 'ElasticBeanStalkContainer2017':
+						iconStyle = 'shape=mxgraph.aws3.elastic_beanstalk;fillColor=#F58536;';
+						iconW = 30;
+						iconH = 41;
+					break;
+					case 'EC2InstanceContents2017':
+						iconStyle = 'shape=mxgraph.aws3.instance;fillColor=#F58536;';
+						iconW = 40;
+						iconH = 41;
+					break;
+					case 'AWSCloudContainer2017':
+						iconStyle = 'shape=mxgraph.aws3.cloud;fillColor=#F58536;';
+						iconW = 52;
+						iconH = 36;
+					break;
+					case 'CorporateDataCenterContainer2017':
+						iconStyle = 'shape=mxgraph.aws3.corporate_data_center;fillColor=#7D7C7C;';
+						iconW = 30;
+						iconH = 42;
+					break;
+				}
+				v.style = 'rounded=1;arcSize=10;dashed=0;verticalAlign=bottom;';
+				v.value = convertText(p);
+				v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
+				v.geometry.y += 20;
+				v.geometry.height -= 20;
+				var icon = new mxCell('', new mxGeometry(20, -20, iconW, iconH), iconStyle);
+				icon.vertex = true;
+				v.insert(icon);
+			break;
 		}
 
 		if (v.style && v.style.indexOf('html') < 0)

+ 24 - 28
src/main/webapp/js/diagramly/Init.js

@@ -172,6 +172,18 @@ if (window.mxLanguages == null)
 	}
 }
 
+// Uses lightbox mode on viewer domain
+if (window.location.hostname == DRAWIO_LIGHTBOX_URL.substring(DRAWIO_LIGHTBOX_URL.indexOf('//') + 2))
+{
+	urlParams['lightbox'] = '1';
+}	
+
+// Lightbox enables chromeless mode
+if (urlParams['lightbox'] == '1')
+{
+	urlParams['chrome'] = '0';
+}
+
 /**
  * Returns the global UI setting before runngin static draw.io code
  */
@@ -180,27 +192,23 @@ window.uiTheme = window.uiTheme || (function()
 	var ui = urlParams['ui'];
 
 	// Known issue: No JSON object at this point in quirks in IE8
-	if (ui == null && typeof JSON !== 'undefined')
+	if (ui == null && isLocalStorage && typeof JSON !== 'undefined' && urlParams['lightbox'] != '1')
 	{
-		// Cannot use mxSettings here
-		if (isLocalStorage) 
+		try
 		{
-			try
-			{
-				var value = localStorage.getItem('.drawio-config');
-				
-				if (value != null)
-				{
-					ui = JSON.parse(value).ui || null;
-				}
-			}
-			catch (e)
+			var value = localStorage.getItem('.drawio-config');
+			
+			if (value != null)
 			{
-				// cookies are disabled, attempts to use local storage will cause
-				// a DOM error at a minimum on Chrome
-				isLocalStorage = false;
+				ui = JSON.parse(value).ui || null;
 			}
 		}
+		catch (e)
+		{
+			// cookies are disabled, attempts to use local storage will cause
+			// a DOM error at a minimum on Chrome
+			isLocalStorage = false;
+		}
 	}
 	
 	// Uses minimal theme on small screens
@@ -361,18 +369,6 @@ if (window.location.hostname == 'embed.diagrams.net')
 	urlParams['embed'] = '1';
 }	
 
-// Uses lightbox mode on viewer domain
-if (window.location.hostname == DRAWIO_LIGHTBOX_URL.substring(DRAWIO_LIGHTBOX_URL.indexOf('//') + 2))
-{
-	urlParams['lightbox'] = '1';
-}	
-
-// Lightbox enables chromeless mode
-if (urlParams['lightbox'] == '1')
-{
-	urlParams['chrome'] = '0';
-}
-
 // Fallback for cases where the hash property is not available
 if ((window.location.hash == null || window.location.hash.length <= 1) &&
 	urlParams['open'] != null)

Plik diff jest za duży
+ 125 - 113
src/main/webapp/js/extensions.min.js


+ 4 - 4
src/main/webapp/package.json

@@ -1,6 +1,6 @@
 {
   "name": "draw.io",
-  "version": "13.7.8",
+  "version": "13.10.0",
   "description": "diagrams.net desktop",
   "main": "electron.js",
   "scripts": {
@@ -24,14 +24,14 @@
   "homepage": "https://github.com/jgraph/drawio",
   "dependencies": {
     "commander": "^6.1.0",
-    "electron-log": "^4.2.4",
-    "electron-updater": "^4.3.4",
+    "electron-log": "^4.3.0",
+    "electron-updater": "^4.3.5",
     "electron-progressbar": "1.2.0",
     "electron-store": "^6.0.1",
     "compression": "^1.7.4",
     "crc": "^3.8.0"
   },
   "devDependencies": {
-    "electron": "^10.1.3"
+    "electron": "^11.0.1"
   }
 }

+ 181 - 0
src/main/webapp/plugins/cConf-1-4-8.js

@@ -737,6 +737,187 @@ Draw.loadPlugin(function(ui)
 		});
 	});
 
+	//=============Custom Libraries in More Shapes ===================
+	function addImage(container, data, w, h, img) 
+	{
+		var ew = 100;
+		var eh = 100;
+		
+		var iw = w;
+		var ih = h;
+		
+		if (w > ui.maxImageSize || h > ui.maxImageSize)
+		{
+			var s = Math.min(1, Math.min(ui.maxImageSize / Math.max(1, w)), ui.maxImageSize / Math.max(1, h));
+			w *= s;
+			h *= s;
+		}
+		
+		if (iw > ih)
+		{
+			ih = Math.round(ih * ew / iw);
+			iw = ew;
+		}
+		else
+		{
+			iw = Math.round(iw * eh / ih);
+			ih = eh;
+		}
+		
+		var wrapper = document.createElement('div');
+		wrapper.setAttribute('draggable', 'true');
+		wrapper.style.display = 'inline-block';
+		wrapper.style.cursor = 'move';
+		
+		if (data != null)
+		{
+            var elt = document.createElement('img');
+            elt.setAttribute('src', data);
+			elt.style.width = iw + 'px';
+			elt.style.height = ih + 'px';
+			elt.style.margin = '10px';
+
+			elt.style.paddingBottom = Math.floor((eh - ih) / 2) + 'px';
+			elt.style.paddingLeft = Math.floor((ew - iw) / 2) + 'px';
+			
+			wrapper.appendChild(elt);
+		}
+		else if (img != null)
+		{
+			var cells = ui.stringToCells(Graph.decompress(img.xml));
+			
+			if (cells.length > 0)
+			{
+				ui.sidebar.createThumb(cells, ew, eh, wrapper, null, true, false);
+				
+				// Needs inline block on SVG for delete icon to appear on same line
+				wrapper.firstChild.style.display = 'inline-block';
+				wrapper.firstChild.style.cursor = '';
+			}
+		}
+		
+		container.appendChild(wrapper);
+	};
+	
+	var customLibraries = [];
+	
+	ui.actions.addAction('shapes...', mxUtils.bind(this, function()
+	{
+		ui.remoteInvoke('getCustomLibraries', null, null, function(libs)
+		{
+			customLibraries = libs;
+			
+			for(var i = 0; i < libs.length; i++) 
+			{
+				libs[i].imageCallback = mxUtils.bind(libs[i], function(preview) 
+				{
+					preview.innerHTML = '<img src="/images/spin.gif">';
+
+					ui.remoteInvoke('getFileContent', [this.downloadUrl], null, function(libContent)
+					{
+						try
+						{
+							preview.innerHTML = '';
+							doc = mxUtils.parseXml(libContent);
+							var images = JSON.parse(mxUtils.getTextContent(doc.documentElement));
+							
+							for(var i = 0; i < images.length; i++) 
+							{
+								addImage(preview, images[i].data, images[i].w, images[i].h, images[i]);
+							}
+						}
+						catch(e)
+						{
+							preview.innerHTML = mxResources.get('confAErrOccured');
+							console.log(e);
+						}
+					}, function(err)
+					{
+						preview.innerHTML = mxResources.get('errorLoadingFile');
+						console.log(err);
+					});
+				});
+			}
+			
+			var customLibsEntry = libs.length > 0? [{title : mxResources.get('customLib'), entries : libs}] : []; 
+			ui.showDialog(new MoreShapesDialog(ui, true, ui.sidebar.entries.concat(customLibsEntry)).container, 640, (isLocalStorage) ?
+					((mxClient.IS_IOS) ? 650 : 630) : 650, true, true);
+		}, function(err) 
+		{
+			console.log(err);
+			ui.showDialog(new MoreShapesDialog(ui, true, ui.sidebar.entries).container, 640, (isLocalStorage) ?
+					((mxClient.IS_IOS) ? 650 : 630) : 650, true, true);
+		});
+	}));
+
+    var showEntriesOld =  Sidebar.prototype.showEntries;
+	
+	Sidebar.prototype.showEntries = function(stc, remember, force) 
+	{
+		showEntriesOld.apply(this, arguments);
+		
+		if(stc == null)
+			return;
+		
+		var libIds = stc.split(';');
+		
+		for(var i = 0; i < customLibraries.length; i++) 
+		{
+			lib = customLibraries[i];
+			
+			if(mxUtils.indexOf(libIds, lib.id) != -1) 
+			{
+				ui.remoteInvoke('getFileContent', [lib.downloadUrl], null, mxUtils.bind(lib, function(libContent)
+				{
+					try
+					{
+						ui.loadLibrary(new RemoteLibrary(ui, libContent, this));
+					}
+					catch (e)
+					{
+						//Ignore 
+					}
+				}), function()
+				{
+					//Ignore
+				});
+			}
+			else 
+			{
+				ui.closeLibrary(new RemoteLibrary(ui, '', lib));
+			}
+		};
+	};
+
+    var isEntryVisibleOld = Sidebar.prototype.isEntryVisible;
+
+	Sidebar.prototype.isEntryVisible = function(key) 
+	{
+		var visible = isEntryVisibleOld.apply(this, arguments);
+		var cVisible = false;
+		
+		var customLibSelection = mxSettings.getCustomLibraries();
+		
+		for(var i = 0; i < customLibSelection.length; i++) 
+		{
+			try
+			{
+				var hash = customLibSelection[i];
+				
+				if (hash.charAt(0) == 'R')
+				{
+					if(JSON.parse(decodeURIComponent(hash.substr(1)))[0] == key)
+					{
+						cVisible = true;
+					}	
+				}
+			}
+			catch(e){} //ignore
+		}
+		
+		return visible || cVisible;
+	};
+
 	//=============Embed File with real-time collab support (based on remote invocation)
 	//Until app.min.js is propagated, this code is necessary
 	if (typeof EmbedFile === 'undefined')

+ 5 - 5
src/main/webapp/service-worker.js

@@ -6,11 +6,11 @@ if (workbox)
 	workbox.precaching.precacheAndRoute([
   {
     "url": "js/app.min.js",
-    "revision": "afa164e29bb80736c99fd23950f8a47d"
+    "revision": "c041db82ed8abb8847879971aedae3c6"
   },
   {
     "url": "js/extensions.min.js",
-    "revision": "f784fd1367da48ff95ea153bd9c8006b"
+    "revision": "4c100ac03de2866a13012d391896fe8c"
   },
   {
     "url": "js/stencils.min.js",
@@ -102,11 +102,11 @@ if (workbox)
   },
   {
     "url": "plugins/cConf-1-4-8.js",
-    "revision": "4b7c6ea1cd878f501963a86b94d599d5"
+    "revision": "b437d1ab44bbe4999b3396abbd6fb7ab"
   },
   {
     "url": "connect/confluence/connectUtils-1-4-8.js",
-    "revision": "38448282f113992b1f346eb97ccc3542"
+    "revision": "09f7a64cb2e15aa5d10f4ebf8b78fa11"
   },
   {
     "url": "connect/new_common/cac.js",
@@ -126,7 +126,7 @@ if (workbox)
   },
   {
     "url": "connect/confluence/viewer.js",
-    "revision": "c6956490a00676ee14b35d0bd40bc913"
+    "revision": "002ca191edcb0ea140aae6969be98e87"
   },
   {
     "url": "connect/confluence/viewer-1-4-42.html",

+ 49 - 44
src/main/webapp/yarn.lock

@@ -31,9 +31,9 @@
     defer-to-connect "^1.0.1"
 
 "@types/node@^12.0.12":
-  version "12.12.64"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.64.tgz#e3b336dc4c6ba52c6b59e3bd69a100347c20b1c0"
-  integrity sha512-UV1/ZJMC+HcP902wWdpC43cAcGu0IQk/I5bXjP2aSuCjsk3cE74mDvFrLKga7oDC170ugOAYBwfT4DSQW3akDA==
+  version "12.19.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.5.tgz#9be3946136e818597c71c62d04240d0602c645d4"
+  integrity sha512-Wgdl27uw/jUYUFyajUGKSjDNGxmJrZi9sjeG6UJImgUtKbJoO9aldx+1XODN1EpNDX9DirvbvHHmTsNlb8GwMA==
 
 "@types/semver@^7.3.1":
   version "7.3.4"
@@ -49,9 +49,9 @@ accepts@~1.3.5:
     negotiator "0.6.2"
 
 ajv@^6.12.2:
-  version "6.12.5"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da"
-  integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
   dependencies:
     fast-deep-equal "^3.1.1"
     fast-json-stable-stringify "^2.0.0"
@@ -71,19 +71,19 @@ at-least-node@^1.0.0:
   integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
 
 atomically@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.3.2.tgz#721156e5c4f03e768ab54f3e6c9dc550d4690761"
-  integrity sha512-MAiqx5ir1nOoMeG2vLXJnj4oFROJYB1hMqa2aAo6GQVIkPdkIcrq9W9SR0OaRtvEowO7Y2bsXqKFuDMTO4iOAQ==
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe"
+  integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==
 
-base64-js@^1.0.2:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
-  integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+base64-js@^1.3.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
 
 boolean@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f"
-  integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570"
+  integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==
 
 buffer-crc32@~0.2.3:
   version "0.2.13"
@@ -96,12 +96,12 @@ buffer-from@^1.0.0:
   integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 
 buffer@^5.1.0:
-  version "5.6.0"
-  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
-  integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
   dependencies:
-    base64-js "^1.0.2"
-    ieee754 "^1.1.4"
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
 
 builder-util-runtime@8.7.2:
   version "8.7.2"
@@ -137,9 +137,9 @@ clone-response@^1.0.2:
     mimic-response "^1.0.0"
 
 commander@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
-  integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75"
+  integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==
 
 compressible@~2.0.16:
   version "2.0.18"
@@ -196,9 +196,9 @@ config-chain@^1.1.11:
     proto-list "~1.2.1"
 
 core-js@^3.6.5:
-  version "3.6.5"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
-  integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+  version "3.7.0"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f"
+  integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==
 
 core-util-is@~1.0.0:
   version "1.0.2"
@@ -269,10 +269,10 @@ duplexer3@^0.1.4:
   resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
   integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
 
-electron-log@^4.2.4:
-  version "4.2.4"
-  resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.2.4.tgz#a13e42a9fc42ca2cc7d2603c3746352efa82112e"
-  integrity sha512-CXbDU+Iwi+TjKzugKZmTRIORIPe3uQRqgChUl19fkW/reFUn5WP7dt+cNGT3bkLV8xfPilpkPFv33HgtmLLewQ==
+electron-log@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.3.0.tgz#6e841a5c9af34ed3ca83e5a8a4156fdc39bed464"
+  integrity sha512-iuJjH/ZEJkDyCbuAMvvFxAjCMDLMXIQ5NqvppETGrbtf4b/007r5P36BSvexdy0UzwDNzDtIuEXLR34vRXWZrg==
 
 electron-progressbar@1.2.0:
   version "1.2.0"
@@ -289,7 +289,7 @@ electron-store@^6.0.1:
     conf "^7.1.2"
     type-fest "^0.16.0"
 
-electron-updater@^4.3.4:
+electron-updater@^4.3.5:
   version "4.3.5"
   resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.3.5.tgz#4fb36f593a031c87ea07ee141c9f064d5deffb15"
   integrity sha512-5jjN7ebvfj1cLI0VZMdCnJk6aC4bP+dy7ryBf21vArR0JzpRVk0OZHA2QBD+H5rm6ZSeDYHOY6+8PrMEqJ4wlQ==
@@ -302,10 +302,10 @@ electron-updater@^4.3.4:
     lodash.isequal "^4.5.0"
     semver "^7.3.2"
 
-electron@^10.1.3:
-  version "10.1.3"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-10.1.3.tgz#7e276e373bf30078bd4cb1184850a91268dc0e6c"
-  integrity sha512-CR8LrlG47MdAp317SQ3vGYa2o2cIMdMSMPYH46OVitFLk35dwE9fn3VqvhUIXhCHYcNWIAPzMhkVHpkoFdKWuw==
+electron@^11.0.1:
+  version "11.0.1"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-11.0.1.tgz#e71195ff9abfbcfa0f4bf49ec9064e5e0f3f928c"
+  integrity sha512-UefDvxeyTREL1FpC0BcXwzLjcYiQICFSZONbwarpoqTXQU5rzEguIegHPqg5AqwYH4FVYfEuigj/Vm94rtZOzg==
   dependencies:
     "@electron/get" "^1.0.1"
     "@types/node" "^12.0.12"
@@ -472,10 +472,10 @@ http-cache-semantics@^4.0.0:
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
   integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
 
-ieee754@^1.1.4:
-  version "1.1.13"
-  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
-  integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+ieee754@^1.1.13:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
 
 inherits@^2.0.3, inherits@~2.0.3:
   version "2.0.4"
@@ -533,11 +533,11 @@ jsonfile@^4.0.0:
     graceful-fs "^4.1.6"
 
 jsonfile@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179"
-  integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
   dependencies:
-    universalify "^1.0.0"
+    universalify "^2.0.0"
   optionalDependencies:
     graceful-fs "^4.1.6"
 
@@ -907,6 +907,11 @@ universalify@^1.0.0:
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
   integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
 
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
 uri-js@^4.2.2:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"