super-three 0.135.0 → 0.136.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/build/three.js +527 -332
- package/build/three.min.js +1 -1
- package/build/three.module.js +752 -370
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +38 -52
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +1 -1
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +1 -2
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +3 -4
- package/examples/js/loaders/GLTFLoader.js +2 -2
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +11 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +1 -1
- package/examples/js/loaders/RGBELoader.js +0 -15
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +2 -2
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -29
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +27 -56
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +256 -136
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +1 -2
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +3 -4
- package/examples/jsm/loaders/GLTFLoader.js +2 -2
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +13 -4
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +30 -9
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +23 -22
- package/examples/jsm/node-editor/examples/rim.json +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +48 -9
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +1 -0
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -116
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/GlitchPass.js +3 -1
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -0
- package/examples/jsm/renderers/nodes/Nodes.js +1 -0
- package/examples/jsm/renderers/nodes/ShaderNode.js +7 -6
- package/examples/jsm/renderers/nodes/core/InputNode.js +1 -1
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +1 -1
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +26 -31
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +2 -2
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +1 -1
- package/examples/jsm/renderers/nodes/math/MathNode.js +5 -3
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +2 -2
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +7 -6
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +42 -61
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +0 -1
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +30 -4
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -32
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/package.json +15 -9
- package/src/Three.Legacy.js +12 -0
- package/src/Three.js +1 -2
- package/src/constants.js +1 -7
- package/src/core/Object3D.js +1 -1
- package/src/extras/PMREMGenerator.js +19 -110
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +23 -6
- package/src/math/Color.js +0 -38
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLRenderer.js +23 -16
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -47
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +27 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +2 -19
- package/src/renderers/webgl/WebGLPrograms.js +191 -35
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLState.js +45 -0
- package/src/renderers/webgl/WebGLTextures.js +195 -26
- package/src/renderers/webxr/WebXRManager.js +10 -3
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/utils.js +1 -37
|
@@ -16,10 +16,17 @@ function __flow__addCSS( css ) {
|
|
|
16
16
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
__flow__addCSS( `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;}@keyframes f-open { 0% { transform: scale(.5); filter: blur(30px); } 100% { transform: scale(1); filter: unset }}f-node { animation: .2s f-open 1 alternate ease-out;}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 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-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-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 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;}` );
|
|
20
20
|
|
|
21
21
|
const REVISION = '1';
|
|
22
22
|
|
|
23
|
+
const Styles = {
|
|
24
|
+
icons: {
|
|
25
|
+
close: '',
|
|
26
|
+
unlink: ''
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
23
30
|
let _id = 0;
|
|
24
31
|
|
|
25
32
|
class Serializer extends EventTarget {
|
|
@@ -400,6 +407,8 @@ class Element extends Serializer {
|
|
|
400
407
|
|
|
401
408
|
this.extra = null;
|
|
402
409
|
|
|
410
|
+
this.enabledInputs = true;
|
|
411
|
+
|
|
403
412
|
this.visible = true;
|
|
404
413
|
|
|
405
414
|
this.inputsDOM = dom;
|
|
@@ -472,6 +481,26 @@ class Element extends Serializer {
|
|
|
472
481
|
|
|
473
482
|
}
|
|
474
483
|
|
|
484
|
+
setEnabledInputs( value ) {
|
|
485
|
+
|
|
486
|
+
const dom = this.dom;
|
|
487
|
+
|
|
488
|
+
if ( !this.enabledInputs ) dom.classList.remove( 'inputs-disable');
|
|
489
|
+
|
|
490
|
+
if ( !value ) dom.classList.add( 'inputs-disable' );
|
|
491
|
+
|
|
492
|
+
this.enabledInputs = value;
|
|
493
|
+
|
|
494
|
+
return this;
|
|
495
|
+
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
getEnabledInputs() {
|
|
499
|
+
|
|
500
|
+
return this.enabledInputs;
|
|
501
|
+
|
|
502
|
+
}
|
|
503
|
+
|
|
475
504
|
setStyle( style ) {
|
|
476
505
|
|
|
477
506
|
const dom = this.dom;
|
|
@@ -607,7 +636,8 @@ class Element extends Serializer {
|
|
|
607
636
|
if ( this.disconnectDOM === null ) {
|
|
608
637
|
|
|
609
638
|
this.disconnectDOM = document.createElement( 'f-disconnect' );
|
|
610
|
-
this.disconnectDOM.
|
|
639
|
+
this.disconnectDOM.innerHTML = Styles.icons.unlink ? `<i class='${ Styles.icons.unlink }'></i>` : '✖';
|
|
640
|
+
|
|
611
641
|
this.dom.appendChild( this.disconnectDOM );
|
|
612
642
|
|
|
613
643
|
const onDisconnect = () => {
|
|
@@ -618,6 +648,7 @@ class Element extends Serializer {
|
|
|
618
648
|
this.disconnectDOM.removeEventListener( 'mousedown', onClick, true );
|
|
619
649
|
this.disconnectDOM.removeEventListener( 'touchstart', onClick, true );
|
|
620
650
|
this.disconnectDOM.removeEventListener( 'disconnect', onDisconnect, true );
|
|
651
|
+
|
|
621
652
|
element.removeEventListener( 'connect', onConnect );
|
|
622
653
|
element.removeEventListener( 'connectChildren', onConnect );
|
|
623
654
|
element.removeEventListener( 'nodeConnect', onConnect );
|
|
@@ -1052,7 +1083,7 @@ class Node extends Serializer {
|
|
|
1052
1083
|
'blur': []
|
|
1053
1084
|
};
|
|
1054
1085
|
|
|
1055
|
-
this.setPosition( 0, 0 );
|
|
1086
|
+
this.setWidth( 300 ).setPosition( 0, 0 );
|
|
1056
1087
|
|
|
1057
1088
|
}
|
|
1058
1089
|
|
|
@@ -1118,7 +1149,7 @@ class Node extends Serializer {
|
|
|
1118
1149
|
|
|
1119
1150
|
getWidth() {
|
|
1120
1151
|
|
|
1121
|
-
return this.dom.style.width;
|
|
1152
|
+
return parseInt( this.dom.style.width );
|
|
1122
1153
|
|
|
1123
1154
|
}
|
|
1124
1155
|
|
|
@@ -1264,6 +1295,135 @@ class Node extends Serializer {
|
|
|
1264
1295
|
|
|
1265
1296
|
Node.prototype.isNode = true;
|
|
1266
1297
|
|
|
1298
|
+
class DraggableElement extends Element {
|
|
1299
|
+
|
|
1300
|
+
constructor( draggable = true ) {
|
|
1301
|
+
|
|
1302
|
+
super( true );
|
|
1303
|
+
|
|
1304
|
+
this.draggable = draggable;
|
|
1305
|
+
|
|
1306
|
+
const onDrag = ( e ) => {
|
|
1307
|
+
|
|
1308
|
+
e.preventDefault();
|
|
1309
|
+
|
|
1310
|
+
if ( this.draggable === true ) {
|
|
1311
|
+
|
|
1312
|
+
draggableDOM( this.node.dom );
|
|
1313
|
+
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
};
|
|
1317
|
+
|
|
1318
|
+
const { dom } = this;
|
|
1319
|
+
|
|
1320
|
+
dom.addEventListener( 'mousedown', onDrag, true );
|
|
1321
|
+
dom.addEventListener( 'touchstart', onDrag, true );
|
|
1322
|
+
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
class TitleElement extends DraggableElement {
|
|
1328
|
+
|
|
1329
|
+
constructor( title, draggable = true ) {
|
|
1330
|
+
|
|
1331
|
+
super( draggable );
|
|
1332
|
+
|
|
1333
|
+
const { dom } = this;
|
|
1334
|
+
|
|
1335
|
+
dom.className = 'title';
|
|
1336
|
+
|
|
1337
|
+
const spanDOM = document.createElement( 'span' );
|
|
1338
|
+
spanDOM.innerText = title;
|
|
1339
|
+
|
|
1340
|
+
const iconDOM = document.createElement( 'i' );
|
|
1341
|
+
|
|
1342
|
+
const toolbarDOM = document.createElement( 'f-toolbar' );
|
|
1343
|
+
|
|
1344
|
+
this.buttons = [];
|
|
1345
|
+
|
|
1346
|
+
this.spanDOM = spanDOM;
|
|
1347
|
+
this.iconDOM = iconDOM;
|
|
1348
|
+
this.toolbarDOM = toolbarDOM;
|
|
1349
|
+
|
|
1350
|
+
dom.appendChild( spanDOM );
|
|
1351
|
+
dom.appendChild( iconDOM );
|
|
1352
|
+
dom.appendChild( toolbarDOM );
|
|
1353
|
+
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
setIcon( value ) {
|
|
1357
|
+
|
|
1358
|
+
this.iconDOM.className = value;
|
|
1359
|
+
|
|
1360
|
+
return this;
|
|
1361
|
+
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
getIcon() {
|
|
1365
|
+
|
|
1366
|
+
return this.iconDOM.className;
|
|
1367
|
+
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
setTitle( value ) {
|
|
1371
|
+
|
|
1372
|
+
this.spanDOM.innerText = value;
|
|
1373
|
+
|
|
1374
|
+
return this;
|
|
1375
|
+
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
getTitle() {
|
|
1379
|
+
|
|
1380
|
+
return this.spanDOM.innerText;
|
|
1381
|
+
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
addButton( button ) {
|
|
1385
|
+
|
|
1386
|
+
this.buttons.push( button );
|
|
1387
|
+
|
|
1388
|
+
this.toolbarDOM.appendChild( button.dom );
|
|
1389
|
+
|
|
1390
|
+
return this;
|
|
1391
|
+
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
serialize( data ) {
|
|
1395
|
+
|
|
1396
|
+
super.serialize( data );
|
|
1397
|
+
|
|
1398
|
+
const title = this.getTitle();
|
|
1399
|
+
const icon = this.getIcon();
|
|
1400
|
+
|
|
1401
|
+
data.title = title;
|
|
1402
|
+
|
|
1403
|
+
if ( icon !== '' ) {
|
|
1404
|
+
|
|
1405
|
+
data.icon = icon;
|
|
1406
|
+
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
deserialize( data ) {
|
|
1412
|
+
|
|
1413
|
+
super.deserialize( data );
|
|
1414
|
+
|
|
1415
|
+
this.setTitle( data.title );
|
|
1416
|
+
|
|
1417
|
+
if ( data.icon !== undefined ) {
|
|
1418
|
+
|
|
1419
|
+
this.setIcon( data.icon );
|
|
1420
|
+
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1267
1427
|
const drawLine = ( p1x, p1y, p2x, p2y, invert, size, color, ctx ) => {
|
|
1268
1428
|
|
|
1269
1429
|
const offset = 100 * ( invert ? - 1 : 1 );
|
|
@@ -1290,6 +1450,8 @@ const colors = [
|
|
|
1290
1450
|
'#4444ff'
|
|
1291
1451
|
];
|
|
1292
1452
|
|
|
1453
|
+
const dropNode = new Node().add( new TitleElement( 'File' ) ).setWidth( 250 );
|
|
1454
|
+
|
|
1293
1455
|
class Canvas extends Serializer {
|
|
1294
1456
|
|
|
1295
1457
|
constructor() {
|
|
@@ -1299,6 +1461,8 @@ class Canvas extends Serializer {
|
|
|
1299
1461
|
const dom = document.createElement( 'f-canvas' );
|
|
1300
1462
|
const contentDOM = document.createElement( 'f-content' );
|
|
1301
1463
|
const areaDOM = document.createElement( 'f-area' );
|
|
1464
|
+
const dropDOM = document.createElement( 'f-drop' );
|
|
1465
|
+
|
|
1302
1466
|
const canvas = document.createElement( 'canvas' );
|
|
1303
1467
|
const frontCanvas = document.createElement( 'canvas' );
|
|
1304
1468
|
|
|
@@ -1309,6 +1473,7 @@ class Canvas extends Serializer {
|
|
|
1309
1473
|
|
|
1310
1474
|
this.contentDOM = contentDOM;
|
|
1311
1475
|
this.areaDOM = areaDOM;
|
|
1476
|
+
this.dropDOM = dropDOM;
|
|
1312
1477
|
|
|
1313
1478
|
this.canvas = canvas;
|
|
1314
1479
|
this.frontCanvas = frontCanvas;
|
|
@@ -1333,6 +1498,12 @@ class Canvas extends Serializer {
|
|
|
1333
1498
|
|
|
1334
1499
|
this.updating = false;
|
|
1335
1500
|
|
|
1501
|
+
this.droppedItems = [];
|
|
1502
|
+
|
|
1503
|
+
this.events = {
|
|
1504
|
+
'drop': []
|
|
1505
|
+
};
|
|
1506
|
+
|
|
1336
1507
|
frontCanvas.className = 'front';
|
|
1337
1508
|
|
|
1338
1509
|
contentDOM.style.left = toPX( this.centerX );
|
|
@@ -1341,6 +1512,9 @@ class Canvas extends Serializer {
|
|
|
1341
1512
|
areaDOM.style.width = `calc( 100% + ${ this.width }px )`;
|
|
1342
1513
|
areaDOM.style.height = `calc( 100% + ${ this.height }px )`;
|
|
1343
1514
|
|
|
1515
|
+
dropDOM.innerHTML = '<span>drop your file</span>';
|
|
1516
|
+
|
|
1517
|
+
dom.appendChild( dropDOM );
|
|
1344
1518
|
dom.appendChild( canvas );
|
|
1345
1519
|
dom.appendChild( frontCanvas );
|
|
1346
1520
|
dom.appendChild( contentDOM );
|
|
@@ -1417,6 +1591,68 @@ class Canvas extends Serializer {
|
|
|
1417
1591
|
dom.addEventListener( 'touchmove', onZoom );
|
|
1418
1592
|
//dom.addEventListener( 'touchstart', onZoomStart );
|
|
1419
1593
|
|
|
1594
|
+
let dropEnterCount = 0;
|
|
1595
|
+
|
|
1596
|
+
const dragState = ( enter ) => {
|
|
1597
|
+
|
|
1598
|
+
if ( enter ) {
|
|
1599
|
+
|
|
1600
|
+
if ( dropEnterCount ++ === 0 ) {
|
|
1601
|
+
|
|
1602
|
+
this.droppedItems = [];
|
|
1603
|
+
|
|
1604
|
+
dropDOM.classList.add( 'visible' );
|
|
1605
|
+
|
|
1606
|
+
this.add( dropNode );
|
|
1607
|
+
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
} else if ( -- dropEnterCount === 0 ) {
|
|
1611
|
+
|
|
1612
|
+
dropDOM.classList.remove( 'visible' );
|
|
1613
|
+
|
|
1614
|
+
this.remove( dropNode );
|
|
1615
|
+
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
};
|
|
1619
|
+
|
|
1620
|
+
dom.addEventListener( 'dragenter', () => {
|
|
1621
|
+
|
|
1622
|
+
dragState( true );
|
|
1623
|
+
|
|
1624
|
+
} );
|
|
1625
|
+
|
|
1626
|
+
dom.addEventListener( 'dragleave', () => {
|
|
1627
|
+
|
|
1628
|
+
dragState( false );
|
|
1629
|
+
|
|
1630
|
+
} );
|
|
1631
|
+
|
|
1632
|
+
dom.addEventListener( 'dragover', ( e ) => {
|
|
1633
|
+
|
|
1634
|
+
e.preventDefault();
|
|
1635
|
+
|
|
1636
|
+
const { relativeClientX, relativeClientY } = this;
|
|
1637
|
+
|
|
1638
|
+
const centerNodeX = dropNode.getWidth() / 2;
|
|
1639
|
+
|
|
1640
|
+
dropNode.setPosition( relativeClientX - centerNodeX, relativeClientY - 20 );
|
|
1641
|
+
|
|
1642
|
+
} );
|
|
1643
|
+
|
|
1644
|
+
dom.addEventListener( 'drop', ( e ) => {
|
|
1645
|
+
|
|
1646
|
+
e.preventDefault();
|
|
1647
|
+
|
|
1648
|
+
dragState( false );
|
|
1649
|
+
|
|
1650
|
+
this.droppedItems = e.dataTransfer.items;
|
|
1651
|
+
|
|
1652
|
+
dispatchEventList( this.events.drop, this );
|
|
1653
|
+
|
|
1654
|
+
} );
|
|
1655
|
+
|
|
1420
1656
|
draggableDOM( dom, ( data ) => {
|
|
1421
1657
|
|
|
1422
1658
|
const { delta, isTouch } = data;
|
|
@@ -1506,6 +1742,14 @@ class Canvas extends Serializer {
|
|
|
1506
1742
|
|
|
1507
1743
|
}
|
|
1508
1744
|
|
|
1745
|
+
onDrop( callback ) {
|
|
1746
|
+
|
|
1747
|
+
this.events.drop.push( callback );
|
|
1748
|
+
|
|
1749
|
+
return this;
|
|
1750
|
+
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1509
1753
|
start() {
|
|
1510
1754
|
|
|
1511
1755
|
this.updating = true;
|
|
@@ -1518,6 +1762,8 @@ class Canvas extends Serializer {
|
|
|
1518
1762
|
document.addEventListener( 'mousemove', this._onMoveEvent, true );
|
|
1519
1763
|
document.addEventListener( 'touchmove', this._onMoveEvent, true );
|
|
1520
1764
|
|
|
1765
|
+
document.addEventListener( 'dragover', this._onMoveEvent, true );
|
|
1766
|
+
|
|
1521
1767
|
document.addEventListener( 'DOMContentLoaded', this._onContentLoaded );
|
|
1522
1768
|
|
|
1523
1769
|
requestAnimationFrame( this._onUpdate );
|
|
@@ -1536,6 +1782,8 @@ class Canvas extends Serializer {
|
|
|
1536
1782
|
document.removeEventListener( 'mousemove', this._onMoveEvent, true );
|
|
1537
1783
|
document.removeEventListener( 'touchmove', this._onMoveEvent, true );
|
|
1538
1784
|
|
|
1785
|
+
document.removeEventListener( 'dragover', this._onMoveEvent, true );
|
|
1786
|
+
|
|
1539
1787
|
document.removeEventListener( 'DOMContentLoaded', this._onContentLoaded );
|
|
1540
1788
|
|
|
1541
1789
|
}
|
|
@@ -1899,135 +2147,6 @@ class ButtonInput extends Input {
|
|
|
1899
2147
|
|
|
1900
2148
|
}
|
|
1901
2149
|
|
|
1902
|
-
class DraggableElement extends Element {
|
|
1903
|
-
|
|
1904
|
-
constructor( draggable = true ) {
|
|
1905
|
-
|
|
1906
|
-
super( true );
|
|
1907
|
-
|
|
1908
|
-
this.draggable = draggable;
|
|
1909
|
-
|
|
1910
|
-
const onDrag = ( e ) => {
|
|
1911
|
-
|
|
1912
|
-
e.preventDefault();
|
|
1913
|
-
|
|
1914
|
-
if ( this.draggable === true ) {
|
|
1915
|
-
|
|
1916
|
-
draggableDOM( this.node.dom );
|
|
1917
|
-
|
|
1918
|
-
}
|
|
1919
|
-
|
|
1920
|
-
};
|
|
1921
|
-
|
|
1922
|
-
const { dom } = this;
|
|
1923
|
-
|
|
1924
|
-
dom.addEventListener( 'mousedown', onDrag, true );
|
|
1925
|
-
dom.addEventListener( 'touchstart', onDrag, true );
|
|
1926
|
-
|
|
1927
|
-
}
|
|
1928
|
-
|
|
1929
|
-
}
|
|
1930
|
-
|
|
1931
|
-
class TitleElement extends DraggableElement {
|
|
1932
|
-
|
|
1933
|
-
constructor( title, draggable = true ) {
|
|
1934
|
-
|
|
1935
|
-
super( draggable );
|
|
1936
|
-
|
|
1937
|
-
const { dom } = this;
|
|
1938
|
-
|
|
1939
|
-
dom.className = 'title';
|
|
1940
|
-
|
|
1941
|
-
const spanDOM = document.createElement( 'span' );
|
|
1942
|
-
spanDOM.innerText = title;
|
|
1943
|
-
|
|
1944
|
-
const iconDOM = document.createElement( 'i' );
|
|
1945
|
-
|
|
1946
|
-
const toolbarDOM = document.createElement( 'f-toolbar' );
|
|
1947
|
-
|
|
1948
|
-
this.buttons = [];
|
|
1949
|
-
|
|
1950
|
-
this.spanDOM = spanDOM;
|
|
1951
|
-
this.iconDOM = iconDOM;
|
|
1952
|
-
this.toolbarDOM = toolbarDOM;
|
|
1953
|
-
|
|
1954
|
-
dom.appendChild( spanDOM );
|
|
1955
|
-
dom.appendChild( iconDOM );
|
|
1956
|
-
dom.appendChild( toolbarDOM );
|
|
1957
|
-
|
|
1958
|
-
}
|
|
1959
|
-
|
|
1960
|
-
setIcon( value ) {
|
|
1961
|
-
|
|
1962
|
-
this.iconDOM.className = value;
|
|
1963
|
-
|
|
1964
|
-
return this;
|
|
1965
|
-
|
|
1966
|
-
}
|
|
1967
|
-
|
|
1968
|
-
getIcon() {
|
|
1969
|
-
|
|
1970
|
-
return this.iconDOM.className;
|
|
1971
|
-
|
|
1972
|
-
}
|
|
1973
|
-
|
|
1974
|
-
setTitle( value ) {
|
|
1975
|
-
|
|
1976
|
-
this.spanDOM.innerText = value;
|
|
1977
|
-
|
|
1978
|
-
return this;
|
|
1979
|
-
|
|
1980
|
-
}
|
|
1981
|
-
|
|
1982
|
-
getTitle() {
|
|
1983
|
-
|
|
1984
|
-
return this.spanDOM.innerText;
|
|
1985
|
-
|
|
1986
|
-
}
|
|
1987
|
-
|
|
1988
|
-
addButton( button ) {
|
|
1989
|
-
|
|
1990
|
-
this.buttons.push( button );
|
|
1991
|
-
|
|
1992
|
-
this.toolbarDOM.appendChild( button.dom );
|
|
1993
|
-
|
|
1994
|
-
return this;
|
|
1995
|
-
|
|
1996
|
-
}
|
|
1997
|
-
|
|
1998
|
-
serialize( data ) {
|
|
1999
|
-
|
|
2000
|
-
super.serialize( data );
|
|
2001
|
-
|
|
2002
|
-
const title = this.getTitle();
|
|
2003
|
-
const icon = this.getIcon();
|
|
2004
|
-
|
|
2005
|
-
data.title = title;
|
|
2006
|
-
|
|
2007
|
-
if ( icon !== '' ) {
|
|
2008
|
-
|
|
2009
|
-
data.icon = icon;
|
|
2010
|
-
|
|
2011
|
-
}
|
|
2012
|
-
|
|
2013
|
-
}
|
|
2014
|
-
|
|
2015
|
-
deserialize( data ) {
|
|
2016
|
-
|
|
2017
|
-
super.deserialize( data );
|
|
2018
|
-
|
|
2019
|
-
this.setTitle( data.title );
|
|
2020
|
-
|
|
2021
|
-
if ( data.icon !== undefined ) {
|
|
2022
|
-
|
|
2023
|
-
this.setIcon( data.icon );
|
|
2024
|
-
|
|
2025
|
-
}
|
|
2026
|
-
|
|
2027
|
-
}
|
|
2028
|
-
|
|
2029
|
-
}
|
|
2030
|
-
|
|
2031
2150
|
class ObjectNode extends Node {
|
|
2032
2151
|
|
|
2033
2152
|
constructor( name, inputLength, extra = null, width = 300 ) {
|
|
@@ -2040,11 +2159,11 @@ class ObjectNode extends Node {
|
|
|
2040
2159
|
.setExtra( extra )
|
|
2041
2160
|
.setOutput( inputLength );
|
|
2042
2161
|
|
|
2043
|
-
const closeButton = new ButtonInput( '
|
|
2162
|
+
const closeButton = new ButtonInput( Styles.icons.close || '✕' ).onClick( () => {
|
|
2044
2163
|
|
|
2045
2164
|
this.dispose();
|
|
2046
2165
|
|
|
2047
|
-
} );
|
|
2166
|
+
} ).setIcon( Styles.icons.close );
|
|
2048
2167
|
|
|
2049
2168
|
title.addButton( closeButton );
|
|
2050
2169
|
|
|
@@ -3057,6 +3176,7 @@ var Flow = /*#__PURE__*/Object.freeze({
|
|
|
3057
3176
|
Node: Node,
|
|
3058
3177
|
Canvas: Canvas,
|
|
3059
3178
|
Serializer: Serializer,
|
|
3179
|
+
Styles: Styles,
|
|
3060
3180
|
ObjectNode: ObjectNode,
|
|
3061
3181
|
PanelNode: PanelNode,
|
|
3062
3182
|
Menu: Menu,
|
|
@@ -3215,4 +3335,4 @@ class Loader extends EventTarget {
|
|
|
3215
3335
|
Loader.DEFAULT = 'default';
|
|
3216
3336
|
Loader.OBJECTS = 'objects';
|
|
3217
3337
|
|
|
3218
|
-
export { ButtonInput, Canvas, CircleMenu, ColorInput, ContextMenu, DraggableElement, Element, Input, LabelElement, Loader, Menu, Node, NumberInput, ObjectNode, PanelNode, REVISION, SelectInput, Serializer, SliderInput, StringInput, TextInput, TitleElement, ToggleInput, Utils };
|
|
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 };
|
|
@@ -46,6 +46,9 @@ class RectAreaLightUniformsLib {
|
|
|
46
46
|
UniformsLib.LTC_FLOAT_1 = new DataTexture( ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
47
47
|
UniformsLib.LTC_FLOAT_2 = new DataTexture( ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
48
48
|
|
|
49
|
+
UniformsLib.LTC_FLOAT_1.needsUpdate = true;
|
|
50
|
+
UniformsLib.LTC_FLOAT_2.needsUpdate = true;
|
|
51
|
+
|
|
49
52
|
const ltc_half_1 = new Uint16Array( LTC_MAT_1.length );
|
|
50
53
|
|
|
51
54
|
LTC_MAT_1.forEach( function ( x, index ) {
|
|
@@ -65,6 +68,10 @@ class RectAreaLightUniformsLib {
|
|
|
65
68
|
UniformsLib.LTC_HALF_1 = new DataTexture( ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
66
69
|
UniformsLib.LTC_HALF_2 = new DataTexture( ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
67
70
|
|
|
71
|
+
UniformsLib.LTC_HALF_1.needsUpdate = true;
|
|
72
|
+
UniformsLib.LTC_HALF_2.needsUpdate = true;
|
|
73
|
+
|
|
74
|
+
|
|
68
75
|
}
|
|
69
76
|
|
|
70
77
|
}
|
|
@@ -15,8 +15,6 @@ import * as fflate from '../libs/fflate.module.js';
|
|
|
15
15
|
* Description: Early release of an AMF Loader following the pattern of the
|
|
16
16
|
* example loaders in the three.js project.
|
|
17
17
|
*
|
|
18
|
-
* More information about the AMF format: http://amf.wikispaces.com
|
|
19
|
-
*
|
|
20
18
|
* Usage:
|
|
21
19
|
* const loader = new AMFLoader();
|
|
22
20
|
* loader.load('/path/to/project.amf', function(objecttree) {
|
|
@@ -1276,7 +1276,7 @@ class ColladaLoader extends Loader {
|
|
|
1276
1276
|
break;
|
|
1277
1277
|
case 'transparent':
|
|
1278
1278
|
data[ child.nodeName ] = {
|
|
1279
|
-
opaque: child.getAttribute( 'opaque' ),
|
|
1279
|
+
opaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',
|
|
1280
1280
|
data: parseEffectParameter( child )
|
|
1281
1281
|
};
|
|
1282
1282
|
break;
|
|
@@ -1737,7 +1737,6 @@ class ColladaLoader extends Loader {
|
|
|
1737
1737
|
material.opacity = color[ 0 ] * transparency.float;
|
|
1738
1738
|
break;
|
|
1739
1739
|
default:
|
|
1740
|
-
material.opacity = 1 - transparency.float;
|
|
1741
1740
|
console.warn( 'THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.', transparent.opaque );
|
|
1742
1741
|
|
|
1743
1742
|
}
|