super-three 0.136.0 → 0.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +24 -26
- package/build/three.cjs +35889 -0
- package/build/three.js +4837 -6036
- package/build/three.min.js +2 -2
- package/build/three.module.js +16548 -17930
- package/examples/js/animation/CCDIKSolver.js +3 -2
- package/examples/js/animation/MMDAnimationHelper.js +3 -1
- package/examples/js/animation/MMDPhysics.js +3 -3
- package/examples/js/cameras/CinematicCamera.js +2 -7
- package/examples/js/controls/ArcballControls.js +3 -1
- package/examples/js/controls/PointerLockControls.js +3 -2
- package/examples/js/controls/TrackballControls.js +1 -4
- package/examples/js/controls/TransformControls.js +5 -6
- package/examples/js/controls/experimental/CameraControls.js +8 -4
- package/examples/js/csm/CSMFrustum.js +1 -1
- package/examples/js/csm/CSMShader.js +51 -35
- package/examples/js/curves/CurveExtras.js +14 -18
- package/examples/js/effects/AnaglyphEffect.js +7 -4
- package/examples/js/effects/AsciiEffect.js +10 -29
- package/examples/js/exporters/ColladaExporter.js +29 -7
- package/examples/js/exporters/EXRExporter.js +458 -0
- package/examples/js/exporters/GLTFExporter.js +233 -105
- package/examples/js/exporters/MMDExporter.js +1 -1
- package/examples/js/exporters/OBJExporter.js +12 -18
- package/examples/js/exporters/PLYExporter.js +15 -20
- package/examples/js/exporters/USDZExporter.js +13 -0
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/DecalGeometry.js +0 -7
- package/examples/js/geometries/LightningStrike.js +2 -2
- package/examples/js/geometries/ParametricGeometries.js +3 -3
- package/examples/js/geometries/TextGeometry.js +12 -10
- package/examples/js/helpers/OctreeHelper.js +74 -0
- package/examples/js/helpers/VertexNormalsHelper.js +4 -23
- package/examples/js/helpers/VertexTangentsHelper.js +3 -13
- package/examples/js/helpers/ViewHelper.js +266 -0
- package/examples/js/interactive/HTMLMesh.js +249 -42
- package/examples/js/interactive/SelectionHelper.js +1 -1
- package/examples/js/libs/opentype.min.js +1 -118
- package/examples/js/lines/Line2.js +1 -2
- package/examples/js/lines/LineGeometry.js +10 -21
- package/examples/js/lines/LineMaterial.js +2 -3
- package/examples/js/lines/LineSegments2.js +214 -140
- package/examples/js/lines/LineSegmentsGeometry.js +3 -14
- package/examples/js/lines/Wireframe.js +2 -3
- package/examples/js/lines/WireframeGeometry2.js +1 -2
- package/examples/js/loaders/3MFLoader.js +21 -17
- package/examples/js/loaders/AMFLoader.js +1 -1
- package/examples/js/loaders/BasisTextureLoader.js +1 -0
- package/examples/js/loaders/ColladaLoader.js +33 -12
- package/examples/js/loaders/DDSLoader.js +23 -30
- package/examples/js/loaders/EXRLoader.js +314 -294
- package/examples/js/loaders/FBXLoader.js +11 -0
- package/examples/js/loaders/FontLoader.js +1 -2
- package/examples/js/loaders/GCodeLoader.js +0 -1
- package/examples/js/loaders/GLTFLoader.js +250 -61
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -2
- package/examples/js/loaders/KMZLoader.js +1 -1
- package/examples/js/loaders/KTX2Loader.js +1 -9
- package/examples/js/loaders/LDrawLoader.js +1342 -962
- package/examples/js/loaders/LUT3dlLoader.js +18 -11
- package/examples/js/loaders/LUTCubeLoader.js +4 -5
- package/examples/js/loaders/LWOLoader.js +4 -2
- package/examples/js/loaders/LogLuvLoader.js +1 -2
- package/examples/js/loaders/MD2Loader.js +5 -5
- package/examples/js/loaders/MMDLoader.js +18 -4
- package/examples/js/loaders/MTLLoader.js +10 -3
- package/examples/js/loaders/NRRDLoader.js +1 -1
- package/examples/js/loaders/OBJLoader.js +9 -5
- package/examples/js/loaders/PCDLoader.js +24 -15
- package/examples/js/loaders/PDBLoader.js +11 -11
- package/examples/js/loaders/PLYLoader.js +5 -1
- package/examples/js/loaders/RGBELoader.js +9 -17
- package/examples/js/loaders/RGBMLoader.js +13 -16
- package/examples/js/loaders/STLLoader.js +1 -1
- package/examples/js/loaders/SVGLoader.js +21 -11
- package/examples/js/loaders/VOXLoader.js +3 -4
- package/examples/js/loaders/VRMLLoader.js +9 -21
- package/examples/js/loaders/VTKLoader.js +260 -295
- package/examples/js/loaders/lwo/LWO2Parser.js +4 -4
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -4
- package/examples/js/math/ConvexHull.js +13 -28
- package/examples/js/math/Lut.js +27 -26
- package/examples/js/misc/MorphAnimMesh.js +2 -2
- package/examples/js/misc/ProgressiveLightMap.js +1 -1
- package/examples/js/misc/Volume.js +39 -48
- package/examples/js/misc/VolumeSlice.js +21 -21
- package/examples/js/modifiers/CurveModifier.js +8 -7
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/js/modifiers/SimplifyModifier.js +1 -18
- package/examples/js/modifiers/TessellateModifier.js +0 -7
- package/examples/js/objects/Lensflare.js +4 -4
- package/examples/js/objects/LightningStorm.js +4 -5
- package/examples/js/objects/MarchingCubes.js +6 -11
- package/examples/js/objects/Reflector.js +10 -16
- package/examples/js/objects/ReflectorForSSRPass.js +1 -11
- package/examples/js/objects/Refractor.js +10 -16
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -15
- package/examples/js/objects/Water2.js +1 -1
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
- package/examples/js/postprocessing/AfterimagePass.js +2 -6
- package/examples/js/postprocessing/BloomPass.js +50 -19
- package/examples/js/postprocessing/DotScreenPass.js +1 -1
- package/examples/js/postprocessing/EffectComposer.js +1 -6
- package/examples/js/postprocessing/GlitchPass.js +4 -5
- package/examples/js/postprocessing/LUTPass.js +2 -2
- package/examples/js/postprocessing/OutlinePass.js +8 -17
- package/examples/js/postprocessing/SAOPass.js +2 -7
- package/examples/js/postprocessing/SMAAPass.js +2 -9
- package/examples/js/postprocessing/SSAARenderPass.js +1 -6
- package/examples/js/postprocessing/SSAOPass.js +9 -21
- package/examples/js/postprocessing/SSRPass.js +3 -8
- package/examples/js/postprocessing/SavePass.js +1 -5
- package/examples/js/postprocessing/TAARenderPass.js +4 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
- package/examples/js/renderers/CSS2DRenderer.js +20 -19
- package/examples/js/renderers/CSS3DRenderer.js +40 -36
- package/examples/js/renderers/Projector.js +97 -124
- package/examples/js/renderers/SVGRenderer.js +3 -4
- package/examples/js/shaders/BlendShader.js +2 -1
- package/examples/js/shaders/CopyShader.js +4 -3
- package/examples/js/shaders/DigitalGlitch.js +3 -3
- package/examples/js/shaders/FXAAShader.js +239 -1069
- package/examples/js/shaders/FreiChenShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -1
- package/examples/js/shaders/HorizontalTiltShiftShader.js +1 -1
- package/examples/js/shaders/MMDToonShader.js +0 -1
- package/examples/js/shaders/SSAOShader.js +1 -1
- package/examples/js/shaders/SSRShader.js +3 -3
- package/examples/js/shaders/ToneMapShader.js +1 -1
- package/examples/js/utils/BufferGeometryUtils.js +282 -22
- package/examples/js/utils/GPUStatsPanel.js +1 -1
- package/examples/js/utils/LDrawUtils.js +182 -0
- package/examples/js/utils/SceneUtils.js +59 -0
- package/examples/js/utils/SkeletonUtils.js +1 -1
- package/examples/js/utils/UVsDebug.js +23 -33
- package/examples/jsm/animation/CCDIKSolver.js +3 -9
- package/examples/jsm/animation/MMDPhysics.js +2 -2
- package/examples/jsm/cameras/CinematicCamera.js +2 -5
- package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
- package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +7 -1
- package/examples/jsm/controls/ArcballControls.js +3 -1
- package/examples/jsm/controls/PointerLockControls.js +4 -2
- package/examples/jsm/controls/TrackballControls.js +1 -4
- package/examples/jsm/controls/TransformControls.js +6 -6
- package/examples/jsm/controls/experimental/CameraControls.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +1 -1
- package/examples/jsm/csm/CSMShader.js +51 -35
- package/examples/jsm/curves/CurveExtras.js +15 -17
- package/examples/jsm/effects/AnaglyphEffect.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +9 -22
- package/examples/jsm/exporters/ColladaExporter.js +31 -6
- package/examples/jsm/exporters/EXRExporter.js +507 -0
- package/examples/jsm/exporters/GLTFExporter.js +261 -103
- package/examples/jsm/exporters/KTX2Exporter.js +281 -0
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +11 -18
- package/examples/jsm/exporters/PLYExporter.js +23 -21
- package/examples/jsm/exporters/USDZExporter.js +12 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/DecalGeometry.js +0 -7
- package/examples/jsm/geometries/LightningStrike.js +2 -2
- package/examples/jsm/geometries/ParametricGeometries.js +3 -3
- package/examples/jsm/geometries/TextGeometry.js +13 -13
- package/examples/jsm/helpers/OctreeHelper.js +58 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +4 -25
- package/examples/jsm/helpers/VertexTangentsHelper.js +3 -15
- package/examples/jsm/helpers/ViewHelper.js +295 -0
- package/examples/jsm/interactive/HTMLMesh.js +268 -36
- package/examples/jsm/interactive/SelectionHelper.js +1 -1
- package/examples/jsm/libs/flow.module.js +947 -183
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/lil-gui.module.min.js +2 -2
- package/examples/jsm/libs/mikktspace.module.js +128 -0
- package/examples/jsm/libs/opentype.module.js +14568 -0
- package/examples/jsm/lines/Line2.js +2 -2
- package/examples/jsm/lines/LineGeometry.js +11 -19
- package/examples/jsm/lines/LineMaterial.js +3 -3
- package/examples/jsm/lines/LineSegments2.js +210 -145
- package/examples/jsm/lines/LineSegmentsGeometry.js +3 -12
- package/examples/jsm/lines/Wireframe.js +3 -3
- package/examples/jsm/lines/WireframeGeometry2.js +2 -2
- package/examples/jsm/loaders/3DMLoader.js +3 -2
- package/examples/jsm/loaders/3MFLoader.js +21 -17
- package/examples/jsm/loaders/AMFLoader.js +1 -1
- package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
- package/examples/jsm/loaders/ColladaLoader.js +40 -12
- package/examples/jsm/loaders/DDSLoader.js +21 -28
- package/examples/jsm/loaders/EXRLoader.js +309 -293
- package/examples/jsm/loaders/FBXLoader.js +11 -0
- package/examples/jsm/loaders/FontLoader.js +2 -2
- package/examples/jsm/loaders/GCodeLoader.js +0 -1
- package/examples/jsm/loaders/GLTFLoader.js +263 -68
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -4
- package/examples/jsm/loaders/KMZLoader.js +1 -1
- package/examples/jsm/loaders/KTX2Loader.js +1 -10
- package/examples/jsm/loaders/LDrawLoader.js +1335 -988
- package/examples/jsm/loaders/LUT3dlLoader.js +19 -14
- package/examples/jsm/loaders/LUTCubeLoader.js +5 -7
- package/examples/jsm/loaders/LWOLoader.js +5 -3
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MD2Loader.js +5 -5
- package/examples/jsm/loaders/MMDLoader.js +21 -3
- package/examples/jsm/loaders/MTLLoader.js +11 -4
- package/examples/jsm/loaders/NRRDLoader.js +1 -2
- package/examples/jsm/loaders/OBJLoader.js +11 -7
- package/examples/jsm/loaders/PCDLoader.js +25 -17
- package/examples/jsm/loaders/PDBLoader.js +11 -11
- package/examples/jsm/loaders/PLYLoader.js +10 -2
- package/examples/jsm/loaders/RGBELoader.js +11 -20
- package/examples/jsm/loaders/RGBMLoader.js +15 -12
- package/examples/jsm/loaders/STLLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +26 -11
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/VOXLoader.js +5 -5
- package/examples/jsm/loaders/VRMLLoader.js +9 -23
- package/examples/jsm/loaders/VTKLoader.js +256 -284
- package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
- package/examples/jsm/loaders/lwo/LWO2Parser.js +4 -4
- package/examples/jsm/loaders/lwo/LWO3Parser.js +4 -4
- package/examples/jsm/math/ConvexHull.js +13 -28
- package/examples/jsm/math/Lut.js +35 -25
- package/examples/jsm/misc/MorphAnimMesh.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
- package/examples/jsm/misc/Volume.js +39 -46
- package/examples/jsm/misc/VolumeSlice.js +21 -21
- package/examples/jsm/modifiers/CurveModifier.js +9 -8
- package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -18
- package/examples/jsm/modifiers/TessellateModifier.js +0 -7
- package/examples/jsm/node-editor/NodeEditor.js +485 -163
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +9 -9
- package/examples/jsm/node-editor/accessors/PositionEditor.js +9 -9
- package/examples/jsm/node-editor/accessors/UVEditor.js +7 -8
- package/examples/jsm/node-editor/core/BaseNode.js +89 -0
- package/examples/jsm/node-editor/core/DataFile.js +59 -0
- package/examples/jsm/node-editor/core/FileEditor.js +20 -0
- package/examples/jsm/node-editor/core/FileURLEditor.js +29 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +10 -9
- package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -1
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -1
- package/examples/jsm/node-editor/examples/matcap.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -1
- package/examples/jsm/node-editor/examples/rim.json +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +18 -13
- package/examples/jsm/node-editor/inputs/FloatEditor.js +8 -9
- package/examples/jsm/node-editor/inputs/SliderEditor.js +6 -7
- package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +9 -9
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +11 -11
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +12 -12
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +87 -0
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +102 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +31 -18
- package/examples/jsm/node-editor/math/AngleEditor.js +40 -0
- package/examples/jsm/node-editor/math/DotEditor.js +8 -9
- package/examples/jsm/node-editor/math/InvertEditor.js +8 -7
- package/examples/jsm/node-editor/math/LimiterEditor.js +28 -14
- package/examples/jsm/node-editor/math/NormalizeEditor.js +9 -7
- package/examples/jsm/node-editor/math/OperatorEditor.js +29 -16
- package/examples/jsm/node-editor/math/PowerEditor.js +20 -10
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +15 -9
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +7 -6
- package/examples/jsm/node-editor/scene/MeshEditor.js +99 -0
- package/examples/jsm/node-editor/scene/Object3DEditor.js +160 -0
- package/examples/jsm/node-editor/scene/PointsEditor.js +99 -0
- package/examples/jsm/node-editor/utils/JoinEditor.js +58 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +9 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
- package/examples/jsm/node-editor/utils/SplitEditor.js +39 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +7 -6
- package/examples/jsm/nodes/Nodes.js +283 -94
- package/examples/jsm/nodes/accessors/BufferNode.js +24 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +27 -196
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +103 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +58 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialNode.js +49 -11
- package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialReferenceNode.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelNode.js +8 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelViewProjectionNode.js +0 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +39 -99
- package/examples/jsm/{renderers/nodes → nodes}/accessors/Object3DNode.js +34 -17
- package/examples/jsm/{renderers/nodes → nodes}/accessors/PointUVNode.js +2 -2
- package/examples/jsm/nodes/accessors/PositionNode.js +41 -110
- package/examples/jsm/nodes/accessors/ReferenceNode.js +65 -0
- package/examples/jsm/nodes/accessors/ReflectNode.js +34 -121
- package/examples/jsm/nodes/accessors/SkinningNode.js +102 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +21 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +100 -0
- package/examples/jsm/nodes/accessors/UVNode.js +17 -43
- package/examples/jsm/nodes/accessors/UserDataNode.js +23 -0
- package/examples/jsm/nodes/core/ArrayUniformNode.js +23 -0
- package/examples/jsm/nodes/core/AttributeNode.js +33 -30
- package/examples/jsm/{renderers/nodes → nodes}/core/BypassNode.js +2 -2
- package/examples/jsm/{renderers/nodes → nodes}/core/CodeNode.js +2 -30
- package/examples/jsm/nodes/core/ConstNode.js +10 -106
- package/examples/jsm/{renderers/nodes → nodes}/core/ContextNode.js +17 -3
- package/examples/jsm/nodes/core/ExpressionNode.js +24 -7
- package/examples/jsm/nodes/core/FunctionCallNode.js +26 -67
- package/examples/jsm/nodes/core/FunctionNode.js +43 -216
- package/examples/jsm/nodes/core/InputNode.js +28 -60
- package/examples/jsm/nodes/core/InstanceIndexNode.js +21 -0
- package/examples/jsm/nodes/core/Node.js +228 -94
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeAttribute.js +2 -2
- package/examples/jsm/nodes/core/NodeBuilder.js +388 -560
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeCode.js +0 -0
- package/examples/jsm/nodes/core/NodeFrame.js +30 -23
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunction.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunctionInput.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeKeywords.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeParser.js +0 -0
- package/examples/jsm/nodes/core/NodeUniform.js +8 -6
- package/examples/jsm/nodes/core/NodeUtils.js +69 -37
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeVary.js +2 -2
- package/examples/jsm/{renderers/nodes → nodes}/core/PropertyNode.js +0 -0
- package/examples/jsm/nodes/core/TempNode.js +20 -112
- package/examples/jsm/nodes/core/UniformNode.js +46 -0
- package/examples/jsm/nodes/core/VarNode.js +58 -27
- package/examples/jsm/{renderers/nodes → nodes}/core/VaryNode.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
- package/examples/jsm/nodes/display/ColorSpaceNode.js +95 -0
- package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
- package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
- package/examples/jsm/nodes/fog/FogNode.js +31 -0
- package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
- package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +63 -0
- package/examples/jsm/nodes/lighting/AONode.js +25 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +37 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +65 -0
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +50 -0
- package/examples/jsm/nodes/lighting/LightingContextNode.js +75 -0
- package/examples/jsm/nodes/lighting/LightingNode.js +19 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +120 -0
- package/examples/jsm/nodes/lighting/PunctualLightNode.js +68 -0
- package/examples/jsm/nodes/loaders/NodeLoader.js +107 -0
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +42 -0
- package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -0
- package/examples/jsm/{renderers/nodes → nodes}/materials/LineBasicNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/Materials.js +65 -0
- package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +162 -22
- package/examples/jsm/nodes/materials/NodeMaterial.js +128 -113
- package/examples/jsm/{renderers/nodes → nodes}/materials/PointsNodeMaterial.js +13 -4
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +84 -16
- package/examples/jsm/nodes/math/CondNode.js +26 -95
- package/examples/jsm/nodes/math/MathNode.js +164 -187
- package/examples/jsm/nodes/math/OperatorNode.js +161 -41
- package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +2 -2
- package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeParser.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeFunction.js +20 -5
- package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeParser.js +0 -0
- package/examples/jsm/nodes/procedural/CheckerNode.js +16 -57
- package/examples/jsm/nodes/shadernode/ShaderNode.js +262 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +274 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +106 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
- package/examples/jsm/{renderers/nodes → nodes}/utils/ConvertNode.js +11 -3
- package/examples/jsm/nodes/utils/JoinNode.js +17 -89
- package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +32 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
- package/examples/jsm/{renderers/nodes → nodes}/utils/SplitNode.js +35 -4
- package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
- package/examples/jsm/nodes/utils/TimerNode.js +30 -65
- package/examples/jsm/objects/Lensflare.js +6 -6
- package/examples/jsm/objects/LightningStorm.js +4 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -9
- package/examples/jsm/objects/Reflector.js +8 -19
- package/examples/jsm/objects/ReflectorForSSRPass.js +2 -14
- package/examples/jsm/objects/Refractor.js +8 -19
- package/examples/jsm/objects/ShadowMesh.js +2 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/Water.js +3 -18
- package/examples/jsm/objects/Water2.js +2 -2
- package/examples/jsm/offscreen/jank.js +5 -5
- package/examples/jsm/offscreen/offscreen.js +1 -1
- package/examples/jsm/offscreen/scene.js +11 -11
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
- package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
- package/examples/jsm/postprocessing/BloomPass.js +48 -20
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +1 -9
- package/examples/jsm/postprocessing/GlitchPass.js +7 -6
- package/examples/jsm/postprocessing/LUTPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +8 -15
- package/examples/jsm/postprocessing/SAOPass.js +2 -9
- package/examples/jsm/postprocessing/SMAAPass.js +2 -11
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
- package/examples/jsm/postprocessing/SSAOPass.js +13 -25
- package/examples/jsm/postprocessing/SSRPass.js +3 -9
- package/examples/jsm/postprocessing/SavePass.js +1 -3
- package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
- package/examples/jsm/renderers/CSS2DRenderer.js +21 -19
- package/examples/jsm/renderers/CSS3DRenderer.js +39 -34
- package/examples/jsm/renderers/Projector.js +101 -128
- package/examples/jsm/renderers/SVGRenderer.js +4 -4
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +127 -23
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +14 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +5 -5
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +16 -10
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +8 -7
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +43 -0
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +14 -7
- package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -6
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +20 -20
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +2 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +49 -28
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +5 -8
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +23 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +38 -20
- package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
- package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
- package/examples/jsm/renderers/webgpu/constants.js +3 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +276 -278
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
- package/examples/jsm/shaders/BlendShader.js +2 -1
- package/examples/jsm/shaders/CopyShader.js +4 -3
- package/examples/jsm/shaders/DigitalGlitch.js +3 -3
- package/examples/jsm/shaders/FXAAShader.js +219 -1051
- package/examples/jsm/shaders/FreiChenShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +0 -1
- package/examples/jsm/shaders/SSAOShader.js +1 -1
- package/examples/jsm/shaders/SSRShader.js +3 -3
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +292 -22
- package/examples/jsm/utils/GPUStatsPanel.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +202 -0
- package/examples/jsm/utils/SceneUtils.js +76 -2
- package/examples/jsm/utils/SkeletonUtils.js +1 -1
- package/examples/jsm/utils/UVsDebug.js +23 -32
- package/examples/jsm/webxr/ARButton.js +14 -4
- package/examples/jsm/webxr/OculusHandPointerModel.js +3 -3
- package/examples/jsm/webxr/Text2D.js +1 -1
- package/examples/jsm/webxr/VRButton.js +39 -1
- package/examples/jsm/webxr/XREstimatedLight.js +2 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
- package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
- package/package.json +53 -25
- package/src/Three.Legacy.js +41 -1912
- package/src/Three.js +6 -3
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -3
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/PropertyBinding.js +8 -18
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/ArrayCamera.js +2 -3
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/CubeCamera.js +8 -1
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/constants.js +8 -18
- package/src/core/BufferAttribute.js +7 -12
- package/src/core/BufferGeometry.js +6 -6
- package/src/core/GLBufferAttribute.js +2 -2
- package/src/core/InstancedBufferAttribute.js +2 -2
- package/src/core/InstancedBufferGeometry.js +2 -2
- package/src/core/InstancedInterleavedBuffer.js +2 -2
- package/src/core/InterleavedBuffer.js +2 -2
- package/src/core/InterleavedBufferAttribute.js +5 -11
- package/src/core/Object3D.js +6 -3
- package/src/core/Raycaster.js +2 -2
- package/src/extras/DataUtils.js +127 -40
- package/src/extras/Earcut.js +2 -2
- package/src/extras/ImageUtils.js +63 -0
- package/src/extras/PMREMGenerator.js +152 -174
- package/src/extras/core/CurvePath.js +3 -3
- package/src/extras/core/ShapePath.js +5 -6
- package/src/extras/curves/ArcCurve.js +2 -2
- package/src/extras/curves/CatmullRomCurve3.js +2 -2
- package/src/extras/curves/CubicBezierCurve.js +2 -2
- package/src/extras/curves/CubicBezierCurve3.js +2 -2
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/extras/curves/LineCurve.js +2 -2
- package/src/extras/curves/LineCurve3.js +2 -1
- package/src/extras/curves/QuadraticBezierCurve.js +2 -2
- package/src/extras/curves/QuadraticBezierCurve3.js +2 -2
- package/src/extras/curves/SplineCurve.js +2 -2
- package/src/geometries/CapsuleGeometry.js +33 -0
- package/src/geometries/ExtrudeGeometry.js +2 -0
- package/src/geometries/Geometries.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/geometries/TorusKnotGeometry.js +2 -2
- package/src/geometries/WireframeGeometry.js +3 -2
- package/src/helpers/BoxHelper.js +2 -2
- package/src/helpers/PointLightHelper.js +1 -1
- package/src/helpers/SkeletonHelper.js +3 -2
- package/src/lights/AmbientLight.js +2 -2
- package/src/lights/AmbientLightProbe.js +2 -2
- package/src/lights/DirectionalLight.js +2 -2
- package/src/lights/DirectionalLightShadow.js +2 -2
- package/src/lights/HemisphereLight.js +4 -4
- package/src/lights/HemisphereLightProbe.js +2 -2
- package/src/lights/Light.js +4 -4
- package/src/lights/LightProbe.js +2 -2
- package/src/lights/PointLight.js +4 -4
- package/src/lights/PointLightShadow.js +2 -2
- package/src/lights/RectAreaLight.js +2 -2
- package/src/lights/SpotLight.js +4 -4
- package/src/lights/SpotLightShadow.js +2 -2
- package/src/loaders/FileLoader.js +23 -4
- package/src/loaders/ImageBitmapLoader.js +2 -2
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/LoaderUtils.js +1 -1
- package/src/loaders/MaterialLoader.js +8 -3
- package/src/loaders/ObjectLoader.js +23 -25
- package/src/materials/LineBasicMaterial.js +6 -13
- package/src/materials/LineDashedMaterial.js +2 -15
- package/src/materials/Material.js +49 -15
- package/src/materials/Materials.js +66 -18
- package/src/materials/MeshBasicMaterial.js +6 -31
- package/src/materials/MeshDepthMaterial.js +2 -22
- package/src/materials/MeshDistanceMaterial.js +2 -22
- package/src/materials/MeshLambertMaterial.js +6 -34
- package/src/materials/MeshMatcapMaterial.js +6 -28
- package/src/materials/MeshNormalMaterial.js +2 -26
- package/src/materials/MeshPhongMaterial.js +6 -48
- package/src/materials/MeshPhysicalMaterial.js +32 -35
- package/src/materials/MeshStandardMaterial.js +6 -54
- package/src/materials/MeshToonMaterial.js +6 -38
- package/src/materials/PointsMaterial.js +6 -15
- package/src/materials/RawShaderMaterial.js +2 -2
- package/src/materials/ShaderMaterial.js +3 -17
- package/src/materials/ShadowMaterial.js +6 -8
- package/src/materials/SpriteMaterial.js +6 -12
- package/src/math/Box2.js +2 -2
- package/src/math/Box3.js +29 -15
- package/src/math/Color.js +85 -36
- package/src/math/ColorManagement.js +74 -0
- package/src/math/Euler.js +16 -14
- package/src/math/Interpolant.js +4 -9
- package/src/math/MathUtils.js +76 -7
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +2 -3
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +12 -3
- package/src/math/Spherical.js +1 -1
- package/src/math/SphericalHarmonics3.js +2 -2
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +12 -3
- package/src/math/Vector4.js +2 -2
- package/src/math/interpolants/DiscreteInterpolant.js +1 -1
- package/src/objects/Bone.js +2 -2
- package/src/objects/Group.js +2 -2
- package/src/objects/InstancedMesh.js +4 -4
- package/src/objects/Line.js +76 -107
- package/src/objects/LineLoop.js +2 -2
- package/src/objects/LineSegments.js +15 -23
- package/src/objects/Mesh.js +82 -104
- package/src/objects/Points.js +32 -54
- package/src/objects/SkinnedMesh.js +5 -8
- package/src/objects/Sprite.js +4 -4
- package/src/renderers/WebGL3DRenderTarget.js +22 -0
- package/src/renderers/WebGLArrayRenderTarget.js +22 -0
- package/src/renderers/WebGLCubeRenderTarget.js +7 -16
- package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
- package/src/renderers/WebGLRenderTarget.js +19 -18
- package/src/renderers/WebGLRenderer.js +112 -133
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +12 -13
- package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +107 -0
- package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -7
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +25 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -7
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +25 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +43 -5
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +1 -9
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +16 -31
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
- package/src/renderers/shaders/ShaderChunk.js +6 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -2
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +8 -2
- package/src/renderers/shaders/UniformsLib.js +2 -2
- package/src/renderers/webgl/WebGLAttributes.js +6 -6
- package/src/renderers/webgl/WebGLBackground.js +5 -2
- package/src/renderers/webgl/WebGLBindingStates.js +57 -29
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
- package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
- package/src/renderers/webgl/WebGLGeometries.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +0 -1
- package/src/renderers/webgl/WebGLMaterials.js +72 -187
- package/src/renderers/webgl/WebGLMorphtargets.js +59 -23
- package/src/renderers/webgl/WebGLProgram.js +56 -30
- package/src/renderers/webgl/WebGLPrograms.js +80 -130
- package/src/renderers/webgl/WebGLShaderCache.js +4 -3
- package/src/renderers/webgl/WebGLShadowMap.js +6 -8
- package/src/renderers/webgl/WebGLState.js +83 -2
- package/src/renderers/webgl/WebGLTextures.js +618 -375
- package/src/renderers/webgl/WebGLUniforms.js +79 -80
- package/src/renderers/webgl/WebGLUtils.js +97 -30
- package/src/renderers/webxr/WebXRManager.js +64 -47
- package/src/scenes/Fog.js +2 -2
- package/src/scenes/FogExp2.js +2 -2
- package/src/scenes/Scene.js +2 -2
- package/src/textures/CanvasTexture.js +2 -2
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/CubeTexture.js +2 -2
- package/src/textures/{DataTexture3D.js → Data3DTexture.js} +4 -4
- package/src/textures/{DataTexture2DArray.js → DataArrayTexture.js} +4 -4
- package/src/textures/DataTexture.js +2 -5
- package/src/textures/DepthTexture.js +5 -5
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +123 -0
- package/src/textures/Texture.js +29 -98
- package/src/textures/VideoTexture.js +2 -4
- package/src/utils.js +15 -1
- package/examples/js/WebGL.js +0 -90
- package/examples/js/csm/Frustum.js +0 -133
- package/examples/js/deprecated/Geometry.js +0 -1656
- package/examples/js/loaders/VRMLoader.js +0 -72
- package/examples/js/objects/ReflectorRTT.js +0 -16
- package/examples/js/postprocessing/SSRrPass.js +0 -494
- package/examples/js/shaders/SSRrShader.js +0 -336
- package/examples/js/utils/RoughnessMipmapper.js +0 -268
- package/examples/jsm/deprecated/Geometry.js +0 -1869
- package/examples/jsm/libs/opentype.module.min.js +0 -119
- package/examples/jsm/loaders/NodeMaterialLoader.js +0 -263
- package/examples/jsm/loaders/VRMLoader.js +0 -78
- package/examples/jsm/nodes/accessors/ColorsNode.js +0 -56
- package/examples/jsm/nodes/accessors/LightNode.js +0 -60
- package/examples/jsm/nodes/accessors/ResolutionNode.js +0 -64
- package/examples/jsm/nodes/accessors/ScreenUVNode.js +0 -64
- package/examples/jsm/nodes/core/NodeLib.js +0 -64
- package/examples/jsm/nodes/core/StructNode.js +0 -106
- package/examples/jsm/nodes/effects/BlurNode.js +0 -171
- package/examples/jsm/nodes/effects/ColorAdjustmentNode.js +0 -140
- package/examples/jsm/nodes/effects/LuminanceNode.js +0 -75
- package/examples/jsm/nodes/inputs/BoolNode.js +0 -51
- package/examples/jsm/nodes/inputs/ColorNode.js +0 -58
- package/examples/jsm/nodes/inputs/CubeTextureNode.js +0 -108
- package/examples/jsm/nodes/inputs/FloatNode.js +0 -51
- package/examples/jsm/nodes/inputs/IntNode.js +0 -51
- package/examples/jsm/nodes/inputs/Matrix3Node.js +0 -63
- package/examples/jsm/nodes/inputs/Matrix4Node.js +0 -63
- package/examples/jsm/nodes/inputs/PropertyNode.js +0 -47
- package/examples/jsm/nodes/inputs/RTTNode.js +0 -157
- package/examples/jsm/nodes/inputs/ReflectorNode.js +0 -90
- package/examples/jsm/nodes/inputs/ScreenNode.js +0 -28
- package/examples/jsm/nodes/inputs/TextureNode.js +0 -116
- package/examples/jsm/nodes/inputs/Vector2Node.js +0 -57
- package/examples/jsm/nodes/inputs/Vector3Node.js +0 -58
- package/examples/jsm/nodes/inputs/Vector4Node.js +0 -59
- package/examples/jsm/nodes/materials/BasicNodeMaterial.js +0 -26
- package/examples/jsm/nodes/materials/PhongNodeMaterial.js +0 -36
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +0 -40
- package/examples/jsm/nodes/materials/nodes/BasicNode.js +0 -154
- package/examples/jsm/nodes/materials/nodes/MeshStandardNode.js +0 -116
- package/examples/jsm/nodes/materials/nodes/PhongNode.js +0 -409
- package/examples/jsm/nodes/materials/nodes/RawNode.js +0 -62
- package/examples/jsm/nodes/materials/nodes/SpriteNode.js +0 -236
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +0 -609
- package/examples/jsm/nodes/misc/BumpMapNode.js +0 -163
- package/examples/jsm/nodes/misc/NormalMapNode.js +0 -138
- package/examples/jsm/nodes/misc/TextureCubeNode.js +0 -86
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +0 -280
- package/examples/jsm/nodes/postprocessing/NodePass.js +0 -93
- package/examples/jsm/nodes/postprocessing/NodePostProcessing.js +0 -148
- package/examples/jsm/nodes/procedural/Fractal3DNode.js +0 -104
- package/examples/jsm/nodes/procedural/Noise2DNode.js +0 -149
- package/examples/jsm/nodes/procedural/Noise3DNode.js +0 -141
- package/examples/jsm/nodes/utils/BypassNode.js +0 -85
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +0 -154
- package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
- package/examples/jsm/nodes/utils/RemapNode.js +0 -155
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
- package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
- package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
- package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
- package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
- package/examples/jsm/objects/ReflectorRTT.js +0 -15
- package/examples/jsm/postprocessing/SSRrPass.js +0 -579
- package/examples/jsm/renderers/nodes/Nodes.js +0 -164
- package/examples/jsm/renderers/nodes/ShaderNode.js +0 -346
- package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
- package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +0 -32
- package/examples/jsm/renderers/nodes/core/FunctionCallNode.js +0 -67
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +0 -87
- package/examples/jsm/renderers/nodes/core/InputNode.js +0 -66
- package/examples/jsm/renderers/nodes/core/Node.js +0 -104
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +0 -633
- package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
- package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
- package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
- package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +0 -133
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
- package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -79
- package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
- package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
- package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
- package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
- package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
- package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
- package/examples/jsm/renderers/nodes/math/MathNode.js +0 -241
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +0 -42
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
- package/examples/jsm/shaders/SSRrShader.js +0 -307
- package/examples/jsm/utils/RoughnessMipmapper.js +0 -288
- package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
|
@@ -12,11 +12,11 @@ function __flow__addCSS( css ) {
|
|
|
12
12
|
style.innerHTML = css;
|
|
13
13
|
document.head.appendChild( style );
|
|
14
14
|
|
|
15
|
-
} catch( e ) {}
|
|
15
|
+
} catch ( e ) {}
|
|
16
16
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
__flow__addCSS( `@keyframes f-animation-open { 0% { transform: scale(.5); opacity: 0; } 100% { transform: scale(1); opacity: 1; }}f-canvas,f-canvas canvas { position: absolute; top: 0; left: 0; margin: 0; padding: 0; width: 100%; height: 100%; -webkit-touch-callout: none; }f-canvas { overflow: auto; cursor: grab;}f-canvas canvas.front { z-index: 10;}body.dragging f-canvas,body.connecting f-canvas { overflow: hidden !important;}body.dragging *:not(.drag) { pointer-events: none !important;}f-canvas.grabbing * { cursor: grabbing; user-select: none;}f-canvas canvas { position: fixed; overflow: hidden; pointer-events: none;}f-canvas::-webkit-scrollbar { width: 8px; height: 8px;}f-canvas::-webkit-scrollbar-thumb:hover{ background: #014fc5;}f-canvas::-webkit-scrollbar-track { background: #363636;}f-canvas::-webkit-scrollbar-thumb { background-color: #666666; border-radius: 10px; border: 0;}f-canvas f-content,f-canvas f-area { position: absolute; display: block;}f-node { position: absolute; margin: 0; padding: 0; user-select: none; width: 320px; z-index: 1; cursor: auto; filter: drop-shadow(0 0 10px #00000061); backdrop-filter: blur(4px);}f-node.selected { z-index: 2;}f-node.selected,f-canvas.dragging-rio f-node:hover,f-canvas.dragging-lio f-node:hover { filter: drop-shadow(0 0 10px #00000061) drop-shadow(0 0 8px #4444dd);}f-node.closed f-element:not(:first-child) { display: none;}f-node.center { top: 50%; left: 50%; transform: translate( -50%, -50% );}f-node.top-right { top: 0; right: 0;}f-node.top-center { top: 0; left: 50%; transform: translateX( -50% );}f-node.top-left { top: 0; left: 0;}f-node { transition: filter 0.2s ease;}f-node { animation: .2s f-animation-open 1 alternate ease-out;}f-drop,f-menu,f-menu button,f-element,f-element input,f-element select,f-element button,f-element textarea { font-family: 'Open Sans', sans-serif; font-size: 13px; text-transform: capitalize; color: #eeeeee; outline: solid 0px #000; letter-spacing: .2px; margin: 0; padding: 0; border: 0; user-select: none; -webkit-tap-highlight-color: transparent; transition: background 0.2s ease;}f-element input { transition: background 0.1s ease;}f-element input,f-element select,f-element button,f-element textarea { background-color: #242427;}f-element { position: relative; width: calc( 100% - 14px ); background: rgba(45, 45, 48, 0.95); pointer-events: auto; border-bottom: 2px solid #232323; display: flex; padding-left: 7px; padding-right: 7px; padding-top: 2px; padding-bottom: 2px;}f-element { height: 24px;}f-element input { margin-top: 2px; margin-bottom: 2px; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%); margin-left: 2px; margin-right: 2px; width: 100%; padding-left: 4px; padding-right: 4px;}f-element input.number { cursor: col-resize;}f-element input:focus[type='text'], f-element input:focus[type='range'], f-element input:focus[type='color'] { background: rgba( 0, 0, 0, 0.6 ); outline: solid 1px rgba( 0, 80, 200, 0.98 );}f-element input[type='color'] { appearance: none; padding: 0; margin-left: 2px; margin-right: 2px; height: calc( 100% - 4px ); margin-top: 2px; border: none; }f-element input[type='color']::-webkit-color-swatch-wrapper { padding: 2px;}f-element input[type='color']::-webkit-color-swatch { border: none; cursor: alias;}f-element input[type='range'] { appearance: none; width: 100%; overflow: hidden; padding: 0; cursor: ew-resize;}f-element input[type='range']::-webkit-slider-runnable-track { appearance: none; height: 10px; color: #13bba4; margin: 0;}f-element input[type='range']::-webkit-slider-thumb { appearance: none; width: 0; background: #434343; box-shadow: -500px 0 0 500px rgba( 0, 120, 255, 0.98 ); border-radius: 50%; border: 0 !important;}f-element input[type='range']::-webkit-slider-runnable-track { margin-left: -4px; margin-right: -5px;}f-element input[type='checkbox'] { appearance: none; cursor: pointer;}f-element input[type='checkbox'].toggle { height: 20px; width: 45px; border-radius: 16px; display: inline-block; position: relative; margin: 0; margin-top: 2px; background: linear-gradient( 0deg, #292929 0%, #0a0a0ac2 100% ); transition: all 0.2s ease;}f-element input[type='checkbox'].toggle:after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: white; box-shadow: 0 1px 2px rgba(44, 44, 44, 0.2); transition: all 0.2s cubic-bezier(0.5, 0.1, 0.75, 1.35);}f-element input[type='checkbox'].toggle:checked { background: linear-gradient( 0deg, #0177fb 0%, #0177fb 100% );}f-element input[type='checkbox'].toggle:checked:after { transform: translatex(25px);}f-element.auto-height { display: table;}f-element textarea { width: calc( 100% - 18px ); padding-top: 1px; padding-bottom: 3px; padding-left: 3px; padding-right: 8px; margin-top: 2px; margin-left: 2px; height: calc( 100% - 8px ); max-height: 300px; border-radius: 2px; resize: none; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%);}f-element.auto-height textarea { resize: auto;}f-element select { width: 100%; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; padding-left: 5px; cursor: pointer; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%);}f-element f-toolbar { position: absolute; display: flex; top: 0; width: 100%; height: 100%; align-content: space-around;}f-element.output-right f-toolbar { right: 7px; float: right; justify-content: end;}f-element f-toolbar { margin-top: auto; margin-bottom: auto; margin-left: 3px; margin-right: 3px; font-size: 18px; line-height: 18px;}f-element f-toolbar button { opacity: .7; cursor: pointer; font-size: 14px; width: unset; height: unset; border-radius: unset; border: unset; outline: 0; background-color: unset; box-shadow: unset;}f-element f-toolbar button:hover,f-element f-toolbar button:active { opacity: 1; border: 0; background-color: unset;}f-element input.range-value { width: 60px; text-align: center;}f-menu.context button,f-element button { width: 100%; height: calc( 100% - 4px ); margin-left: 2px; margin-right: 2px; margin-top: 2px; border-radius: 3px; cursor: pointer;}f-element button { box-shadow: inset 1px 1px 1px 0 rgb(255 255 255 / 17%), inset -2px -2px 2px 0 rgb(0 0 0 / 26%);}f-element button:hover { color: #fff; background-color: #2a2a2a;}f-element button:active { border: 1px solid rgba( 0, 120, 255, 0.98 );}f-element f-inputs,f-element f-subinputs { display: flex; width: 100%;}f-element f-inputs { left: 100px; top: 50%; transform: translateY(-50%); position: absolute; width: calc( 100% - 106px ); height: calc( 100% - 4px ); z-index: 1;}f-element.inputs-disable f-inputs { filter: grayscale(100%); opacity: .5;}f-element.inputs-disable f-inputs input { pointer-events: none;}f-element f-label,f-element span { margin: auto; text-shadow: 1px 1px 0px #0007;}f-element f-label { padding-left: 4px; white-space: nowrap; position: absolute; top: 50%; transform: translateY(-50%); width: calc( 100% - 20px );}f-element.right f-label { text-align: right;}f-element f-label i { float: left; font-size: 18px; margin-right: 6px;}f-element f-label.center { width: 100%; text-align: center; display: block;}f-element.title { height: 29px; background-color: #3a3a3ab0; background-color: #3b3b43ed; cursor: all-scroll; border-top-left-radius: 6px; border-top-right-radius: 6px;}f-element.blue { background-color: #014fc5;}f-element.red { background-color: #bd0b0b;}f-element.green { background-color: #148d05;}f-element.yellow { background-color: #d6b100;}f-element.title.left { text-align: left; display: inline-grid; justify-content: start;}f-element.title span { text-align: center; font-size: 15px; padding-top: 2px;}f-element.title i { font-size: 18px; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); opacity: .5;}f-element.output-right.title i { left: 10px; right: unset;}f-element.title.left span { text-align: left;}f-element f-io { border: 2px solid #dadada; width: 7px; height: 7px; position: absolute; background: #242427; border-radius: 8px; float: left; left: -7px; top: calc( 50% - 5px ); cursor: alias; box-shadow: 0 0 3px 2px #0000005e; z-index: 1;}f-element f-io.connect,f-canvas.dragging-rio f-element:hover f-io.lio,f-canvas.dragging-lio f-element:hover f-io.rio { border: 2px solid #0177fb; zoom: 1.4;}f-node.io-connect f-io:not(.connect) { border: 2px solid #dadada !important; zoom: 1 !important;}f-element f-io.rio { float: right; right: -7px; left: unset;}f-element f-disconnect { position: absolute; left: -35px; top: 50%; font-size: 22px; transform: translateY( -50% ); filter: drop-shadow(0 0 5px #000); text-shadow: 0px 0px 5px black; cursor: pointer;}f-element.output-right f-disconnect { right: -35px; left: unset;}f-element f-disconnect:hover { color: #ff3300;}f-element textarea::-webkit-scrollbar { width: 6px;}f-element textarea::-webkit-scrollbar-track { background: #111; } f-element textarea::-webkit-scrollbar-thumb { background: #0177fb; }f-element textarea::-webkit-scrollbar-thumb:hover { background: #1187ff; }f-element.small { height: 18px;}f-element.large { height: 36px;}body.connecting f-node:not(.io-connect) f-element:hover,f-element.select { background-color: rgba(61, 70, 82, 0.98);}f-drop { width: 100%; height: 100%; position: sticky; left: 0; top: 0; background: #02358417; text-align: center; justify-content: center; align-items: center; display: flex; box-shadow: inset 0 0 20px 10px #464ace17; pointer-events: none; transition: all .07s; opacity: 0; visibility: hidden;}f-drop.visible { visibility: unset; opacity: unset; transition: all .23s;}f-drop span { opacity: .5; font-size: 40px; text-shadow: 0px 0px 5px #000; font-weight: bold;}f-tooltip { pointer-events: none;}f-tooltip { position: absolute; left: 0; top: 0; background: rgba(0,0,0,.8); backdrop-filter: blur(4px); font-size: 14px; padding: 7px; border-radius: 10px; top: 50%; transform: translateY(-50%); visibility: hidden; pointer-events: none; opacity: 0; transition: all 0.3s ease; z-index: 150; white-space: nowrap;}f-menu.context { position: absolute; width: 170px; padding: 2px; margin: 0; background: #17171794; z-index: 110; font-size: 12px; border-radius: 6px; backdrop-filter: blur(6px); border: 1px solid #7e7e7e45; box-shadow: 3px 3px 6px rgba(0,0,0,.2); transition: opacity 0.2s ease, transform 0.1s ease;}f-menu.context.hidden { visibility: hidden; opacity: 0;}f-menu.context f-item { display: block; position: relative; margin: 0; padding: 0; white-space: nowrap;}f-menu.context f-item.submenu::after { content: ""; position: absolute; right: 6px; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); border: 5px solid transparent; border-left-color: #808080;}f-menu.context f-item:hover > f-menu,f-menu.context f-item.active > f-menu { visibility: unset; transform: unset; opacity: unset;}f-menu.context f-menu { top: 0px; left: calc( 100% - 4px );}f-menu.context f-item button { overflow: visible; display: block; width: calc( 100% - 6px ); text-align: left; cursor: pointer; white-space: nowrap; padding: 6px 8px; border-radius: 3px; background: #2d2d32; border: 0; color: #ddd; margin: 3px; text-shadow: 1px 1px 0px #0007;}f-menu.context f-item button i { float: left; font-size: 16px;}f-menu.context f-item button span { margin-left: 6px;}f-menu.context f-item:hover > button,f-menu.context f-item.active > button { color: #fff; background: #313136;}f-menu.context f-item button:active { outline: solid 1px rgba( 0, 80, 200, 0.98 );}f-menu.context f-item f-tooltip { margin-left: 120px;}f-menu.circle { position: absolute; left: 30px; top: 30px; z-index: 100;}f-menu.circle f-item { display: flex; justify-content: end; align-content: space-around; margin-bottom: 12px;}f-menu.circle f-item button { width: 50px; height: 50px; font-size: 26px; background: #17171794; border-radius: 50%; backdrop-filter: blur(6px); border: 1px solid #7e7e7e45; line-height: 100%; cursor: pointer; box-shadow: 3px 3px 6px rgba(0,0,0,.2);}f-menu.circle f-item f-tooltip { margin-left: 50px;}.f-rounded f-node f-element,.f-rounded f-node f-element.title.left { border-radius: 10px 5px 10px 5px;}.f-rounded f-node f-element input, .f-rounded f-node f-element select,.f-rounded f-node f-element button,.f-rounded f-node f-element textarea,.f-rounded f-node f-element input[type='checkbox'].toggle,.f-rounded f-node f-element input[type='checkbox'].toggle:after { border-radius: 20px 10px;}.f-rounded f-node f-element input { padding-left: 7px; padding-right: 7px;}.f-rounded f-menu.context,.f-rounded f-menu.context f-item button { border-radius: 20px 10px;}@media (hover: hover) and (pointer: fine) { f-node:not(.selected):hover { filter: drop-shadow(0 0 6px #66666630); } f-element f-toolbar { visibility: hidden; opacity: 0; transition: opacity 0.2s ease; } f-node:hover > f-element f-toolbar { visibility: visible; opacity: 1; } f-element f-io:hover { border: 2px solid #0177fb; zoom: 1.4; } f-menu.circle f-item button:hover { background-color: #2a2a2a; } f-menu.circle f-item button:hover > f-tooltip, f-menu.context f-item button:hover > f-tooltip { visibility: visible; transform: translate(10px, -50%); opacity: 1; } f-menu.circle f-item button:focus > f-tooltip, f-menu.context f-item button:focus > f-tooltip { visibility: hidden; opacity: 0; }}f-canvas { will-change: top, left;}f-node { will-change: transform !important;}` );
|
|
19
|
+
__flow__addCSS( `@keyframes f-animation-open { 0% { transform: scale(.5); opacity: 0; } 100% { transform: scale(1); opacity: 1; }}f-canvas,f-canvas canvas { position: absolute; top: 0; left: 0; margin: 0; padding: 0; width: 100%; height: 100%; -webkit-touch-callout: none; }f-canvas { overflow: auto; cursor: grab;}f-canvas canvas.front { z-index: 10;}body.dragging *:not(.drag) { pointer-events: none !important;}f-canvas.grabbing * { cursor: grabbing; user-select: none;}f-canvas canvas { position: fixed; overflow: hidden; pointer-events: none;}f-canvas::-webkit-scrollbar { width: 8px; height: 8px;}f-canvas::-webkit-scrollbar-thumb:hover{ background: #014fc5;}f-canvas::-webkit-scrollbar-track { background: #363636;}f-canvas::-webkit-scrollbar-thumb { background-color: #666666; border-radius: 10px; border: 0;}f-canvas f-content,f-canvas f-area { position: absolute; display: block;}f-node { position: absolute; margin: 0; padding: 0; user-select: none; width: 320px; z-index: 1; cursor: auto; filter: drop-shadow(0 0 10px #00000061); backdrop-filter: blur(4px);}f-node.selected { z-index: 2;}f-node.selected,f-canvas.dragging-rio f-node:hover,f-canvas.dragging-lio f-node:hover { filter: drop-shadow(0 0 10px #00000061) drop-shadow(0 0 8px #4444dd);}f-node.closed f-element:not(:first-child) { display: none;}f-node.center { top: 50%; left: 50%; transform: translate( -50%, -50% );}f-node.top-right { top: 0; right: 0;}f-node.top-center { top: 0; left: 50%; transform: translateX( -50% );}f-node.top-left { top: 0; left: 0;}f-node { transition: filter 0.2s ease;}f-node { animation: .2s f-animation-open 1 alternate ease-out;}f-tips,f-drop,f-menu,f-menu input,f-menu button,f-element,f-element input,f-element select,f-element button,f-element textarea { font-family: 'Open Sans', sans-serif; font-size: 13px; text-transform: capitalize; color: #eeeeee; outline: solid 0px #000; margin: 0; padding: 0; border: 0; user-select: none; -webkit-tap-highlight-color: transparent; transition: background 0.2s ease, filter 0.2s ease;}f-element input:read-only { color: #666;}f-element input,f-element textarea { text-transform: initial;}f-element input { transition: background 0.1s ease;}f-element input,f-element select,f-element button,f-element textarea { background-color: #232324d1;}f-element { position: relative; width: calc( 100% - 14px ); background: rgba(45, 45, 48, 0.95); pointer-events: auto; border-bottom: 2px solid #232323; display: flex; padding-left: 7px; padding-right: 7px; padding-top: 2px; padding-bottom: 2px;}f-element:after,f-element:before { transition: opacity .17s; opacity: 0; content: '';}f-element[tooltip]:hover:after,f-element[tooltip]:focus-within:after { font-size: 14px !important; display: flex; justify-content: center; position: fixed; margin-left: -7px; width: calc( 100% ); background: #1d1d1de8; border: 1px solid #444444a1; border-radius: 6px; color: #dadada; content: attr( tooltip ); margin-top: -41px; font-size: 16px; padding-top: 3px; padding-bottom: 3px; z-index: 10; opacity: 1; backdrop-filter: blur(4px); white-space: nowrap; overflow: hidden; text-shadow: 1px 1px 0px #0007;}f-element[tooltip]:hover:before,f-element[tooltip]:focus-within:before { border: solid; border-color: #1d1d1de8 transparent; border-width: 12px 6px 0 6px; left: calc( 50% - 6px ); bottom: 30px; position: absolute; opacity: 1; z-index: 11;}f-element[error] { background-color: #ff0000;}f-element[error]:hover:after,f-element[error]:focus-within:after { border: none; background-color: #ff0000bb; filter: drop-shadow( 2px 2px 5px #000 ); color: #fff;}f-element[error]:hover:before,f-element[error]:focus-within:before { border-color: #ff0000bb transparent;}f-element { height: 24px;}f-element input { margin-top: 2px; margin-bottom: 2px; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%); margin-left: 2px; margin-right: 2px; width: 100%; padding-left: 4px; padding-right: 4px;}f-element input.number { cursor: col-resize;}f-element input:focus[type='text'], f-element input:focus[type='range'], f-element input:focus[type='color'] { background: rgba( 0, 0, 0, 0.6 ); outline: solid 1px rgba( 0, 80, 200, 0.98 );}f-element input[type='color'] { appearance: none; padding: 0; margin-left: 2px; margin-right: 2px; height: calc( 100% - 4px ); margin-top: 2px; border: none;}f-element input[type='color']::-webkit-color-swatch-wrapper { padding: 2px;}f-element input[type='color']::-webkit-color-swatch { border: none; cursor: alias;}f-element input[type='range'] { appearance: none; width: 100%; overflow: hidden; padding: 0; cursor: ew-resize;}f-element input[type='range']::-webkit-slider-runnable-track { appearance: none; height: 10px; color: #13bba4; margin: 0;}f-element input[type='range']::-webkit-slider-thumb { appearance: none; width: 0; background: #434343; box-shadow: -500px 0 0 500px rgba( 0, 120, 255, 0.98 ); border-radius: 50%; border: 0 !important;}f-element input[type='range']::-webkit-slider-runnable-track { margin-left: -4px; margin-right: -5px;}f-element input[type='checkbox'] { appearance: none; cursor: pointer;}f-element input[type='checkbox'].toggle { height: 20px; width: 45px; border-radius: 16px; display: inline-block; position: relative; margin: 0; margin-top: 2px; background: linear-gradient( 0deg, #292929 0%, #0a0a0ac2 100% ); transition: all 0.2s ease;}f-element input[type='checkbox'].toggle:after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: white; box-shadow: 0 1px 2px rgba(44, 44, 44, 0.2); transition: all 0.2s cubic-bezier(0.5, 0.1, 0.75, 1.35);}f-element input[type='checkbox'].toggle:checked { background: linear-gradient( 0deg, #0177fb 0%, #0177fb 100% );}f-element input[type='checkbox'].toggle:checked:after { transform: translatex(25px);}f-element.auto-height { display: table;}f-element textarea { width: calc( 100% - 18px ); padding-top: 1px; padding-bottom: 3px; padding-left: 3px; padding-right: 8px; margin-top: 2px; margin-left: 2px; height: calc( 100% - 8px ); max-height: 300px; border-radius: 2px; resize: none; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%);}f-element.auto-height textarea { resize: auto;}f-element select { width: 100%; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; cursor: pointer; box-shadow: inset 0px 1px 1px rgb(0 0 0 / 20%), 0px 1px 0px rgb(255 255 255 / 5%);}f-element f-toolbar { position: absolute; display: flex; top: 0; width: 100%; height: 100%; align-content: space-around;}f-element.input-right f-toolbar { right: 7px; float: right; justify-content: end;}f-element f-toolbar { margin-top: auto; margin-bottom: auto; margin-left: 3px; margin-right: 3px; font-size: 18px; line-height: 18px;}f-element f-toolbar button { opacity: .7; cursor: pointer; font-size: 14px; width: unset; height: unset; border-radius: unset; border: unset; outline: 0; background-color: unset; box-shadow: unset;}f-element f-toolbar button:hover,f-element f-toolbar button:active { opacity: 1; border: 0; background-color: unset;}f-element input.range-value { width: 60px; text-align: center;}f-menu.context button,f-element button { width: 100%; height: calc( 100% - 4px ); margin-left: 2px; margin-right: 2px; margin-top: 2px; border-radius: 3px; cursor: pointer;}f-element button { box-shadow: inset 1px 1px 1px 0 rgb(255 255 255 / 17%), inset -2px -2px 2px 0 rgb(0 0 0 / 26%);}f-element button:hover { color: #fff; background-color: #2a2a2a;}f-element button:active { border: 1px solid rgba( 0, 120, 255, 0.98 );}f-element f-inputs,f-element f-subinputs { display: flex; justify-content: flex-end; width: 100%;}f-element f-inputs { left: 100px; top: 50%; transform: translateY(-50%); position: absolute; width: calc( 100% - 106px ); height: calc( 100% - 4px ); z-index: 1;}f-element.inputs-disable f-inputs { filter: grayscale(100%); opacity: .5;}f-element.inputs-disable f-inputs input { pointer-events: none;}f-element f-label,f-element span { margin: auto; text-shadow: 1px 1px 0px #0007;}f-element f-label { padding-left: 4px; white-space: nowrap; position: absolute; top: 50%; transform: translateY(-50%); width: calc( 100% - 20px );}f-element.right f-label { text-align: right;}f-element.center f-label { text-align: center;}f-element f-label i { float: left; font-size: 18px; margin-right: 6px;}f-element f-label.center { width: 100%; text-align: center; display: block;}f-element.title { height: 29px; background-color: #3a3a3ab0; background-color: #3b3b43ed; cursor: all-scroll; border-top-left-radius: 6px; border-top-right-radius: 6px;}f-element.blue { background-color: #014fc5;}f-element.red { background-color: #bd0b0b;}f-element.green { background-color: #148d05;}f-element.yellow { background-color: #d6b100;}f-element.title.left { text-align: left; display: inline-grid; justify-content: start;}f-element.title span { text-align: center; font-size: 15px; padding-top: 2px;}f-element.title i { font-size: 18px; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); opacity: .5;}f-element.title f-toolbar i { font-size: 20px; right: unset; left: 0px;}f-element.input-right.title i { left: 10px; right: unset;}f-element.title.left span { text-align: left;}f-element f-io { border: 2px solid #dadada; width: 7px; height: 7px; position: absolute; background: #242427; border-radius: 8px; float: left; left: -7px; top: calc( 50% - 5px ); cursor: alias; box-shadow: 0 0 3px 2px #0000005e; z-index: 1;}f-element f-io.connect,f-canvas.dragging-rio f-element:hover f-io.lio,f-canvas.dragging-lio f-element:hover f-io.rio { zoom: 1.4;}f-node.io-connect f-io:not(.connect) { border: 2px solid #dadada !important; zoom: 1 !important;}f-element f-io.rio { float: right; right: -7px; left: unset;}f-element f-disconnect { position: absolute; left: -35px; top: 50%; font-size: 22px; transform: translateY( -50% ); filter: drop-shadow(0 0 5px #000); text-shadow: 0px 0px 5px black; cursor: pointer; transition: all .2s;}f-element.input-right f-disconnect { right: -35px; left: unset;}f-element f-disconnect:hover { color: #ff3300;}f-element textarea::-webkit-scrollbar { width: 6px;}f-element textarea::-webkit-scrollbar-track { background: #111; } f-element textarea::-webkit-scrollbar-thumb { background: #0177fb; }f-element textarea::-webkit-scrollbar-thumb:hover { background: #1187ff; }f-element.small { height: 18px;}f-element.large { height: 36px;}body.connecting f-node:not(.io-connect) f-element:hover,f-element.select { background-color: rgba(61, 70, 82, 0.98);}f-element.invalid > f-io { zoom: 1 !important;}f-element.invalid::after { font-size: 14px !important; display: flex; justify-content: center; align-items:center; margin: auto; position: absolute; width: 100%; height: 100%; background: #bd0b0b77; vertical-align: middle; color: #fff; content: 'Not Compatible'; opacity: .95; backdrop-filter: grayscale(100%); white-space: nowrap; overflow: hidden; left: 0; top: 0; text-transform: initial;}f-element.invalid > f-inputs,f-element.invalid > f-label { opacity: .1;}f-drop { width: 100%; height: 100%; position: sticky; left: 0; top: 0; background: #02358417; text-align: center; justify-content: center; align-items: center; display: flex; box-shadow: inset 0 0 20px 10px #464ace17; pointer-events: none; transition: all .07s; opacity: 0; visibility: hidden;}f-drop.visible { visibility: unset; opacity: unset; transition: all .23s;}f-drop span { opacity: .5; font-size: 40px; text-shadow: 0px 0px 5px #000; font-weight: bold;}f-tooltip { pointer-events: none;}f-tooltip { position: absolute; left: 0; top: 0; background: rgba(0,0,0,.8); backdrop-filter: blur(4px); font-size: 14px; padding: 7px; left: 50%; border-radius: 10px; transform: translateX(-50%); visibility: hidden; pointer-events: none; opacity: 0; transition: all 0.3s ease; z-index: 150; white-space: nowrap;}f-menu.context,f-menu.search { position: absolute;}f-menu.context { width: 170px; z-index: 110;}f-menu.search { bottom: 85px; left: 50%; transform: translateX(-50%); z-index: 10; width: 300px;}f-menu.context f-list { display: block; margin: 0; background: #171717e6; font-size: 12px; border-radius: 6px; backdrop-filter: blur(6px); border: 1px solid #7e7e7e45; box-shadow: 3px 3px 6px rgba(0,0,0,.2); transition: opacity 0.2s ease, transform 0.1s ease;}f-menu.search f-list { margin: 0 6px 0 6px; display: flex; flex-direction: column-reverse; margin-bottom: 5px;}f-menu.context.hidden { visibility: hidden; opacity: 0;}f-menu.context f-item,f-menu.search f-item { display: block; position: relative; margin: 0; padding: 0; white-space: nowrap;}f-menu.search f-item { opacity: 0;}f-menu.context f-item.submenu::after { content: ""; position: absolute; right: 6px; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); border: 5px solid transparent; border-left-color: #808080;}f-menu.context f-item:hover > f-menu,f-menu.context f-item.active > f-menu { visibility: unset; transform: unset; opacity: unset;}f-menu.context f-menu { top: 0px; left: calc( 100% - 4px );}f-menu.context f-item button,f-menu.search f-item button { overflow: visible; display: block; width: calc( 100% - 6px ); text-align: left; cursor: pointer; white-space: nowrap; padding: 6px 8px; border-radius: 3px; background: rgba(45, 45, 48, 0.95); border: 0; color: #ddd; margin: 3px; text-shadow: 1px 1px 0px #0007;}f-menu.context f-item button i,f-menu.search f-item button i { float: left; font-size: 16px;}f-menu.context f-item button span,f-menu.search f-item button span { margin-left: 6px;}f-menu.context f-item:hover > button,f-menu.search f-item:hover > button,f-menu.search f-item.active > button { color: #fff; background-color: rgba(61, 70, 82, 0.98);}f-menu.search f-item:hover,f-menu.search f-item.active { opacity: 1 !important;}f-menu.context f-item button:active { outline: solid 1px rgba( 0, 80, 200, 0.98 );}f-menu.context f-item f-tooltip { margin-left: 85px; top: -50px;}f-menu.search f-item { display: none;}f-menu.search f-item:nth-child(1) { opacity: 1; display: unset;}f-menu.search f-item:nth-child(2) { opacity: .8; display: unset;}f-menu.search f-item:nth-child(3) { opacity: .6; display: unset;}f-menu.search f-item:nth-child(4) { opacity: .4; display: unset;}f-menu.search f-item button { border-radius: 14px;}f-tips { right: 10px; top: 10px; position: absolute; z-index: 100; pointer-events: none; display: flex; flex-direction: column;}f-tips f-tip { width: 450px; font-size: 13px; border-radius: 6px; text-align: center; display: block; height: auto; color: #ffffffe0; margin: 4px; padding: 4px; background: #17171794; border: 1px solid #7e7e7e38; line-height: 100%; backdrop-filter: blur(6px); transition: all 0.2s ease; text-transform: initial; opacity: 0;}f-tips f-tip:nth-child(1) { opacity: 1;}f-tips f-tip:nth-child(2) { opacity: .75;}f-tips f-tip:nth-child(3) { opacity: .25;}f-tips f-tip:nth-child(4) { opacity: .1;}f-tips f-tip.error { background: #b900005e;}f-menu.search input { width: calc( 100% - 28px ); height: 41px; position: absolute; z-index: 10; border-radius: 20px; padding-left: 14px; padding-right: 14px; font-size: 15px; background-color: #17171794; border: 1px solid #7e7e7e45; backdrop-filter: blur(6px); box-shadow: 3px 3px 6px rgb(0 0 0 / 20%); text-transform: initial;}f-menu.circle { position: absolute; left: 40px; bottom: 40px; z-index: 100;}f-menu.circle f-item { align-content: space-around; margin-right: 20px;}f-menu.circle f-item button { width: 47px; height: 47px; font-size: 22px; background: #17171794; border-radius: 50%; backdrop-filter: blur(6px); border: 1px solid #7e7e7e45; line-height: 100%; cursor: pointer; box-shadow: 3px 3px 6px rgba(0,0,0,.2);}f-menu.circle f-item f-tooltip { margin-top: -60px;}.f-rounded f-node f-element,.f-rounded f-node f-element.title.left { border-radius: 10px 5px 10px 5px;}.f-rounded f-node f-element input, .f-rounded f-node f-element select,.f-rounded f-node f-element button,.f-rounded f-node f-element textarea,.f-rounded f-node f-element input[type='checkbox'].toggle,.f-rounded f-node f-element input[type='checkbox'].toggle:after { border-radius: 20px 10px;}.f-rounded f-node f-element input { padding-left: 7px; padding-right: 7px;}.f-rounded f-menu.context,.f-rounded f-menu.context f-item button { border-radius: 20px 10px;}@media (hover: hover) and (pointer: fine) { f-node:not(.selected):hover { filter: drop-shadow(0 0 6px #66666630); } f-element f-toolbar { visibility: hidden; opacity: 0; transition: opacity 0.2s ease; } f-node:hover > f-element f-toolbar { visibility: visible; opacity: 1; } f-element f-io:hover { zoom: 1.4; } f-menu.circle f-item button:hover { background-color: #2a2a2a; } f-menu.search input:hover, f-menu.search input:focus { background-color: #1a1a1a; filter: drop-shadow(0 0 6px #66666630); } f-menu.search input:focus { filter: drop-shadow(0 0 8px #4444dd); } f-menu.circle f-item button:hover > f-tooltip, f-menu.context f-item button:hover > f-tooltip { visibility: visible; opacity: 1; } f-menu.circle f-item button:hover > f-tooltip { margin-top: -50px; } f-menu.context f-item button:hover > f-tooltip { top: -30px; } f-menu.circle f-item button:focus > f-tooltip, f-menu.context f-item button:focus > f-tooltip { visibility: hidden; opacity: 0; }}@media (hover: none) and (pointer: coarse) { body.dragging f-canvas, body.connecting f-canvas { overflow: hidden !important; }}f-canvas { will-change: top, left;}f-node { will-change: transform !important;}` );
|
|
20
20
|
|
|
21
21
|
const REVISION = '1';
|
|
22
22
|
|
|
@@ -114,6 +114,50 @@ class Serializer extends EventTarget {
|
|
|
114
114
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
class PointerMonitor {
|
|
118
|
+
|
|
119
|
+
started = false;
|
|
120
|
+
|
|
121
|
+
constructor() {
|
|
122
|
+
|
|
123
|
+
this.x = 0;
|
|
124
|
+
this.y = 0;
|
|
125
|
+
|
|
126
|
+
this._onMoveEvent = ( e ) => {
|
|
127
|
+
|
|
128
|
+
const event = e.touches ? e.touches[ 0 ] : e;
|
|
129
|
+
|
|
130
|
+
this.x = event.x;
|
|
131
|
+
this.y = event.y;
|
|
132
|
+
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
start() {
|
|
138
|
+
|
|
139
|
+
if ( this.started ) return;
|
|
140
|
+
|
|
141
|
+
this.started = true;
|
|
142
|
+
|
|
143
|
+
window.addEventListener( 'wheel', this._onMoveEvent, true );
|
|
144
|
+
|
|
145
|
+
window.addEventListener( 'mousedown', this._onMoveEvent, true );
|
|
146
|
+
window.addEventListener( 'touchstart', this._onMoveEvent, true );
|
|
147
|
+
|
|
148
|
+
window.addEventListener( 'mousemove', this._onMoveEvent, true );
|
|
149
|
+
window.addEventListener( 'touchmove', this._onMoveEvent, true );
|
|
150
|
+
|
|
151
|
+
window.addEventListener( 'dragover', this._onMoveEvent, true );
|
|
152
|
+
|
|
153
|
+
return this;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const pointer = new PointerMonitor().start();
|
|
160
|
+
|
|
117
161
|
const draggableDOM = ( dom, callback = null, className = 'dragging' ) => {
|
|
118
162
|
|
|
119
163
|
let dragData = null;
|
|
@@ -259,10 +303,16 @@ const dispatchEventList = ( list, ...params ) => {
|
|
|
259
303
|
|
|
260
304
|
for ( const callback of list ) {
|
|
261
305
|
|
|
262
|
-
callback( ...params )
|
|
306
|
+
if ( callback( ...params ) === false ) {
|
|
307
|
+
|
|
308
|
+
return false;
|
|
309
|
+
|
|
310
|
+
}
|
|
263
311
|
|
|
264
312
|
}
|
|
265
313
|
|
|
314
|
+
return true;
|
|
315
|
+
|
|
266
316
|
};
|
|
267
317
|
|
|
268
318
|
const toPX = ( val ) => {
|
|
@@ -289,13 +339,14 @@ const toHex = ( val ) => {
|
|
|
289
339
|
|
|
290
340
|
};
|
|
291
341
|
|
|
292
|
-
var Utils = /*#__PURE__*/Object.freeze({
|
|
342
|
+
var Utils = /*#__PURE__*/Object.freeze( {
|
|
293
343
|
__proto__: null,
|
|
344
|
+
pointer: pointer,
|
|
294
345
|
draggableDOM: draggableDOM,
|
|
295
346
|
dispatchEventList: dispatchEventList,
|
|
296
347
|
toPX: toPX,
|
|
297
348
|
toHex: toHex
|
|
298
|
-
});
|
|
349
|
+
} );
|
|
299
350
|
|
|
300
351
|
class Link {
|
|
301
352
|
|
|
@@ -347,6 +398,8 @@ class Element extends Serializer {
|
|
|
347
398
|
|
|
348
399
|
super();
|
|
349
400
|
|
|
401
|
+
this.isElement = true;
|
|
402
|
+
|
|
350
403
|
const dom = document.createElement( 'f-element' );
|
|
351
404
|
dom.element = this;
|
|
352
405
|
|
|
@@ -370,7 +423,17 @@ class Element extends Serializer {
|
|
|
370
423
|
|
|
371
424
|
}
|
|
372
425
|
|
|
373
|
-
|
|
426
|
+
const type = e.type;
|
|
427
|
+
|
|
428
|
+
if ( ( type === 'mouseout' ) && selected === element ) {
|
|
429
|
+
|
|
430
|
+
selected = null;
|
|
431
|
+
|
|
432
|
+
} else {
|
|
433
|
+
|
|
434
|
+
selected = element;
|
|
435
|
+
|
|
436
|
+
}
|
|
374
437
|
|
|
375
438
|
};
|
|
376
439
|
|
|
@@ -385,6 +448,9 @@ class Element extends Serializer {
|
|
|
385
448
|
}
|
|
386
449
|
|
|
387
450
|
dom.addEventListener( 'mouseup', onSelect, true );
|
|
451
|
+
dom.addEventListener( 'mouseover', onSelect );
|
|
452
|
+
dom.addEventListener( 'mouseout', onSelect );
|
|
453
|
+
dom.addEventListener( 'touchmove', onSelect );
|
|
388
454
|
dom.addEventListener( 'touchend', onSelect );
|
|
389
455
|
|
|
390
456
|
this.inputs = [];
|
|
@@ -398,14 +464,15 @@ class Element extends Serializer {
|
|
|
398
464
|
|
|
399
465
|
this.events = {
|
|
400
466
|
'connect': [],
|
|
401
|
-
'connectChildren': []
|
|
467
|
+
'connectChildren': [],
|
|
468
|
+
'valid': []
|
|
402
469
|
};
|
|
403
470
|
|
|
404
471
|
this.node = null;
|
|
405
472
|
|
|
406
473
|
this.style = '';
|
|
407
474
|
|
|
408
|
-
this.
|
|
475
|
+
this.objectCallback = null;
|
|
409
476
|
|
|
410
477
|
this.enabledInputs = true;
|
|
411
478
|
|
|
@@ -418,10 +485,10 @@ class Element extends Serializer {
|
|
|
418
485
|
this.lioDOM = this._createIO( 'lio' );
|
|
419
486
|
this.rioDOM = this._createIO( 'rio' );
|
|
420
487
|
|
|
421
|
-
this.dom.classList.add( `
|
|
488
|
+
this.dom.classList.add( `input-${ Link.InputDirection }` );
|
|
422
489
|
|
|
423
|
-
this.dom.
|
|
424
|
-
this.dom.
|
|
490
|
+
this.dom.append( this.lioDOM );
|
|
491
|
+
this.dom.append( this.rioDOM );
|
|
425
492
|
|
|
426
493
|
this.addEventListener( 'connect', ( ) => {
|
|
427
494
|
|
|
@@ -437,6 +504,22 @@ class Element extends Serializer {
|
|
|
437
504
|
|
|
438
505
|
}
|
|
439
506
|
|
|
507
|
+
setAttribute( name, value ) {
|
|
508
|
+
|
|
509
|
+
this.dom.setAttribute( name, value );
|
|
510
|
+
|
|
511
|
+
return this;
|
|
512
|
+
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
onValid( callback ) {
|
|
516
|
+
|
|
517
|
+
this.events.valid.push( callback );
|
|
518
|
+
|
|
519
|
+
return this;
|
|
520
|
+
|
|
521
|
+
}
|
|
522
|
+
|
|
440
523
|
onConnect( callback, childrens = false ) {
|
|
441
524
|
|
|
442
525
|
this.events.connect.push( callback );
|
|
@@ -451,17 +534,17 @@ class Element extends Serializer {
|
|
|
451
534
|
|
|
452
535
|
}
|
|
453
536
|
|
|
454
|
-
|
|
537
|
+
setObjectCallback( callback ) {
|
|
455
538
|
|
|
456
|
-
this.
|
|
539
|
+
this.objectCallback = callback;
|
|
457
540
|
|
|
458
541
|
return this;
|
|
459
542
|
|
|
460
543
|
}
|
|
461
544
|
|
|
462
|
-
|
|
545
|
+
getObject( output = null ) {
|
|
463
546
|
|
|
464
|
-
return this.
|
|
547
|
+
return this.objectCallback ? this.objectCallback( output ) : null;
|
|
465
548
|
|
|
466
549
|
}
|
|
467
550
|
|
|
@@ -485,9 +568,9 @@ class Element extends Serializer {
|
|
|
485
568
|
|
|
486
569
|
const dom = this.dom;
|
|
487
570
|
|
|
488
|
-
if ( !this.enabledInputs ) dom.classList.remove( 'inputs-disable');
|
|
571
|
+
if ( ! this.enabledInputs ) dom.classList.remove( 'inputs-disable' );
|
|
489
572
|
|
|
490
|
-
if ( !value ) dom.classList.add( 'inputs-disable' );
|
|
573
|
+
if ( ! value ) dom.classList.add( 'inputs-disable' );
|
|
491
574
|
|
|
492
575
|
this.enabledInputs = value;
|
|
493
576
|
|
|
@@ -501,6 +584,14 @@ class Element extends Serializer {
|
|
|
501
584
|
|
|
502
585
|
}
|
|
503
586
|
|
|
587
|
+
setColor( color ) {
|
|
588
|
+
|
|
589
|
+
this.dom.style[ 'background-color' ] = toHex( color );
|
|
590
|
+
|
|
591
|
+
return this;
|
|
592
|
+
|
|
593
|
+
}
|
|
594
|
+
|
|
504
595
|
setStyle( style ) {
|
|
505
596
|
|
|
506
597
|
const dom = this.dom;
|
|
@@ -529,6 +620,20 @@ class Element extends Serializer {
|
|
|
529
620
|
|
|
530
621
|
}
|
|
531
622
|
|
|
623
|
+
setInputColor( color ) {
|
|
624
|
+
|
|
625
|
+
if ( Link.InputDirection === 'left' ) {
|
|
626
|
+
|
|
627
|
+
return this.setLIOColor( color );
|
|
628
|
+
|
|
629
|
+
} else {
|
|
630
|
+
|
|
631
|
+
return this.setRIOColor( color );
|
|
632
|
+
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
}
|
|
636
|
+
|
|
532
637
|
setOutput( length ) {
|
|
533
638
|
|
|
534
639
|
if ( Link.InputDirection === 'left' ) {
|
|
@@ -543,6 +648,20 @@ class Element extends Serializer {
|
|
|
543
648
|
|
|
544
649
|
}
|
|
545
650
|
|
|
651
|
+
setOutputColor( color ) {
|
|
652
|
+
|
|
653
|
+
if ( Link.InputDirection === 'left' ) {
|
|
654
|
+
|
|
655
|
+
return this.setRIOColor( color );
|
|
656
|
+
|
|
657
|
+
} else {
|
|
658
|
+
|
|
659
|
+
return this.setLIOColor( color );
|
|
660
|
+
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
}
|
|
664
|
+
|
|
546
665
|
get inputLength() {
|
|
547
666
|
|
|
548
667
|
if ( Link.InputDirection === 'left' ) {
|
|
@@ -571,6 +690,14 @@ class Element extends Serializer {
|
|
|
571
690
|
|
|
572
691
|
}
|
|
573
692
|
|
|
693
|
+
setLIOColor( color ) {
|
|
694
|
+
|
|
695
|
+
this.lioDOM.style[ 'border-color' ] = toHex( color );
|
|
696
|
+
|
|
697
|
+
return this;
|
|
698
|
+
|
|
699
|
+
}
|
|
700
|
+
|
|
574
701
|
setLIO( length ) {
|
|
575
702
|
|
|
576
703
|
this.lioLength = length;
|
|
@@ -581,6 +708,26 @@ class Element extends Serializer {
|
|
|
581
708
|
|
|
582
709
|
}
|
|
583
710
|
|
|
711
|
+
getLIOColor() {
|
|
712
|
+
|
|
713
|
+
return this.lioDOM.style[ 'border-color' ];
|
|
714
|
+
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
setRIOColor( color ) {
|
|
718
|
+
|
|
719
|
+
this.rioDOM.style[ 'border-color' ] = toHex( color );
|
|
720
|
+
|
|
721
|
+
return this;
|
|
722
|
+
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
getRIOColor() {
|
|
726
|
+
|
|
727
|
+
return this.rioDOM.style[ 'border-color' ];
|
|
728
|
+
|
|
729
|
+
}
|
|
730
|
+
|
|
584
731
|
setRIO( length ) {
|
|
585
732
|
|
|
586
733
|
this.rioLength = length;
|
|
@@ -597,7 +744,7 @@ class Element extends Serializer {
|
|
|
597
744
|
|
|
598
745
|
input.element = this;
|
|
599
746
|
|
|
600
|
-
this.inputsDOM.
|
|
747
|
+
this.inputsDOM.append( input.dom );
|
|
601
748
|
|
|
602
749
|
return this;
|
|
603
750
|
|
|
@@ -629,6 +776,12 @@ class Element extends Serializer {
|
|
|
629
776
|
|
|
630
777
|
if ( element !== null ) {
|
|
631
778
|
|
|
779
|
+
if ( dispatchEventList( this.events.valid, this, element, 'connect' ) === false ) {
|
|
780
|
+
|
|
781
|
+
return false;
|
|
782
|
+
|
|
783
|
+
}
|
|
784
|
+
|
|
632
785
|
const link = new Link( this, element );
|
|
633
786
|
|
|
634
787
|
this.links.push( link );
|
|
@@ -638,7 +791,7 @@ class Element extends Serializer {
|
|
|
638
791
|
this.disconnectDOM = document.createElement( 'f-disconnect' );
|
|
639
792
|
this.disconnectDOM.innerHTML = Styles.icons.unlink ? `<i class='${ Styles.icons.unlink }'></i>` : '✖';
|
|
640
793
|
|
|
641
|
-
this.dom.
|
|
794
|
+
this.dom.append( this.disconnectDOM );
|
|
642
795
|
|
|
643
796
|
const onDisconnect = () => {
|
|
644
797
|
|
|
@@ -659,7 +812,7 @@ class Element extends Serializer {
|
|
|
659
812
|
|
|
660
813
|
};
|
|
661
814
|
|
|
662
|
-
const onConnect = (
|
|
815
|
+
const onConnect = () => {
|
|
663
816
|
|
|
664
817
|
this.dispatchEvent( new Event( 'connectChildren' ) );
|
|
665
818
|
|
|
@@ -682,6 +835,7 @@ class Element extends Serializer {
|
|
|
682
835
|
this.disconnectDOM.addEventListener( 'mousedown', onClick, true );
|
|
683
836
|
this.disconnectDOM.addEventListener( 'touchstart', onClick, true );
|
|
684
837
|
this.disconnectDOM.addEventListener( 'disconnect', onDisconnect, true );
|
|
838
|
+
|
|
685
839
|
element.addEventListener( 'connect', onConnect );
|
|
686
840
|
element.addEventListener( 'connectChildren', onConnect );
|
|
687
841
|
element.addEventListener( 'nodeConnect', onConnect );
|
|
@@ -694,7 +848,7 @@ class Element extends Serializer {
|
|
|
694
848
|
|
|
695
849
|
this.dispatchEvent( new Event( 'connect' ) );
|
|
696
850
|
|
|
697
|
-
return
|
|
851
|
+
return true;
|
|
698
852
|
|
|
699
853
|
}
|
|
700
854
|
|
|
@@ -802,23 +956,23 @@ class Element extends Serializer {
|
|
|
802
956
|
|
|
803
957
|
}
|
|
804
958
|
|
|
805
|
-
|
|
959
|
+
getLinkedObject( output = null ) {
|
|
806
960
|
|
|
807
|
-
const linkedElement = this.
|
|
961
|
+
const linkedElement = this.getLinkedElement();
|
|
808
962
|
|
|
809
|
-
return linkedElement ? linkedElement.
|
|
963
|
+
return linkedElement ? linkedElement.getObject( output ) : null;
|
|
810
964
|
|
|
811
965
|
}
|
|
812
966
|
|
|
813
|
-
|
|
967
|
+
getLinkedElement() {
|
|
814
968
|
|
|
815
|
-
const link = this.
|
|
969
|
+
const link = this.getLink();
|
|
816
970
|
|
|
817
971
|
return link ? link.outputElement : null;
|
|
818
972
|
|
|
819
973
|
}
|
|
820
974
|
|
|
821
|
-
|
|
975
|
+
getLink() {
|
|
822
976
|
|
|
823
977
|
return this.links[ 0 ];
|
|
824
978
|
|
|
@@ -850,31 +1004,66 @@ class Element extends Serializer {
|
|
|
850
1004
|
const defaultOutput = Link.InputDirection === 'left' ? 'lio' : 'rio';
|
|
851
1005
|
|
|
852
1006
|
const link = type === defaultOutput ? new Link( this ) : new Link( null, this );
|
|
1007
|
+
const previewLink = new Link( link.inputElement, link.outputElement );
|
|
853
1008
|
|
|
854
1009
|
this.links.push( link );
|
|
855
1010
|
|
|
856
1011
|
draggableDOM( e, ( data ) => {
|
|
857
1012
|
|
|
858
|
-
if (
|
|
1013
|
+
if ( previewLink.outputElement )
|
|
1014
|
+
previewLink.outputElement.dom.classList.remove( 'invalid' );
|
|
859
1015
|
|
|
860
|
-
|
|
1016
|
+
if ( previewLink.inputElement )
|
|
1017
|
+
previewLink.inputElement.dom.classList.remove( 'invalid' );
|
|
861
1018
|
|
|
862
|
-
|
|
863
|
-
|
|
1019
|
+
previewLink.inputElement = link.inputElement;
|
|
1020
|
+
previewLink.outputElement = link.outputElement;
|
|
864
1021
|
|
|
865
|
-
|
|
1022
|
+
if ( type === defaultOutput ) {
|
|
1023
|
+
|
|
1024
|
+
previewLink.outputElement = selected;
|
|
866
1025
|
|
|
867
|
-
|
|
1026
|
+
} else {
|
|
868
1027
|
|
|
869
|
-
|
|
1028
|
+
previewLink.inputElement = selected;
|
|
870
1029
|
|
|
871
|
-
|
|
1030
|
+
}
|
|
872
1031
|
|
|
873
|
-
|
|
1032
|
+
const isInvalid = previewLink.inputElement !== null && previewLink.outputElement !== null &&
|
|
1033
|
+
previewLink.inputElement.inputLength > 0 && previewLink.outputElement.outputLength > 0 &&
|
|
1034
|
+
dispatchEventList( previewLink.inputElement.events.valid, previewLink.inputElement, previewLink.outputElement, data.dragging ? 'dragging' : 'dragged' ) === false;
|
|
874
1035
|
|
|
875
|
-
|
|
1036
|
+
if ( data.dragging && isInvalid ) {
|
|
876
1037
|
|
|
877
|
-
|
|
1038
|
+
if ( type === defaultOutput ) {
|
|
1039
|
+
|
|
1040
|
+
if ( previewLink.outputElement )
|
|
1041
|
+
previewLink.outputElement.dom.classList.add( 'invalid' );
|
|
1042
|
+
|
|
1043
|
+
} else {
|
|
1044
|
+
|
|
1045
|
+
if ( previewLink.inputElement )
|
|
1046
|
+
previewLink.inputElement.dom.classList.add( 'invalid' );
|
|
1047
|
+
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
return;
|
|
1051
|
+
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
if ( ! data.dragging ) {
|
|
1055
|
+
|
|
1056
|
+
nodeDOM.classList.remove( 'io-connect' );
|
|
1057
|
+
|
|
1058
|
+
ioDOM.classList.remove( 'connect' );
|
|
1059
|
+
dom.classList.remove( 'select' );
|
|
1060
|
+
|
|
1061
|
+
this.links.splice( this.links.indexOf( link ), 1 );
|
|
1062
|
+
|
|
1063
|
+
if ( selected !== null && ! isInvalid ) {
|
|
1064
|
+
|
|
1065
|
+
link.inputElement = previewLink.inputElement;
|
|
1066
|
+
link.outputElement = previewLink.outputElement;
|
|
878
1067
|
|
|
879
1068
|
// check if is an is circular link
|
|
880
1069
|
|
|
@@ -909,20 +1098,22 @@ class Element extends Serializer {
|
|
|
909
1098
|
|
|
910
1099
|
}
|
|
911
1100
|
|
|
912
|
-
Element.prototype.isElement = true;
|
|
913
|
-
|
|
914
1101
|
class Input extends Serializer {
|
|
915
1102
|
|
|
916
1103
|
constructor( dom ) {
|
|
917
1104
|
|
|
918
1105
|
super();
|
|
919
1106
|
|
|
1107
|
+
this.isInput = true;
|
|
1108
|
+
|
|
920
1109
|
this.dom = dom;
|
|
921
1110
|
|
|
922
1111
|
this.element = null;
|
|
923
1112
|
|
|
924
1113
|
this.extra = null;
|
|
925
1114
|
|
|
1115
|
+
this.tagColor = null;
|
|
1116
|
+
|
|
926
1117
|
this.events = {
|
|
927
1118
|
'change': [],
|
|
928
1119
|
'click': []
|
|
@@ -956,12 +1147,28 @@ class Input extends Serializer {
|
|
|
956
1147
|
|
|
957
1148
|
}
|
|
958
1149
|
|
|
1150
|
+
setTagColor( color ) {
|
|
1151
|
+
|
|
1152
|
+
this.tagColor = color;
|
|
1153
|
+
|
|
1154
|
+
this.dom.style[ 'border-left' ] = `2px solid ${color}`;
|
|
1155
|
+
|
|
1156
|
+
return this;
|
|
1157
|
+
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
getTagColor() {
|
|
1161
|
+
|
|
1162
|
+
return this.tagColor;
|
|
1163
|
+
|
|
1164
|
+
}
|
|
1165
|
+
|
|
959
1166
|
setToolTip( text ) {
|
|
960
1167
|
|
|
961
1168
|
const div = document.createElement( 'f-tooltip' );
|
|
962
1169
|
div.innerText = text;
|
|
963
1170
|
|
|
964
|
-
this.dom.
|
|
1171
|
+
this.dom.append( div );
|
|
965
1172
|
|
|
966
1173
|
return this;
|
|
967
1174
|
|
|
@@ -983,6 +1190,20 @@ class Input extends Serializer {
|
|
|
983
1190
|
|
|
984
1191
|
}
|
|
985
1192
|
|
|
1193
|
+
setReadOnly( value ) {
|
|
1194
|
+
|
|
1195
|
+
this.dom.readOnly = value;
|
|
1196
|
+
|
|
1197
|
+
return this;
|
|
1198
|
+
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
getReadOnly() {
|
|
1202
|
+
|
|
1203
|
+
return this.dom.readOnly;
|
|
1204
|
+
|
|
1205
|
+
}
|
|
1206
|
+
|
|
986
1207
|
setValue( value, dispatch = true ) {
|
|
987
1208
|
|
|
988
1209
|
this.dom.value = value;
|
|
@@ -1013,14 +1234,14 @@ class Input extends Serializer {
|
|
|
1013
1234
|
|
|
1014
1235
|
}
|
|
1015
1236
|
|
|
1016
|
-
Input.prototype.isInput = true;
|
|
1017
|
-
|
|
1018
1237
|
class Node extends Serializer {
|
|
1019
1238
|
|
|
1020
1239
|
constructor() {
|
|
1021
1240
|
|
|
1022
1241
|
super();
|
|
1023
1242
|
|
|
1243
|
+
this.isNode = true;
|
|
1244
|
+
|
|
1024
1245
|
const dom = document.createElement( 'f-node' );
|
|
1025
1246
|
|
|
1026
1247
|
const onDown = () => {
|
|
@@ -1161,7 +1382,7 @@ class Node extends Serializer {
|
|
|
1161
1382
|
element.addEventListener( 'connect', this._onConnect );
|
|
1162
1383
|
element.addEventListener( 'connectChildren', this._onConnectChildren );
|
|
1163
1384
|
|
|
1164
|
-
this.dom.
|
|
1385
|
+
this.dom.append( element.dom );
|
|
1165
1386
|
|
|
1166
1387
|
return this;
|
|
1167
1388
|
|
|
@@ -1233,7 +1454,7 @@ class Node extends Serializer {
|
|
|
1233
1454
|
|
|
1234
1455
|
serialize( data ) {
|
|
1235
1456
|
|
|
1236
|
-
const { x, y
|
|
1457
|
+
const { x, y } = this.getPosition();
|
|
1237
1458
|
|
|
1238
1459
|
const elements = [];
|
|
1239
1460
|
|
|
@@ -1248,9 +1469,9 @@ class Node extends Serializer {
|
|
|
1248
1469
|
data.width = this.getWidth();
|
|
1249
1470
|
data.elements = elements;
|
|
1250
1471
|
|
|
1251
|
-
if ( style !== '' ) {
|
|
1472
|
+
if ( this.style !== '' ) {
|
|
1252
1473
|
|
|
1253
|
-
data.style = style;
|
|
1474
|
+
data.style = this.style;
|
|
1254
1475
|
|
|
1255
1476
|
}
|
|
1256
1477
|
|
|
@@ -1293,8 +1514,6 @@ class Node extends Serializer {
|
|
|
1293
1514
|
|
|
1294
1515
|
}
|
|
1295
1516
|
|
|
1296
|
-
Node.prototype.isNode = true;
|
|
1297
|
-
|
|
1298
1517
|
class DraggableElement extends Element {
|
|
1299
1518
|
|
|
1300
1519
|
constructor( draggable = true ) {
|
|
@@ -1347,9 +1566,9 @@ class TitleElement extends DraggableElement {
|
|
|
1347
1566
|
this.iconDOM = iconDOM;
|
|
1348
1567
|
this.toolbarDOM = toolbarDOM;
|
|
1349
1568
|
|
|
1350
|
-
dom.
|
|
1351
|
-
dom.
|
|
1352
|
-
dom.
|
|
1569
|
+
dom.append( spanDOM );
|
|
1570
|
+
dom.append( iconDOM );
|
|
1571
|
+
dom.append( toolbarDOM );
|
|
1353
1572
|
|
|
1354
1573
|
}
|
|
1355
1574
|
|
|
@@ -1385,7 +1604,7 @@ class TitleElement extends DraggableElement {
|
|
|
1385
1604
|
|
|
1386
1605
|
this.buttons.push( button );
|
|
1387
1606
|
|
|
1388
|
-
this.toolbarDOM.
|
|
1607
|
+
this.toolbarDOM.append( button.dom );
|
|
1389
1608
|
|
|
1390
1609
|
return this;
|
|
1391
1610
|
|
|
@@ -1424,9 +1643,11 @@ class TitleElement extends DraggableElement {
|
|
|
1424
1643
|
|
|
1425
1644
|
}
|
|
1426
1645
|
|
|
1427
|
-
const drawLine = ( p1x, p1y, p2x, p2y, invert, size,
|
|
1646
|
+
const drawLine = ( p1x, p1y, p2x, p2y, invert, size, colorA, ctx, colorB = null ) => {
|
|
1428
1647
|
|
|
1429
|
-
const
|
|
1648
|
+
const dx = p2x - p1x;
|
|
1649
|
+
const dy = p2y - p1y;
|
|
1650
|
+
const offset = Math.sqrt( ( dx * dx ) + ( dy * dy ) ) * ( invert ? - .3 : .3 );
|
|
1430
1651
|
|
|
1431
1652
|
ctx.beginPath();
|
|
1432
1653
|
|
|
@@ -1438,8 +1659,21 @@ const drawLine = ( p1x, p1y, p2x, p2y, invert, size, color, ctx ) => {
|
|
|
1438
1659
|
p2x, p2y
|
|
1439
1660
|
);
|
|
1440
1661
|
|
|
1662
|
+
if ( colorB !== null && colorA !== colorB ) {
|
|
1663
|
+
|
|
1664
|
+
const gradient = ctx.createLinearGradient( p1x, p1y, p2x, p2y );
|
|
1665
|
+
gradient.addColorStop( 0, colorA );
|
|
1666
|
+
gradient.addColorStop( 1, colorB );
|
|
1667
|
+
|
|
1668
|
+
ctx.strokeStyle = gradient;
|
|
1669
|
+
|
|
1670
|
+
} else {
|
|
1671
|
+
|
|
1672
|
+
ctx.strokeStyle = colorA;
|
|
1673
|
+
|
|
1674
|
+
}
|
|
1675
|
+
|
|
1441
1676
|
ctx.lineWidth = size;
|
|
1442
|
-
ctx.strokeStyle = color;
|
|
1443
1677
|
ctx.stroke();
|
|
1444
1678
|
|
|
1445
1679
|
};
|
|
@@ -1514,11 +1748,11 @@ class Canvas extends Serializer {
|
|
|
1514
1748
|
|
|
1515
1749
|
dropDOM.innerHTML = '<span>drop your file</span>';
|
|
1516
1750
|
|
|
1517
|
-
dom.
|
|
1518
|
-
dom.
|
|
1519
|
-
dom.
|
|
1520
|
-
dom.
|
|
1521
|
-
dom.
|
|
1751
|
+
dom.append( dropDOM );
|
|
1752
|
+
dom.append( canvas );
|
|
1753
|
+
dom.append( frontCanvas );
|
|
1754
|
+
dom.append( contentDOM );
|
|
1755
|
+
dom.append( areaDOM );
|
|
1522
1756
|
/*
|
|
1523
1757
|
let zoomTouchData = null;
|
|
1524
1758
|
|
|
@@ -1790,11 +2024,13 @@ class Canvas extends Serializer {
|
|
|
1790
2024
|
|
|
1791
2025
|
add( node ) {
|
|
1792
2026
|
|
|
2027
|
+
if ( node.canvas === this ) return;
|
|
2028
|
+
|
|
1793
2029
|
this.nodes.push( node );
|
|
1794
2030
|
|
|
1795
2031
|
node.canvas = this;
|
|
1796
2032
|
|
|
1797
|
-
this.contentDOM.
|
|
2033
|
+
this.contentDOM.append( node.dom );
|
|
1798
2034
|
|
|
1799
2035
|
return this;
|
|
1800
2036
|
|
|
@@ -1818,6 +2054,8 @@ class Canvas extends Serializer {
|
|
|
1818
2054
|
|
|
1819
2055
|
this.contentDOM.removeChild( node.dom );
|
|
1820
2056
|
|
|
2057
|
+
node.dispatchEvent( new Event( 'remove' ) );
|
|
2058
|
+
|
|
1821
2059
|
return this;
|
|
1822
2060
|
|
|
1823
2061
|
}
|
|
@@ -1842,9 +2080,17 @@ class Canvas extends Serializer {
|
|
|
1842
2080
|
|
|
1843
2081
|
for ( const link of links ) {
|
|
1844
2082
|
|
|
1845
|
-
if ( link.
|
|
2083
|
+
if ( link.inputElement && link.outputElement ) {
|
|
2084
|
+
|
|
2085
|
+
if ( link.inputElement.node === node ) {
|
|
2086
|
+
|
|
2087
|
+
link.inputElement.connect();
|
|
2088
|
+
|
|
2089
|
+
} else if ( link.outputElement.node === node ) {
|
|
1846
2090
|
|
|
1847
|
-
|
|
2091
|
+
link.inputElement.connect();
|
|
2092
|
+
|
|
2093
|
+
}
|
|
1848
2094
|
|
|
1849
2095
|
}
|
|
1850
2096
|
|
|
@@ -1989,24 +2235,36 @@ class Canvas extends Serializer {
|
|
|
1989
2235
|
|
|
1990
2236
|
if ( draggingLink || length === 1 ) {
|
|
1991
2237
|
|
|
2238
|
+
let colorA = null,
|
|
2239
|
+
colorB = null;
|
|
2240
|
+
|
|
1992
2241
|
if ( draggingLink === 'rio' ) {
|
|
1993
2242
|
|
|
2243
|
+
colorA = colorB = lioElement.getRIOColor();
|
|
2244
|
+
|
|
1994
2245
|
aPos.x += offsetIORadius;
|
|
1995
2246
|
bPos.x /= zoom;
|
|
1996
2247
|
bPos.y /= zoom;
|
|
1997
2248
|
|
|
1998
2249
|
} else if ( draggingLink === 'lio' ) {
|
|
1999
2250
|
|
|
2251
|
+
colorA = colorB = rioElement.getLIOColor();
|
|
2252
|
+
|
|
2000
2253
|
bPos.x -= offsetIORadius;
|
|
2001
2254
|
aPos.x /= zoom;
|
|
2002
2255
|
aPos.y /= zoom;
|
|
2003
2256
|
|
|
2257
|
+
} else {
|
|
2258
|
+
|
|
2259
|
+
colorA = lioElement.getRIOColor();
|
|
2260
|
+
colorB = rioElement.getLIOColor();
|
|
2261
|
+
|
|
2004
2262
|
}
|
|
2005
2263
|
|
|
2006
2264
|
drawLine(
|
|
2007
2265
|
aPos.x * zoom, aPos.y * zoom,
|
|
2008
2266
|
bPos.x * zoom, bPos.y * zoom,
|
|
2009
|
-
false, 2, '#ffffff', drawContext
|
|
2267
|
+
false, 2, colorA || '#ffffff', drawContext, colorB || '#ffffff'
|
|
2010
2268
|
);
|
|
2011
2269
|
|
|
2012
2270
|
} else {
|
|
@@ -2022,19 +2280,22 @@ class Canvas extends Serializer {
|
|
|
2022
2280
|
const rioLength = Math.min( lioElement.rioLength, length );
|
|
2023
2281
|
const lioLength = Math.min( rioElement.lioLength, length );
|
|
2024
2282
|
|
|
2283
|
+
const colorA = lioElement.getRIOColor() || color;
|
|
2284
|
+
const colorB = rioElement.getLIOColor() || color;
|
|
2285
|
+
|
|
2025
2286
|
const aCenterY = ( ( rioLength * marginY ) * .5 ) - ( marginY / 2 );
|
|
2026
2287
|
const bCenterY = ( ( lioLength * marginY ) * .5 ) - ( marginY / 2 );
|
|
2027
2288
|
|
|
2028
2289
|
const aIndex = Math.min( i, rioLength - 1 );
|
|
2029
2290
|
const bIndex = Math.min( i, lioLength - 1 );
|
|
2030
2291
|
|
|
2031
|
-
const aPosY = aIndex * marginY;
|
|
2032
|
-
const bPosY = bIndex * marginY;
|
|
2292
|
+
const aPosY = ( aIndex * marginY ) - 1;
|
|
2293
|
+
const bPosY = ( bIndex * marginY ) - 1;
|
|
2033
2294
|
|
|
2034
2295
|
drawLine(
|
|
2035
2296
|
aPos.x * zoom, ( ( aPos.y + aPosY ) - aCenterY ) * zoom,
|
|
2036
2297
|
bPos.x * zoom, ( ( bPos.y + bPosY ) - bCenterY ) * zoom,
|
|
2037
|
-
false, 2,
|
|
2298
|
+
false, 2, colorA, drawContext, colorB
|
|
2038
2299
|
);
|
|
2039
2300
|
|
|
2040
2301
|
}
|
|
@@ -2093,10 +2354,10 @@ class ButtonInput extends Input {
|
|
|
2093
2354
|
const dom = document.createElement( 'button' );
|
|
2094
2355
|
|
|
2095
2356
|
const spanDOM = document.createElement( 'span' );
|
|
2096
|
-
dom.
|
|
2357
|
+
dom.append( spanDOM );
|
|
2097
2358
|
|
|
2098
2359
|
const iconDOM = document.createElement( 'i' );
|
|
2099
|
-
dom.
|
|
2360
|
+
dom.append( iconDOM );
|
|
2100
2361
|
|
|
2101
2362
|
super( dom );
|
|
2102
2363
|
|
|
@@ -2149,14 +2410,15 @@ class ButtonInput extends Input {
|
|
|
2149
2410
|
|
|
2150
2411
|
class ObjectNode extends Node {
|
|
2151
2412
|
|
|
2152
|
-
constructor( name, inputLength,
|
|
2413
|
+
constructor( name, inputLength, callback = null, width = 300 ) {
|
|
2153
2414
|
|
|
2154
2415
|
super();
|
|
2155
2416
|
|
|
2156
2417
|
this.setWidth( width );
|
|
2157
2418
|
|
|
2158
2419
|
const title = new TitleElement( name )
|
|
2159
|
-
.
|
|
2420
|
+
.setObjectCallback( callback )
|
|
2421
|
+
.setSerializable( false )
|
|
2160
2422
|
.setOutput( inputLength );
|
|
2161
2423
|
|
|
2162
2424
|
const closeButton = new ButtonInput( Styles.icons.close || '✕' ).onClick( () => {
|
|
@@ -2174,17 +2436,43 @@ class ObjectNode extends Node {
|
|
|
2174
2436
|
|
|
2175
2437
|
}
|
|
2176
2438
|
|
|
2177
|
-
|
|
2439
|
+
setName( value ) {
|
|
2440
|
+
|
|
2441
|
+
this.title.setTitle( value );
|
|
2442
|
+
|
|
2443
|
+
return this;
|
|
2178
2444
|
|
|
2179
|
-
|
|
2445
|
+
}
|
|
2446
|
+
|
|
2447
|
+
getName() {
|
|
2448
|
+
|
|
2449
|
+
return this.title.getTitle();
|
|
2450
|
+
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
setObjectCallback( callback ) {
|
|
2454
|
+
|
|
2455
|
+
this.title.setObjectCallback( callback );
|
|
2180
2456
|
|
|
2181
2457
|
return this;
|
|
2182
2458
|
|
|
2183
2459
|
}
|
|
2184
2460
|
|
|
2185
|
-
|
|
2461
|
+
getObject( callback ) {
|
|
2462
|
+
|
|
2463
|
+
return this.title.getObject( callback );
|
|
2464
|
+
|
|
2465
|
+
}
|
|
2466
|
+
|
|
2467
|
+
setColor( color ) {
|
|
2468
|
+
|
|
2469
|
+
return this.title.setColor( color );
|
|
2470
|
+
|
|
2471
|
+
}
|
|
2472
|
+
|
|
2473
|
+
setOutputColor( color ) {
|
|
2186
2474
|
|
|
2187
|
-
return this.title.
|
|
2475
|
+
return this.title.setOutputColor( color );
|
|
2188
2476
|
|
|
2189
2477
|
}
|
|
2190
2478
|
|
|
@@ -2327,6 +2615,14 @@ class NumberInput extends Input {
|
|
|
2327
2615
|
|
|
2328
2616
|
}
|
|
2329
2617
|
|
|
2618
|
+
setStep( step ) {
|
|
2619
|
+
|
|
2620
|
+
this.step = step;
|
|
2621
|
+
|
|
2622
|
+
return this;
|
|
2623
|
+
|
|
2624
|
+
}
|
|
2625
|
+
|
|
2330
2626
|
setRange( min, max, step ) {
|
|
2331
2627
|
|
|
2332
2628
|
this.min = min;
|
|
@@ -2393,7 +2689,7 @@ class NumberInput extends Input {
|
|
|
2393
2689
|
|
|
2394
2690
|
_getString( value ) {
|
|
2395
2691
|
|
|
2396
|
-
|
|
2692
|
+
const num = Math.min( Math.max( Number( value ), this.min ), this.max );
|
|
2397
2693
|
|
|
2398
2694
|
if ( this.integer === true ) {
|
|
2399
2695
|
|
|
@@ -2452,8 +2748,8 @@ class SliderInput extends Input {
|
|
|
2452
2748
|
|
|
2453
2749
|
} );
|
|
2454
2750
|
|
|
2455
|
-
dom.
|
|
2456
|
-
dom.
|
|
2751
|
+
dom.append( rangeDOM );
|
|
2752
|
+
dom.append( field.dom );
|
|
2457
2753
|
|
|
2458
2754
|
this.rangeDOM = rangeDOM;
|
|
2459
2755
|
this.field = field;
|
|
@@ -2577,7 +2873,7 @@ class ColorInput extends Input {
|
|
|
2577
2873
|
|
|
2578
2874
|
getValue() {
|
|
2579
2875
|
|
|
2580
|
-
return parseInt( super.getValue().
|
|
2876
|
+
return parseInt( super.getValue().slice( 1 ), 16 );
|
|
2581
2877
|
|
|
2582
2878
|
}
|
|
2583
2879
|
|
|
@@ -2625,11 +2921,13 @@ class LabelElement extends Element {
|
|
|
2625
2921
|
this.spanDOM = spanDOM;
|
|
2626
2922
|
this.iconDOM = iconDOM;
|
|
2627
2923
|
|
|
2628
|
-
this.labelDOM.
|
|
2629
|
-
this.labelDOM.
|
|
2924
|
+
this.labelDOM.append( this.spanDOM );
|
|
2925
|
+
this.labelDOM.append( this.iconDOM );
|
|
2630
2926
|
|
|
2631
|
-
this.dom.
|
|
2632
|
-
this.dom.
|
|
2927
|
+
this.dom.append( this.labelDOM );
|
|
2928
|
+
this.dom.append( this.inputsDOM );
|
|
2929
|
+
|
|
2930
|
+
this.serializeLabel = false;
|
|
2633
2931
|
|
|
2634
2932
|
this.setLabel( label );
|
|
2635
2933
|
this.setAlign( align );
|
|
@@ -2672,14 +2970,18 @@ class LabelElement extends Element {
|
|
|
2672
2970
|
|
|
2673
2971
|
super.serialize( data );
|
|
2674
2972
|
|
|
2675
|
-
|
|
2676
|
-
const icon = this.getIcon();
|
|
2973
|
+
if ( this.serializeLabel ) {
|
|
2677
2974
|
|
|
2678
|
-
|
|
2975
|
+
const label = this.getLabel();
|
|
2976
|
+
const icon = this.getIcon();
|
|
2679
2977
|
|
|
2680
|
-
|
|
2978
|
+
data.label = label;
|
|
2681
2979
|
|
|
2682
|
-
|
|
2980
|
+
if ( icon !== '' ) {
|
|
2981
|
+
|
|
2982
|
+
data.icon = icon;
|
|
2983
|
+
|
|
2984
|
+
}
|
|
2683
2985
|
|
|
2684
2986
|
}
|
|
2685
2987
|
|
|
@@ -2689,11 +2991,15 @@ class LabelElement extends Element {
|
|
|
2689
2991
|
|
|
2690
2992
|
super.deserialize( data );
|
|
2691
2993
|
|
|
2692
|
-
|
|
2994
|
+
if ( this.serializeLabel ) {
|
|
2693
2995
|
|
|
2694
|
-
|
|
2996
|
+
this.setLabel( data.label );
|
|
2695
2997
|
|
|
2696
|
-
|
|
2998
|
+
if ( data.icon !== undefined ) {
|
|
2999
|
+
|
|
3000
|
+
this.setIcon( data.icon );
|
|
3001
|
+
|
|
3002
|
+
}
|
|
2697
3003
|
|
|
2698
3004
|
}
|
|
2699
3005
|
|
|
@@ -2824,51 +3130,151 @@ class PanelNode extends Node {
|
|
|
2824
3130
|
|
|
2825
3131
|
class Menu extends EventTarget {
|
|
2826
3132
|
|
|
2827
|
-
constructor( className
|
|
3133
|
+
constructor( className ) {
|
|
2828
3134
|
|
|
2829
3135
|
super();
|
|
2830
3136
|
|
|
2831
3137
|
const dom = document.createElement( 'f-menu' );
|
|
2832
3138
|
dom.className = className + ' hidden';
|
|
2833
3139
|
|
|
3140
|
+
const listDOM = document.createElement( 'f-list' );
|
|
3141
|
+
|
|
3142
|
+
dom.append( listDOM );
|
|
3143
|
+
|
|
2834
3144
|
this.dom = dom;
|
|
3145
|
+
this.listDOM = listDOM;
|
|
2835
3146
|
|
|
2836
3147
|
this.visible = false;
|
|
2837
3148
|
|
|
2838
3149
|
this.subMenus = new WeakMap();
|
|
2839
3150
|
this.domButtons = new WeakMap();
|
|
2840
3151
|
|
|
2841
|
-
this.
|
|
2842
|
-
'context': []
|
|
2843
|
-
};
|
|
3152
|
+
this.buttons = [];
|
|
2844
3153
|
|
|
2845
|
-
this.
|
|
3154
|
+
this.events = {};
|
|
2846
3155
|
|
|
2847
|
-
|
|
3156
|
+
}
|
|
2848
3157
|
|
|
2849
|
-
|
|
3158
|
+
onContext( callback ) {
|
|
2850
3159
|
|
|
2851
|
-
this.
|
|
3160
|
+
this.events.context.push( callback );
|
|
2852
3161
|
|
|
2853
|
-
this
|
|
3162
|
+
return this;
|
|
2854
3163
|
|
|
2855
|
-
|
|
3164
|
+
}
|
|
2856
3165
|
|
|
2857
|
-
|
|
3166
|
+
show() {
|
|
2858
3167
|
|
|
2859
|
-
|
|
3168
|
+
this.dom.classList.remove( 'hidden' );
|
|
2860
3169
|
|
|
2861
|
-
|
|
3170
|
+
this.visible = true;
|
|
2862
3171
|
|
|
2863
|
-
|
|
3172
|
+
this.dispatchEvent( new Event( 'show' ) );
|
|
2864
3173
|
|
|
2865
|
-
|
|
3174
|
+
return this;
|
|
2866
3175
|
|
|
2867
|
-
|
|
3176
|
+
}
|
|
2868
3177
|
|
|
2869
|
-
|
|
3178
|
+
hide() {
|
|
2870
3179
|
|
|
2871
|
-
|
|
3180
|
+
this.dom.classList.add( 'hidden' );
|
|
3181
|
+
|
|
3182
|
+
this.dispatchEvent( new Event( 'hide' ) );
|
|
3183
|
+
|
|
3184
|
+
this.visible = false;
|
|
3185
|
+
|
|
3186
|
+
}
|
|
3187
|
+
|
|
3188
|
+
add( button, submenu = null ) {
|
|
3189
|
+
|
|
3190
|
+
const liDOM = document.createElement( 'f-item' );
|
|
3191
|
+
|
|
3192
|
+
if ( submenu !== null ) {
|
|
3193
|
+
|
|
3194
|
+
liDOM.classList.add( 'submenu' );
|
|
3195
|
+
|
|
3196
|
+
liDOM.append( submenu.dom );
|
|
3197
|
+
|
|
3198
|
+
this.subMenus.set( button, submenu );
|
|
3199
|
+
|
|
3200
|
+
button.dom.addEventListener( 'mouseover', () => submenu.show() );
|
|
3201
|
+
button.dom.addEventListener( 'mouseout', () => submenu.hide() );
|
|
3202
|
+
|
|
3203
|
+
}
|
|
3204
|
+
|
|
3205
|
+
liDOM.append( button.dom );
|
|
3206
|
+
|
|
3207
|
+
this.buttons.push( button );
|
|
3208
|
+
|
|
3209
|
+
this.listDOM.append( liDOM );
|
|
3210
|
+
|
|
3211
|
+
this.domButtons.set( button, liDOM );
|
|
3212
|
+
|
|
3213
|
+
return this;
|
|
3214
|
+
|
|
3215
|
+
}
|
|
3216
|
+
|
|
3217
|
+
clear() {
|
|
3218
|
+
|
|
3219
|
+
this.buttons = [];
|
|
3220
|
+
|
|
3221
|
+
this.subMenus = new WeakMap();
|
|
3222
|
+
this.domButtons = new WeakMap();
|
|
3223
|
+
|
|
3224
|
+
while ( this.listDOM.firstChild ) {
|
|
3225
|
+
|
|
3226
|
+
this.listDOM.firstChild.remove();
|
|
3227
|
+
|
|
3228
|
+
}
|
|
3229
|
+
|
|
3230
|
+
}
|
|
3231
|
+
|
|
3232
|
+
}
|
|
3233
|
+
|
|
3234
|
+
let lastContext = null;
|
|
3235
|
+
|
|
3236
|
+
const onCloseLastContext = ( e ) => {
|
|
3237
|
+
|
|
3238
|
+
if ( lastContext && lastContext.visible === true && e.target.closest( 'f-menu.context' ) === null ) {
|
|
3239
|
+
|
|
3240
|
+
lastContext.hide();
|
|
3241
|
+
|
|
3242
|
+
}
|
|
3243
|
+
|
|
3244
|
+
};
|
|
3245
|
+
|
|
3246
|
+
document.body.addEventListener( 'mousedown', onCloseLastContext, true );
|
|
3247
|
+
document.body.addEventListener( 'touchstart', onCloseLastContext, true );
|
|
3248
|
+
|
|
3249
|
+
class ContextMenu extends Menu {
|
|
3250
|
+
|
|
3251
|
+
constructor( target = null ) {
|
|
3252
|
+
|
|
3253
|
+
super( 'context', target );
|
|
3254
|
+
|
|
3255
|
+
this.events.context = [];
|
|
3256
|
+
|
|
3257
|
+
this._lastButtonClick = null;
|
|
3258
|
+
|
|
3259
|
+
this._onButtonClick = ( e = null ) => {
|
|
3260
|
+
|
|
3261
|
+
const button = e ? e.target : null;
|
|
3262
|
+
|
|
3263
|
+
if ( this._lastButtonClick ) {
|
|
3264
|
+
|
|
3265
|
+
this._lastButtonClick.dom.parentElement.classList.remove( 'active' );
|
|
3266
|
+
|
|
3267
|
+
}
|
|
3268
|
+
|
|
3269
|
+
this._lastButtonClick = button;
|
|
3270
|
+
|
|
3271
|
+
if ( button ) {
|
|
3272
|
+
|
|
3273
|
+
if ( this.subMenus.has( button ) ) {
|
|
3274
|
+
|
|
3275
|
+
this.subMenus.get( button )._onButtonClick();
|
|
3276
|
+
|
|
3277
|
+
}
|
|
2872
3278
|
|
|
2873
3279
|
button.dom.parentElement.classList.add( 'active' );
|
|
2874
3280
|
|
|
@@ -2888,45 +3294,50 @@ class Menu extends EventTarget {
|
|
|
2888
3294
|
|
|
2889
3295
|
};
|
|
2890
3296
|
|
|
3297
|
+
this.addEventListener( 'context', ( ) => {
|
|
3298
|
+
|
|
3299
|
+
dispatchEventList( this.events.context, this );
|
|
3300
|
+
|
|
3301
|
+
} );
|
|
3302
|
+
|
|
2891
3303
|
this.setTarget( target );
|
|
2892
3304
|
|
|
2893
3305
|
}
|
|
2894
3306
|
|
|
2895
|
-
|
|
3307
|
+
openFrom( dom ) {
|
|
2896
3308
|
|
|
2897
|
-
|
|
3309
|
+
const rect = dom.getBoundingClientRect();
|
|
2898
3310
|
|
|
2899
|
-
return this;
|
|
3311
|
+
return this.open( rect.x + ( rect.width / 2 ), rect.y + ( rect.height / 2 ) );
|
|
2900
3312
|
|
|
2901
3313
|
}
|
|
2902
3314
|
|
|
2903
|
-
|
|
3315
|
+
open( x = pointer.x, y = pointer.y ) {
|
|
2904
3316
|
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
if ( x !== null && y !== null ) {
|
|
3317
|
+
if ( lastContext !== null ) {
|
|
2908
3318
|
|
|
2909
|
-
|
|
3319
|
+
lastContext.hide();
|
|
2910
3320
|
|
|
2911
3321
|
}
|
|
2912
3322
|
|
|
2913
|
-
|
|
3323
|
+
lastContext = this;
|
|
2914
3324
|
|
|
2915
|
-
this.
|
|
3325
|
+
this.setPosition( x, y );
|
|
2916
3326
|
|
|
2917
|
-
|
|
3327
|
+
document.body.append( this.dom );
|
|
2918
3328
|
|
|
2919
|
-
return this;
|
|
3329
|
+
return this.show();
|
|
2920
3330
|
|
|
2921
3331
|
}
|
|
2922
3332
|
|
|
2923
|
-
|
|
3333
|
+
setPosition( x, y ) {
|
|
2924
3334
|
|
|
2925
|
-
this.dom
|
|
3335
|
+
const dom = this.dom;
|
|
2926
3336
|
|
|
2927
|
-
|
|
3337
|
+
dom.style.left = toPX( x );
|
|
3338
|
+
dom.style.top = toPX( y );
|
|
2928
3339
|
|
|
2929
|
-
this
|
|
3340
|
+
return this;
|
|
2930
3341
|
|
|
2931
3342
|
}
|
|
2932
3343
|
|
|
@@ -2940,72 +3351,143 @@ class Menu extends EventTarget {
|
|
|
2940
3351
|
|
|
2941
3352
|
if ( e.pointerType !== 'mouse' || ( e.pageX === 0 && e.pageY === 0 ) ) return;
|
|
2942
3353
|
|
|
2943
|
-
const rect = this.target.getBoundingClientRect();
|
|
2944
|
-
|
|
2945
3354
|
this.dispatchEvent( new Event( 'context' ) );
|
|
2946
3355
|
|
|
2947
|
-
this.
|
|
3356
|
+
this.open();
|
|
2948
3357
|
|
|
2949
3358
|
};
|
|
2950
3359
|
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
if ( this.visible === true && e.target.closest( 'f-menu' ) === null ) {
|
|
3360
|
+
this.target = target;
|
|
2954
3361
|
|
|
2955
|
-
|
|
3362
|
+
target.addEventListener( 'contextmenu', onContextMenu, false );
|
|
2956
3363
|
|
|
2957
|
-
|
|
3364
|
+
}
|
|
2958
3365
|
|
|
2959
|
-
|
|
3366
|
+
return this;
|
|
2960
3367
|
|
|
2961
|
-
|
|
3368
|
+
}
|
|
2962
3369
|
|
|
2963
|
-
|
|
2964
|
-
target.addEventListener( 'touchstart', onDown, true );
|
|
3370
|
+
show() {
|
|
2965
3371
|
|
|
2966
|
-
|
|
3372
|
+
if ( ! this.opened ) {
|
|
2967
3373
|
|
|
2968
|
-
|
|
3374
|
+
this.dom.style.left = '';
|
|
3375
|
+
this.dom.style.transform = '';
|
|
2969
3376
|
|
|
2970
3377
|
}
|
|
2971
3378
|
|
|
2972
|
-
|
|
3379
|
+
const domRect = this.dom.getBoundingClientRect();
|
|
2973
3380
|
|
|
2974
|
-
|
|
3381
|
+
let offsetX = Math.min( window.innerWidth - ( domRect.x + domRect.width + 10 ), 0 );
|
|
3382
|
+
let offsetY = Math.min( window.innerHeight - ( domRect.y + domRect.height + 10 ), 0 );
|
|
2975
3383
|
|
|
2976
|
-
|
|
3384
|
+
if ( this.opened ) {
|
|
2977
3385
|
|
|
2978
|
-
|
|
3386
|
+
if ( offsetX < 0 ) offsetX = - domRect.width;
|
|
3387
|
+
if ( offsetY < 0 ) offsetY = - domRect.height;
|
|
2979
3388
|
|
|
2980
|
-
|
|
3389
|
+
this.setPosition( domRect.x + offsetX, domRect.y + offsetY );
|
|
2981
3390
|
|
|
2982
|
-
|
|
3391
|
+
} else {
|
|
2983
3392
|
|
|
2984
|
-
|
|
3393
|
+
// flip submenus
|
|
2985
3394
|
|
|
2986
|
-
this.
|
|
3395
|
+
if ( offsetX < 0 ) this.dom.style.left = '-100%';
|
|
3396
|
+
if ( offsetY < 0 ) this.dom.style.transform = 'translateY( calc( 32px - 100% ) )';
|
|
3397
|
+
|
|
3398
|
+
}
|
|
3399
|
+
|
|
3400
|
+
return super.show();
|
|
3401
|
+
|
|
3402
|
+
}
|
|
3403
|
+
|
|
3404
|
+
hide() {
|
|
3405
|
+
|
|
3406
|
+
if ( this.opened ) {
|
|
3407
|
+
|
|
3408
|
+
lastContext = null;
|
|
2987
3409
|
|
|
2988
3410
|
}
|
|
2989
3411
|
|
|
2990
|
-
|
|
3412
|
+
return super.hide();
|
|
3413
|
+
|
|
3414
|
+
}
|
|
3415
|
+
|
|
3416
|
+
add( button, submenu = null ) {
|
|
2991
3417
|
|
|
2992
3418
|
button.addEventListener( 'click', this._onButtonClick );
|
|
2993
3419
|
button.addEventListener( 'mouseover', this._onButtonMouseOver );
|
|
2994
3420
|
|
|
2995
|
-
|
|
3421
|
+
return super.add( button, submenu );
|
|
2996
3422
|
|
|
2997
|
-
|
|
3423
|
+
}
|
|
2998
3424
|
|
|
2999
|
-
|
|
3425
|
+
get opened() {
|
|
3426
|
+
|
|
3427
|
+
return lastContext === this;
|
|
3000
3428
|
|
|
3001
3429
|
}
|
|
3002
3430
|
|
|
3003
|
-
|
|
3431
|
+
}
|
|
3004
3432
|
|
|
3005
|
-
|
|
3433
|
+
class CircleMenu extends Menu {
|
|
3006
3434
|
|
|
3007
|
-
|
|
3008
|
-
|
|
3435
|
+
constructor( target = null ) {
|
|
3436
|
+
|
|
3437
|
+
super( 'circle', target );
|
|
3438
|
+
|
|
3439
|
+
}
|
|
3440
|
+
|
|
3441
|
+
}
|
|
3442
|
+
|
|
3443
|
+
class Tips extends EventTarget {
|
|
3444
|
+
|
|
3445
|
+
constructor() {
|
|
3446
|
+
|
|
3447
|
+
super();
|
|
3448
|
+
|
|
3449
|
+
const dom = document.createElement( 'f-tips' );
|
|
3450
|
+
|
|
3451
|
+
this.dom = dom;
|
|
3452
|
+
|
|
3453
|
+
this.time = 0;
|
|
3454
|
+
this.duration = 3000;
|
|
3455
|
+
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3458
|
+
message( str ) {
|
|
3459
|
+
|
|
3460
|
+
return this.tip( str );
|
|
3461
|
+
|
|
3462
|
+
}
|
|
3463
|
+
|
|
3464
|
+
error( str ) {
|
|
3465
|
+
|
|
3466
|
+
return this.tip( str, 'error' );
|
|
3467
|
+
|
|
3468
|
+
}
|
|
3469
|
+
|
|
3470
|
+
tip( html, className = '' ) {
|
|
3471
|
+
|
|
3472
|
+
const dom = document.createElement( 'f-tip' );
|
|
3473
|
+
dom.className = className;
|
|
3474
|
+
dom.innerHTML = html;
|
|
3475
|
+
|
|
3476
|
+
this.dom.prepend( dom );
|
|
3477
|
+
|
|
3478
|
+
//requestAnimationFrame( () => dom.style.opacity = 1 );
|
|
3479
|
+
|
|
3480
|
+
this.time = Math.min( this.time + this.duration, this.duration );
|
|
3481
|
+
|
|
3482
|
+
setTimeout( () => {
|
|
3483
|
+
|
|
3484
|
+
this.time -= this.duration;
|
|
3485
|
+
|
|
3486
|
+
dom.style.opacity = 0;
|
|
3487
|
+
|
|
3488
|
+
setTimeout( () => dom.remove(), 250 );
|
|
3489
|
+
|
|
3490
|
+
}, this.time );
|
|
3009
3491
|
|
|
3010
3492
|
return this;
|
|
3011
3493
|
|
|
@@ -3013,57 +3495,312 @@ class Menu extends EventTarget {
|
|
|
3013
3495
|
|
|
3014
3496
|
}
|
|
3015
3497
|
|
|
3016
|
-
|
|
3498
|
+
const filterString = ( str ) => {
|
|
3017
3499
|
|
|
3018
|
-
|
|
3500
|
+
return str.trim().toLowerCase().replace( /\s\s+/g, ' ' );
|
|
3019
3501
|
|
|
3020
|
-
|
|
3502
|
+
};
|
|
3021
3503
|
|
|
3022
|
-
|
|
3504
|
+
class Search extends Menu {
|
|
3505
|
+
|
|
3506
|
+
constructor() {
|
|
3507
|
+
|
|
3508
|
+
super( 'search' );
|
|
3509
|
+
|
|
3510
|
+
this.events.submit = [];
|
|
3511
|
+
this.events.filter = [];
|
|
3512
|
+
|
|
3513
|
+
const inputDOM = document.createElement( 'input' );
|
|
3514
|
+
inputDOM.placeholder = 'Type here';
|
|
3515
|
+
|
|
3516
|
+
let filter = true;
|
|
3517
|
+
let filterNeedUpdate = true;
|
|
3518
|
+
|
|
3519
|
+
inputDOM.addEventListener( 'focusout', () => {
|
|
3520
|
+
|
|
3521
|
+
filterNeedUpdate = true;
|
|
3522
|
+
|
|
3523
|
+
this.setValue( '' );
|
|
3524
|
+
|
|
3525
|
+
} );
|
|
3526
|
+
|
|
3527
|
+
inputDOM.onkeydown = ( e ) => {
|
|
3528
|
+
|
|
3529
|
+
const keyCode = e.keyCode;
|
|
3530
|
+
|
|
3531
|
+
if ( keyCode === 38 ) {
|
|
3532
|
+
|
|
3533
|
+
const index = this.filteredIndex;
|
|
3534
|
+
|
|
3535
|
+
if ( this.forceAutoComplete ) {
|
|
3536
|
+
|
|
3537
|
+
this.filteredIndex = index !== null ? ( index + 1 ) % ( this.filtered.length || 1 ) : 0;
|
|
3538
|
+
|
|
3539
|
+
} else {
|
|
3540
|
+
|
|
3541
|
+
this.filteredIndex = index !== null ? Math.min( index + 1, this.filtered.length - 1 ) : 0;
|
|
3542
|
+
|
|
3543
|
+
}
|
|
3544
|
+
|
|
3545
|
+
e.preventDefault();
|
|
3546
|
+
|
|
3547
|
+
filter = false;
|
|
3548
|
+
|
|
3549
|
+
} else if ( keyCode === 40 ) {
|
|
3550
|
+
|
|
3551
|
+
const index = this.filteredIndex;
|
|
3552
|
+
|
|
3553
|
+
if ( this.forceAutoComplete ) {
|
|
3554
|
+
|
|
3555
|
+
this.filteredIndex = index - 1;
|
|
3556
|
+
|
|
3557
|
+
if ( this.filteredIndex === null ) this.filteredIndex = this.filtered.length - 1;
|
|
3558
|
+
|
|
3559
|
+
} else {
|
|
3560
|
+
|
|
3561
|
+
this.filteredIndex = index !== null ? index - 1 : null;
|
|
3562
|
+
|
|
3563
|
+
}
|
|
3564
|
+
|
|
3565
|
+
e.preventDefault();
|
|
3566
|
+
|
|
3567
|
+
filter = false;
|
|
3568
|
+
|
|
3569
|
+
} else if ( keyCode === 13 ) {
|
|
3570
|
+
|
|
3571
|
+
this.value = this.currentFiltered ? this.currentFiltered.button.getValue() : inputDOM.value;
|
|
3572
|
+
|
|
3573
|
+
this.submit();
|
|
3574
|
+
|
|
3575
|
+
e.preventDefault();
|
|
3576
|
+
|
|
3577
|
+
filter = false;
|
|
3578
|
+
|
|
3579
|
+
} else {
|
|
3580
|
+
|
|
3581
|
+
filter = true;
|
|
3582
|
+
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
};
|
|
3586
|
+
|
|
3587
|
+
inputDOM.onkeyup = () => {
|
|
3588
|
+
|
|
3589
|
+
if ( filter ) {
|
|
3590
|
+
|
|
3591
|
+
if ( filterNeedUpdate ) {
|
|
3592
|
+
|
|
3593
|
+
this.dispatchEvent( new Event( 'filter' ) );
|
|
3594
|
+
|
|
3595
|
+
filterNeedUpdate = false;
|
|
3596
|
+
|
|
3597
|
+
}
|
|
3598
|
+
|
|
3599
|
+
this.filter( inputDOM.value );
|
|
3600
|
+
|
|
3601
|
+
}
|
|
3602
|
+
|
|
3603
|
+
};
|
|
3604
|
+
|
|
3605
|
+
this.filtered = [];
|
|
3606
|
+
this.currentFiltered = null;
|
|
3607
|
+
|
|
3608
|
+
this.value = '';
|
|
3609
|
+
|
|
3610
|
+
this.forceAutoComplete = false;
|
|
3611
|
+
|
|
3612
|
+
this.dom.append( inputDOM );
|
|
3613
|
+
|
|
3614
|
+
this.inputDOM = inputDOM;
|
|
3615
|
+
|
|
3616
|
+
this.addEventListener( 'filter', ( ) => {
|
|
3617
|
+
|
|
3618
|
+
dispatchEventList( this.events.filter, this );
|
|
3619
|
+
|
|
3620
|
+
} );
|
|
3621
|
+
|
|
3622
|
+
this.addEventListener( 'submit', ( ) => {
|
|
3623
|
+
|
|
3624
|
+
dispatchEventList( this.events.submit, this );
|
|
3625
|
+
|
|
3626
|
+
} );
|
|
3023
3627
|
|
|
3024
3628
|
}
|
|
3025
3629
|
|
|
3026
|
-
|
|
3630
|
+
submit() {
|
|
3027
3631
|
|
|
3028
|
-
|
|
3632
|
+
this.dispatchEvent( new Event( 'submit' ) );
|
|
3029
3633
|
|
|
3030
|
-
|
|
3634
|
+
return this.setValue( '' );
|
|
3635
|
+
|
|
3636
|
+
}
|
|
3637
|
+
|
|
3638
|
+
setValue( value ) {
|
|
3639
|
+
|
|
3640
|
+
this.inputDOM.value = value;
|
|
3641
|
+
|
|
3642
|
+
this.filter( value );
|
|
3643
|
+
|
|
3644
|
+
return this;
|
|
3645
|
+
|
|
3646
|
+
}
|
|
3647
|
+
|
|
3648
|
+
getValue() {
|
|
3649
|
+
|
|
3650
|
+
return this.value;
|
|
3651
|
+
|
|
3652
|
+
}
|
|
3653
|
+
|
|
3654
|
+
onFilter( callback ) {
|
|
3655
|
+
|
|
3656
|
+
this.events.filter.push( callback );
|
|
3657
|
+
|
|
3658
|
+
return this;
|
|
3659
|
+
|
|
3660
|
+
}
|
|
3661
|
+
|
|
3662
|
+
onSubmit( callback ) {
|
|
3663
|
+
|
|
3664
|
+
this.events.submit.push( callback );
|
|
3665
|
+
|
|
3666
|
+
return this;
|
|
3667
|
+
|
|
3668
|
+
}
|
|
3669
|
+
|
|
3670
|
+
getFilterByButton( button ) {
|
|
3671
|
+
|
|
3672
|
+
for ( const filter of this.filtered ) {
|
|
3673
|
+
|
|
3674
|
+
if ( filter.button === button ) {
|
|
3675
|
+
|
|
3676
|
+
return filter;
|
|
3677
|
+
|
|
3678
|
+
}
|
|
3031
3679
|
|
|
3032
3680
|
}
|
|
3033
3681
|
|
|
3034
|
-
|
|
3682
|
+
return null;
|
|
3683
|
+
|
|
3684
|
+
}
|
|
3685
|
+
|
|
3686
|
+
add( button ) {
|
|
3687
|
+
|
|
3688
|
+
super.add( button );
|
|
3689
|
+
|
|
3690
|
+
const onDown = () => {
|
|
3035
3691
|
|
|
3036
|
-
|
|
3692
|
+
const filter = this.getFilterByButton( button );
|
|
3693
|
+
|
|
3694
|
+
this.filteredIndex = this.filtered.indexOf( filter );
|
|
3695
|
+
this.value = button.getValue();
|
|
3696
|
+
|
|
3697
|
+
this.submit();
|
|
3698
|
+
|
|
3699
|
+
};
|
|
3700
|
+
|
|
3701
|
+
button.dom.addEventListener( 'mousedown', onDown );
|
|
3702
|
+
button.dom.addEventListener( 'touchstart', onDown );
|
|
3703
|
+
|
|
3704
|
+
this.domButtons.get( button ).remove();
|
|
3705
|
+
|
|
3706
|
+
return this;
|
|
3037
3707
|
|
|
3038
3708
|
}
|
|
3039
3709
|
|
|
3040
|
-
|
|
3710
|
+
set filteredIndex( index ) {
|
|
3041
3711
|
|
|
3042
|
-
if (
|
|
3712
|
+
if ( this.currentFiltered ) {
|
|
3043
3713
|
|
|
3044
|
-
|
|
3714
|
+
const buttonDOM = this.domButtons.get( this.currentFiltered.button );
|
|
3715
|
+
|
|
3716
|
+
buttonDOM.classList.remove( 'active' );
|
|
3717
|
+
|
|
3718
|
+
this.currentFiltered = null;
|
|
3045
3719
|
|
|
3046
3720
|
}
|
|
3047
3721
|
|
|
3048
|
-
|
|
3722
|
+
const filteredItem = this.filtered[ index ];
|
|
3723
|
+
|
|
3724
|
+
if ( filteredItem ) {
|
|
3725
|
+
|
|
3726
|
+
const buttonDOM = this.domButtons.get( filteredItem.button );
|
|
3727
|
+
|
|
3728
|
+
buttonDOM.classList.add( 'active' );
|
|
3729
|
+
|
|
3730
|
+
this.currentFiltered = filteredItem;
|
|
3731
|
+
|
|
3732
|
+
}
|
|
3733
|
+
|
|
3734
|
+
this.updateFilter();
|
|
3049
3735
|
|
|
3050
3736
|
}
|
|
3051
3737
|
|
|
3052
|
-
|
|
3738
|
+
get filteredIndex() {
|
|
3053
3739
|
|
|
3054
|
-
|
|
3740
|
+
return this.currentFiltered ? this.filtered.indexOf( this.currentFiltered ) : null;
|
|
3055
3741
|
|
|
3056
|
-
|
|
3742
|
+
}
|
|
3057
3743
|
|
|
3058
|
-
|
|
3744
|
+
filter( text ) {
|
|
3745
|
+
|
|
3746
|
+
text = filterString( text );
|
|
3747
|
+
|
|
3748
|
+
const filtered = [];
|
|
3749
|
+
|
|
3750
|
+
for ( const button of this.buttons ) {
|
|
3751
|
+
|
|
3752
|
+
const buttonDOM = this.domButtons.get( button );
|
|
3753
|
+
|
|
3754
|
+
buttonDOM.remove();
|
|
3755
|
+
|
|
3756
|
+
const label = filterString( button.getValue() );
|
|
3757
|
+
|
|
3758
|
+
if ( text && label.includes( text ) === true ) {
|
|
3759
|
+
|
|
3760
|
+
const score = text.length / label.length;
|
|
3761
|
+
|
|
3762
|
+
filtered.push( {
|
|
3763
|
+
button,
|
|
3764
|
+
score
|
|
3765
|
+
} );
|
|
3766
|
+
|
|
3767
|
+
}
|
|
3768
|
+
|
|
3769
|
+
}
|
|
3770
|
+
|
|
3771
|
+
filtered.sort( ( a, b ) => b.score - a.score );
|
|
3772
|
+
|
|
3773
|
+
this.filtered = filtered;
|
|
3774
|
+
this.filteredIndex = this.forceAutoComplete ? 0 : null;
|
|
3059
3775
|
|
|
3060
3776
|
}
|
|
3061
|
-
|
|
3777
|
+
|
|
3778
|
+
updateFilter() {
|
|
3779
|
+
|
|
3780
|
+
const filteredIndex = Math.min( this.filteredIndex, this.filteredIndex - 3 );
|
|
3781
|
+
|
|
3782
|
+
for ( let i = 0; i < this.filtered.length; i ++ ) {
|
|
3783
|
+
|
|
3784
|
+
const button = this.filtered[ i ].button;
|
|
3785
|
+
const buttonDOM = this.domButtons.get( button );
|
|
3786
|
+
|
|
3787
|
+
buttonDOM.remove();
|
|
3788
|
+
|
|
3789
|
+
if ( i >= filteredIndex ) {
|
|
3790
|
+
|
|
3791
|
+
this.listDOM.append( buttonDOM );
|
|
3792
|
+
|
|
3793
|
+
}
|
|
3794
|
+
|
|
3795
|
+
}
|
|
3796
|
+
|
|
3797
|
+
}
|
|
3798
|
+
|
|
3062
3799
|
}
|
|
3063
3800
|
|
|
3064
3801
|
class SelectInput extends Input {
|
|
3065
3802
|
|
|
3066
|
-
constructor( options = [] ) {
|
|
3803
|
+
constructor( options = [], value = null ) {
|
|
3067
3804
|
|
|
3068
3805
|
const dom = document.createElement( 'select' );
|
|
3069
3806
|
super( dom );
|
|
@@ -3074,16 +3811,24 @@ class SelectInput extends Input {
|
|
|
3074
3811
|
|
|
3075
3812
|
};
|
|
3076
3813
|
|
|
3077
|
-
|
|
3814
|
+
dom.onmousedown = dom.ontouchstart = () => {
|
|
3815
|
+
|
|
3816
|
+
this.dispatchEvent( new Event( 'click' ) );
|
|
3817
|
+
|
|
3818
|
+
};
|
|
3819
|
+
|
|
3820
|
+
this.setOptions( options, value );
|
|
3078
3821
|
|
|
3079
3822
|
}
|
|
3080
3823
|
|
|
3081
|
-
setOptions( options ) {
|
|
3824
|
+
setOptions( options, value = null ) {
|
|
3082
3825
|
|
|
3083
3826
|
const dom = this.dom;
|
|
3827
|
+
const defaultValue = dom.value;
|
|
3084
3828
|
|
|
3085
|
-
|
|
3829
|
+
let containsDefaultValue = false;
|
|
3086
3830
|
|
|
3831
|
+
this.options = options;
|
|
3087
3832
|
dom.innerHTML = '';
|
|
3088
3833
|
|
|
3089
3834
|
for ( let index = 0; index < options.length; index ++ ) {
|
|
@@ -3100,10 +3845,18 @@ class SelectInput extends Input {
|
|
|
3100
3845
|
option.innerText = opt.name;
|
|
3101
3846
|
option.value = opt.value;
|
|
3102
3847
|
|
|
3103
|
-
|
|
3848
|
+
if ( containsDefaultValue === false && defaultValue === opt.value ) {
|
|
3849
|
+
|
|
3850
|
+
containsDefaultValue = true;
|
|
3851
|
+
|
|
3852
|
+
}
|
|
3853
|
+
|
|
3854
|
+
dom.append( option );
|
|
3104
3855
|
|
|
3105
3856
|
}
|
|
3106
3857
|
|
|
3858
|
+
dom.value = value !== null ? value : containsDefaultValue ? defaultValue : '';
|
|
3859
|
+
|
|
3107
3860
|
return this;
|
|
3108
3861
|
|
|
3109
3862
|
}
|
|
@@ -3126,7 +3879,7 @@ class SelectInput extends Input {
|
|
|
3126
3879
|
|
|
3127
3880
|
const currentOptions = this.options;
|
|
3128
3881
|
|
|
3129
|
-
if ( currentOptions.length
|
|
3882
|
+
if ( currentOptions.length === 0 ) {
|
|
3130
3883
|
|
|
3131
3884
|
this.setOptions( data.options );
|
|
3132
3885
|
|
|
@@ -3149,6 +3902,9 @@ class ToggleInput extends Input {
|
|
|
3149
3902
|
dom.className = 'toggle';
|
|
3150
3903
|
dom.checked = value;
|
|
3151
3904
|
|
|
3905
|
+
dom.onclick = () => this.dispatchEvent( new Event( 'click' ) );
|
|
3906
|
+
dom.onchange = () => this.dispatchEvent( new Event( 'change' ) );
|
|
3907
|
+
|
|
3152
3908
|
}
|
|
3153
3909
|
|
|
3154
3910
|
setValue( val ) {
|
|
@@ -3169,7 +3925,7 @@ class ToggleInput extends Input {
|
|
|
3169
3925
|
|
|
3170
3926
|
}
|
|
3171
3927
|
|
|
3172
|
-
var Flow = /*#__PURE__*/Object.freeze({
|
|
3928
|
+
var Flow = /*#__PURE__*/Object.freeze( {
|
|
3173
3929
|
__proto__: null,
|
|
3174
3930
|
Element: Element,
|
|
3175
3931
|
Input: Input,
|
|
@@ -3182,6 +3938,8 @@ var Flow = /*#__PURE__*/Object.freeze({
|
|
|
3182
3938
|
Menu: Menu,
|
|
3183
3939
|
ContextMenu: ContextMenu,
|
|
3184
3940
|
CircleMenu: CircleMenu,
|
|
3941
|
+
Tips: Tips,
|
|
3942
|
+
Search: Search,
|
|
3185
3943
|
DraggableElement: DraggableElement,
|
|
3186
3944
|
LabelElement: LabelElement,
|
|
3187
3945
|
TitleElement: TitleElement,
|
|
@@ -3193,7 +3951,7 @@ var Flow = /*#__PURE__*/Object.freeze({
|
|
|
3193
3951
|
StringInput: StringInput,
|
|
3194
3952
|
TextInput: TextInput,
|
|
3195
3953
|
ToggleInput: ToggleInput
|
|
3196
|
-
});
|
|
3954
|
+
} );
|
|
3197
3955
|
|
|
3198
3956
|
class Loader extends EventTarget {
|
|
3199
3957
|
|
|
@@ -3291,6 +4049,12 @@ class Loader extends EventTarget {
|
|
|
3291
4049
|
|
|
3292
4050
|
const Class = lib && lib[ obj.type ] ? lib[ obj.type ] : Flow[ obj.type ];
|
|
3293
4051
|
|
|
4052
|
+
if ( ! Class ) {
|
|
4053
|
+
|
|
4054
|
+
console.error( `Class "${ obj.type }" not found!` );
|
|
4055
|
+
|
|
4056
|
+
}
|
|
4057
|
+
|
|
3294
4058
|
objects[ id ] = new Class();
|
|
3295
4059
|
|
|
3296
4060
|
}
|
|
@@ -3335,4 +4099,4 @@ class Loader extends EventTarget {
|
|
|
3335
4099
|
Loader.DEFAULT = 'default';
|
|
3336
4100
|
Loader.OBJECTS = 'objects';
|
|
3337
4101
|
|
|
3338
|
-
export { ButtonInput, Canvas, CircleMenu, ColorInput, ContextMenu, DraggableElement, Element, Input, LabelElement, Loader, Menu, Node, NumberInput, ObjectNode, PanelNode, REVISION, SelectInput, Serializer, SliderInput, StringInput, Styles, TextInput, TitleElement, ToggleInput, Utils };
|
|
4102
|
+
export { ButtonInput, Canvas, CircleMenu, ColorInput, ContextMenu, DraggableElement, Element, Input, LabelElement, Loader, Menu, Node, NumberInput, ObjectNode, PanelNode, REVISION, Search, SelectInput, Serializer, SliderInput, StringInput, Styles, TextInput, Tips, TitleElement, ToggleInput, Utils };
|