Update versions

This commit is contained in:
Alexander Nozik 2023-05-14 18:33:30 +03:00
parent 35fc7a7042
commit 4ec611eda3
51 changed files with 359 additions and 530 deletions
build.gradle.kts
cern-root-loader
demo
gdml
build.gradle.kts
src
jsMain/kotlin/space/kscience/visionforge/gdml/demo
jvmMain/kotlin/space/kscience/visionforge/gdml/demo
js-playground/src/main/kotlin
muon-monitor
build.gradle.kts
src/jsMain/kotlin/ru/mipt/npm/muon/monitor
playground
sat-demo
build.gradle.kts
src/main/kotlin/ru/mipt/npm/sat
solid-showcase
build.gradle.kts
src
jsMain/kotlin/space/kscience/visionforge/solid/demo
jvmMain-fx/kotlin/space/kscience/visionforge/solid/demo
gradle.properties
jupyter
build.gradle.kts
src
jsMain/kotlin
jvmMain/kotlin
visionforge-jupyter-gdml
settings.gradle.kts
ui
react/src/main/kotlin/space/kscience/visionforge/react
ring/src/main/kotlin/space.kscience.visionforge.ring
visionforge-core
build.gradle.kts
src
commonMain/kotlin/space/kscience/visionforge
commonTest/kotlin/space/kscience/visionforge/meta
jsMain/kotlin/space/kscience/visionforge
visionforge-gdml
visionforge-markdown
build.gradle.kts
src
jsMain/kotlin/space/kscience/visionforge/markup
jvmMain/kotlin/space/kscience/visionforge/markup
visionforge-plotly
build.gradle.kts
src
jsMain/kotlin/space/kscience/visionforge/plotly
jvmMain/kotlin/space/kscience/visionforge/plotly
visionforge-server
visionforge-solid
build.gradle.kts
src
commonMain/kotlin/space/kscience/visionforge/solid
commonTest/kotlin/space/kscience/visionforge/solid
visionforge-tables
build.gradle.kts
src
commonMain/kotlin/space/kscience/visionforge/tables
jsMain/kotlin/space/kscience/visionforge/tables
visionforge-threejs
build.gradle.kts
src/main/kotlin/space/kscience/visionforge/solid/three
visionforge-threejs-server

@ -7,7 +7,7 @@ plugins {
// id("org.jetbrains.kotlinx.kover") version "0.5.0" // id("org.jetbrains.kotlinx.kover") version "0.5.0"
} }
val dataforgeVersion by extra("0.6.0-dev-15") val dataforgeVersion by extra("0.6.1")
val fxVersion by extra("11") val fxVersion by extra("11")
allprojects { allprojects {

@ -3,17 +3,12 @@ plugins {
} }
kscience{ kscience{
jvm()
js()
dependencies {
api(projects.visionforgeSolid)
}
useSerialization { useSerialization {
json() json()
} }
}
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
api(project(":visionforge-solid"))
}
}
}
} }

@ -1,62 +1,62 @@
import space.kscience.gradle.DependencyConfiguration
import space.kscience.gradle.FXModule
plugins { plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
application
} }
kscience { kscience {
val fxVersion: String by rootProject.extra jvm()
useFx(FXModule.CONTROLS, version = fxVersion, configuration = DependencyConfiguration.IMPLEMENTATION)
application()
}
kotlin {
jvm {
withJava()
}
js { js {
useCommonJs() useCommonJs()
browser { browser {
commonWebpackConfig { commonWebpackConfig {
cssSupport{ cssSupport {
enabled.set(false) enabled.set(false)
} }
} }
} }
} }
dependencies {
sourceSets { implementation(projects.visionforgeSolid)
commonMain { implementation(projects.visionforgeGdml)
dependencies {
implementation(project(":visionforge-solid"))
implementation(project(":visionforge-gdml"))
}
}
jvmMain {
dependencies {
implementation(project(":visionforge-fx"))
implementation("ch.qos.logback:logback-classic:1.2.11")
}
}
jsMain {
dependencies {
implementation(project(":ui:ring"))
implementation(project(":visionforge-threejs"))
implementation(npm("react-file-drop", "3.0.6"))
}
}
} }
jvmMain {
// implementation(project(":visionforge-fx"))
implementation(spclibs.logback.classic)
}
jsMain {
implementation(projects.ui.ring)
implementation(projects.visionforgeThreejs)
implementation(npm("react-file-drop", "3.0.6"))
}
application()
} }
application { //kotlin {
mainClass.set("space.kscience.visionforge.gdml.demo.GdmlFxDemoAppKt") //
} // sourceSets {
// commonMain {
// dependencies {
// implementation(project(":visionforge-solid"))
// implementation(project(":visionforge-gdml"))
// }
// }
// jvmMain {
// dependencies {
//// implementation(project(":visionforge-fx"))
// implementation("ch.qos.logback:logback-classic:1.2.11")
// }
// }
// jsMain {
// dependencies {
// implementation(project(":ui:ring"))
// implementation(project(":visionforge-threejs"))
// implementation(npm("react-file-drop", "3.0.6"))
// }
// }
// }
//}
val convertGdmlToJson by tasks.creating(JavaExec::class) { //val convertGdmlToJson by tasks.creating(JavaExec::class) {
group = "application" // group = "application"
classpath = sourceSets["main"].runtimeClasspath // classpath = sourceSets["main"].runtimeClasspath
mainClass.set("space.kscience.dataforge.vis.spatial.gdml.demo.SaveToJsonKt") // mainClass.set("space.kscience.dataforge.vis.spatial.gdml.demo.SaveToJsonKt")
} //}

@ -3,7 +3,7 @@ package space.kscience.visionforge.gdml.demo
import kotlinx.css.* import kotlinx.css.*
import org.w3c.dom.Document import org.w3c.dom.Document
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.gdml.GdmlShowCase import space.kscience.gdml.GdmlShowCase
import space.kscience.visionforge.Application import space.kscience.visionforge.Application
import space.kscience.visionforge.Colors import space.kscience.visionforge.Colors
@ -54,7 +54,7 @@ private class GDMLDemoApp : Application {
} }
//println(context.plugins.fetch(VisionManager).encodeToString(vision)) //println(context.plugins.fetch(VisionManager).encodeToString(vision))
attrs { attrs {
this.solids = context.fetch(Solids) this.solids = context.request(Solids)
this.vision = vision this.vision = vision
} }
} }

@ -1,83 +1,83 @@
package space.kscience.visionforge.gdml.demo //package space.kscience.visionforge.gdml.demo
//
import javafx.geometry.Orientation //import javafx.geometry.Orientation
import javafx.scene.Parent //import javafx.scene.Parent
import javafx.stage.FileChooser //import javafx.stage.FileChooser
import space.kscience.dataforge.context.Context //import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch //import space.kscience.dataforge.context.fetch
import space.kscience.gdml.GdmlShowCase //import space.kscience.gdml.GdmlShowCase
import space.kscience.visionforge.VisionManager //import space.kscience.visionforge.VisionManager
import space.kscience.visionforge.editor.VisionEditorFragment //import space.kscience.visionforge.editor.VisionEditorFragment
import space.kscience.visionforge.editor.VisionTreeFragment //import space.kscience.visionforge.editor.VisionTreeFragment
import space.kscience.visionforge.gdml.toVision //import space.kscience.visionforge.gdml.toVision
import space.kscience.visionforge.solid.FX3DPlugin //import space.kscience.visionforge.solid.FX3DPlugin
import space.kscience.visionforge.solid.FXCanvas3D //import space.kscience.visionforge.solid.FXCanvas3D
import space.kscience.visionforge.solid.Solid //import space.kscience.visionforge.solid.Solid
import space.kscience.visionforge.solid.SolidMaterial //import space.kscience.visionforge.solid.SolidMaterial
import tornadofx.* //import tornadofx.*
//
class GDMLDemoApp : App(GDMLView::class) //class GDMLDemoApp : App(GDMLView::class)
//
class GDMLView : View() { //class GDMLView : View() {
private val context = Context { // private val context = Context {
plugin(FX3DPlugin) // plugin(FX3DPlugin)
} // }
//
private val fx3d = context.fetch(FX3DPlugin) // private val fx3d = context.fetch(FX3DPlugin)
private val visionManager = context.fetch(VisionManager) // private val visionManager = context.fetch(VisionManager)
private val canvas = FXCanvas3D(fx3d) // private val canvas = FXCanvas3D(fx3d)
//
private val treeFragment = VisionTreeFragment().apply { // private val treeFragment = VisionTreeFragment().apply {
this.itemProperty.bind(canvas.rootObjectProperty) // this.itemProperty.bind(canvas.rootObjectProperty)
} // }
//
private val propertyEditor = VisionEditorFragment().apply { // private val propertyEditor = VisionEditorFragment().apply {
descriptorProperty.set(SolidMaterial.descriptor) // descriptorProperty.set(SolidMaterial.descriptor)
visionProperty.bind(treeFragment.selectedProperty) // visionProperty.bind(treeFragment.selectedProperty)
} // }
//
override val root: Parent = borderpane { // override val root: Parent = borderpane {
top { // top {
buttonbar { // buttonbar {
button("Load GDML/json") { // button("Load GDML/json") {
action { // action {
val file = chooseFile("Select a GDML/json file", filters = fileNameFilter).firstOrNull() // val file = chooseFile("Select a GDML/json file", filters = fileNameFilter).firstOrNull()
if (file != null) { // if (file != null) {
runAsync { // runAsync {
visionManager.readFile(file) as Solid // visionManager.readFile(file) as Solid
} ui { // } ui {
canvas.render(it) // canvas.render(it)
} // }
} // }
} // }
} // }
} // }
} // }
center { // center {
splitpane(Orientation.HORIZONTAL, treeFragment.root, canvas.root, propertyEditor.root) { // splitpane(Orientation.HORIZONTAL, treeFragment.root, canvas.root, propertyEditor.root) {
setDividerPositions(0.2, 0.6, 0.2) // setDividerPositions(0.2, 0.6, 0.2)
} // }
} // }
} // }
//
init { // init {
runAsync { // runAsync {
GdmlShowCase.cubes().toVision() // GdmlShowCase.cubes().toVision()
} ui { // } ui {
canvas.render(it) // canvas.render(it)
} // }
} // }
//
companion object { // companion object {
private val fileNameFilter = arrayOf( // private val fileNameFilter = arrayOf(
FileChooser.ExtensionFilter("GDML", "*.gdml", "*.xml"), // FileChooser.ExtensionFilter("GDML", "*.gdml", "*.xml"),
FileChooser.ExtensionFilter("JSON", "*.json"), // FileChooser.ExtensionFilter("JSON", "*.json"),
FileChooser.ExtensionFilter("JSON.ZIP", "*.json.zip"), // FileChooser.ExtensionFilter("JSON.ZIP", "*.json.zip"),
FileChooser.ExtensionFilter("JSON.GZ", "*.json.gz") // FileChooser.ExtensionFilter("JSON.GZ", "*.json.gz")
) // )
} // }
} //}
//
fun main() { //fun main() {
launch<GDMLDemoApp>() // launch<GDMLDemoApp>()
} //}

@ -3,7 +3,7 @@ import org.w3c.dom.Document
import ringui.SmartTabs import ringui.SmartTabs
import ringui.Tab import ringui.Tab
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.plotly.models.Trace import space.kscience.plotly.models.Trace
import space.kscience.plotly.scatter import space.kscience.plotly.scatter
import space.kscience.visionforge.Application import space.kscience.visionforge.Application
@ -52,7 +52,7 @@ private class JsPlaygroundApp : Application {
Tab("gravity") { Tab("gravity") {
GravityDemo { GravityDemo {
attrs { attrs {
this.solids = playgroundContext.fetch(Solids) this.solids = playgroundContext.request(Solids)
} }
} }
} }
@ -73,7 +73,7 @@ private class JsPlaygroundApp : Application {
child(ThreeCanvasWithControls) { child(ThreeCanvasWithControls) {
val random = Random(112233) val random = Random(112233)
attrs { attrs {
solids = playgroundContext.fetch(Solids) solids = playgroundContext.request(Solids)
solid { solid {
ambientLight { ambientLight {
color.set(Colors.white) color.set(Colors.white)

@ -20,9 +20,9 @@ val Plotly = fc<PlotlyProps>("Plotly") { props ->
useEffect(props.plot, elementRef) { useEffect(props.plot, elementRef) {
val element = elementRef.current as? HTMLElement ?: error("Plotly element not found") val element = elementRef.current as? HTMLElement ?: error("Plotly element not found")
props.plot?.let { props.plot?.let {
element.plot(it, PlotlyConfig { element.plot(PlotlyConfig {
responsive = true responsive = true
}) }, it)
} }
} }

@ -5,74 +5,46 @@ plugins {
group = "ru.mipt.npm" group = "ru.mipt.npm"
val ktorVersion: String = npmlibs.versions.ktor.get() val ktorVersion: String = spclibs.versions.ktor.get()
kscience { kscience {
useCoroutines() useCoroutines()
useSerialization() useSerialization()
useKtor()
fullStack(
"muon-monitor.js",
jvmConfig = { withJava() },
jsConfig = { useCommonJs() }
) {
commonWebpackConfig {
cssSupport {
enabled.set(false)
}
}
}
commonMain {
implementation(projects.visionforgeSolid)
}
jvmMain {
implementation("org.apache.commons:commons-math3:3.6.1")
implementation("io.ktor:ktor-server-cio:${ktorVersion}")
implementation("io.ktor:ktor-server-content-negotiation:${ktorVersion}")
implementation("io.ktor:ktor-serialization-kotlinx-json:${ktorVersion}")
implementation("ch.qos.logback:logback-classic:1.2.11")
}
jsMain {
implementation(project(":ui:ring"))
implementation(project(":visionforge-threejs"))
//implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
}
application() application()
} }
kotlin {
jvm {
withJava()
}
js {
useCommonJs()
browser {
commonWebpackConfig {
cssSupport {
enabled.set(false)
}
}
}
}
sourceSets {
commonMain {
dependencies {
implementation(project(":visionforge-solid"))
}
}
jvmMain {
dependencies {
implementation("org.apache.commons:commons-math3:3.6.1")
implementation("io.ktor:ktor-server-cio:${ktorVersion}")
implementation("io.ktor:ktor-server-content-negotiation:${ktorVersion}")
implementation("io.ktor:ktor-serialization-kotlinx-json:${ktorVersion}")
implementation("ch.qos.logback:logback-classic:1.2.11")
}
}
jsMain {
dependencies {
implementation(project(":ui:ring"))
implementation(project(":visionforge-threejs"))
//implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
}
}
}
}
application { application {
mainClass.set("ru.mipt.npm.muon.monitor.server.MMServerKt") mainClass.set("ru.mipt.npm.muon.monitor.server.MMServerKt")
} }
val jsBrowserDistribution by tasks.getting
val jsBrowserDevelopmentExecutableDistribution by tasks.getting
val devMode = rootProject.findProperty("visionforge.development") as? Boolean
?: rootProject.version.toString().contains("dev")
tasks.getByName<ProcessResources>("jvmProcessResources") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
if (devMode) {
dependsOn(jsBrowserDevelopmentExecutableDistribution)
from(jsBrowserDevelopmentExecutableDistribution)
} else {
dependsOn(jsBrowserDistribution)
from(jsBrowserDistribution)
}
}
//distributions { //distributions {
// main { // main {

@ -2,7 +2,7 @@ package ru.mipt.npm.muon.monitor
import org.w3c.dom.Document import org.w3c.dom.Document
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.visionforge.Application import space.kscience.visionforge.Application
import space.kscience.visionforge.VisionManager import space.kscience.visionforge.VisionManager
import space.kscience.visionforge.react.createRoot import space.kscience.visionforge.react.createRoot
@ -19,7 +19,7 @@ private class MMDemoApp : Application {
plugin(ThreePlugin) plugin(ThreePlugin)
} }
val visionManager = context.fetch(VisionManager) val visionManager = context.request(VisionManager)
val model = Model(visionManager) val model = Model(visionManager)
@ -28,7 +28,7 @@ private class MMDemoApp : Application {
child(MMApp) { child(MMApp) {
attrs { attrs {
this.model = model this.model = model
this.solids = context.fetch(Solids) this.solids = context.request(Solids)
} }
} }
} }

@ -29,7 +29,6 @@ kotlin {
} }
jvm { jvm {
withJava()
compilations.all { compilations.all {
kotlinOptions { kotlinOptions {
jvmTarget = "11" jvmTarget = "11"

@ -6,7 +6,7 @@ import io.ktor.server.http.content.resources
import io.ktor.server.routing.routing import io.ktor.server.routing.routing
import kotlinx.html.* import kotlinx.html.*
import space.kscience.dataforge.context.Global import space.kscience.dataforge.context.Global
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.visionforge.VisionManager import space.kscience.visionforge.VisionManager
import space.kscience.visionforge.html.VisionOfHtmlForm import space.kscience.visionforge.html.VisionOfHtmlForm
import space.kscience.visionforge.html.VisionPage import space.kscience.visionforge.html.VisionPage
@ -18,7 +18,7 @@ import space.kscience.visionforge.server.openInBrowser
import space.kscience.visionforge.server.visionPage import space.kscience.visionforge.server.visionPage
fun main() { fun main() {
val visionManager = Global.fetch(VisionManager) val visionManager = Global.request(VisionManager)
val connector = EngineConnectorConfig("localhost", 7777) val connector = EngineConnectorConfig("localhost", 7777)

@ -6,6 +6,7 @@ import kotlinx.serialization.json.Json
import space.kscience.visionforge.solid.SolidGroup import space.kscience.visionforge.solid.SolidGroup
import space.kscience.visionforge.solid.Solids import space.kscience.visionforge.solid.Solids
@OptIn(ExperimentalSerializationApi::class)
private val json = Json { private val json = Json {
serializersModule = Solids.serializersModuleForSolids serializersModule = Solids.serializersModuleForSolids
prettyPrintIndent = " " prettyPrintIndent = " "

@ -9,15 +9,14 @@ kscience {
// json() // json()
// } // }
application() application()
dependencies{
implementation(projects.visionforgeThreejs.visionforgeThreejsServer)
implementation("ch.qos.logback:logback-classic:1.4.5")
}
} }
group = "ru.mipt.npm" group = "ru.mipt.npm"
dependencies{
implementation(project(":visionforge-threejs:visionforge-threejs-server"))
implementation("ch.qos.logback:logback-classic:1.4.5")
}
application { application {
mainClass.set("ru.mipt.npm.sat.SatServerKt") mainClass.set("ru.mipt.npm.sat.SatServerKt")
} }

@ -10,7 +10,7 @@ import kotlinx.coroutines.*
import kotlinx.html.div import kotlinx.html.div
import kotlinx.html.h1 import kotlinx.html.h1
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.meta.Null import space.kscience.dataforge.meta.Null
import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.Name
import space.kscience.visionforge.Colors import space.kscience.visionforge.Colors
@ -29,7 +29,7 @@ fun main() {
plugin(Solids) plugin(Solids)
} }
val solids = satContext.fetch(Solids) val solids = satContext.request(Solids)
//Create a geometry //Create a geometry
val sat = solids.visionOfSatellite(ySegments = 3).apply { val sat = solids.visionOfSatellite(ySegments = 3).apply {

@ -1,6 +1,3 @@
import space.kscience.gradle.DependencyConfiguration
import space.kscience.gradle.FXModule
plugins { plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
application application
@ -8,34 +5,18 @@ plugins {
kscience { kscience {
useCoroutines() useCoroutines()
val fxVersion: String by rootProject.extra
useFx(FXModule.CONTROLS, version = fxVersion, configuration = DependencyConfiguration.IMPLEMENTATION)
application() application()
}
kotlin {
jvm { jvm {
withJava() withJava()
} }
js()
dependencies {
implementation(projects.visionforgeSolid)
implementation(projects.visionforgeGdml)
}
sourceSets { jsMain {
commonMain { implementation(projects.visionforgeThreejs)
dependencies {
implementation(project(":visionforge-solid"))
// implementation(project(":visionforge-gdml"))
}
}
jvmMain {
dependencies {
implementation(project(":visionforge-fx"))
}
}
jsMain {
dependencies {
implementation(project(":visionforge-threejs"))
}
}
} }
} }

@ -10,7 +10,7 @@ import org.w3c.dom.Element
import org.w3c.dom.HTMLDivElement import org.w3c.dom.HTMLDivElement
import org.w3c.dom.HTMLElement import org.w3c.dom.HTMLElement
import space.kscience.dataforge.context.Global import space.kscience.dataforge.context.Global
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.get
import space.kscience.dataforge.meta.string import space.kscience.dataforge.meta.string
@ -26,7 +26,7 @@ class ThreeDemoGrid(element: Element) : VisionLayout<Solid> {
private val outputs: MutableMap<Name, ThreeCanvas> = HashMap() private val outputs: MutableMap<Name, ThreeCanvas> = HashMap()
private val three = Global.fetch(ThreePlugin) private val three = Global.request(ThreePlugin)
override val solids: Solids get() = three.solids override val solids: Solids get() = three.solids

@ -1,8 +1,9 @@
kotlin.code.style=official kotlin.code.style=official
kotlin.mpp.stability.nowarn=true kotlin.mpp.stability.nowarn=true
kotlin.js.compiler=ir
kotlin.incremental.js.ir=true kotlin.incremental.js.ir=true
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4G org.gradle.jvmargs=-Xmx4G
toolsVersion=0.13.4-kotlin-1.8.0 toolsVersion=0.14.7-kotlin-1.8.20

@ -1,25 +1,22 @@
plugins { plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
id("org.jetbrains.kotlin.jupyter.api")
} }
description = "Common visionforge jupyter module" description = "Common visionforge jupyter module"
kotlin { kscience {
sourceSets { jvm()
commonMain{ js()
dependencies{ jupyterLibrary()
api(projects.visionforgeCore) dependencies {
} api(projects.visionforgeCore)
} }
jvmMain { dependencies(jvmMain){
dependencies { api(projects.visionforgeServer)
api(projects.visionforgeServer)
}
}
} }
} }
readme { readme {
maturity = space.kscience.gradle.Maturity.EXPERIMENTAL maturity = space.kscience.gradle.Maturity.EXPERIMENTAL
} }

@ -11,7 +11,6 @@ import space.kscience.visionforge.VisionClient
import space.kscience.visionforge.renderAllVisions import space.kscience.visionforge.renderAllVisions
import space.kscience.visionforge.renderAllVisionsById import space.kscience.visionforge.renderAllVisionsById
import space.kscience.visionforge.renderAllVisionsIn import space.kscience.visionforge.renderAllVisionsIn
import kotlin.reflect.KClass
@JsExport @JsExport
public class VFNotebookPlugin : AbstractPlugin() { public class VFNotebookPlugin : AbstractPlugin() {
@ -44,8 +43,6 @@ public class VFNotebookPlugin : AbstractPlugin() {
override fun build(context: Context, meta: Meta): VFNotebookPlugin = VFNotebookPlugin() override fun build(context: Context, meta: Meta): VFNotebookPlugin = VFNotebookPlugin()
override val tag: PluginTag = PluginTag(name = "vision.notebook", group = PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag(name = "vision.notebook", group = PluginTag.DATAFORGE_GROUP)
override val type: KClass<out VFNotebookPlugin> = VFNotebookPlugin::class
} }
} }

@ -4,7 +4,6 @@ import io.ktor.http.URLProtocol
import io.ktor.server.application.install import io.ktor.server.application.install
import io.ktor.server.cio.CIO import io.ktor.server.cio.CIO
import io.ktor.server.engine.ApplicationEngine import io.ktor.server.engine.ApplicationEngine
import io.ktor.server.engine.EngineConnectorConfig
import io.ktor.server.engine.embeddedServer import io.ktor.server.engine.embeddedServer
import io.ktor.server.util.url import io.ktor.server.util.url
import io.ktor.server.websocket.WebSockets import io.ktor.server.websocket.WebSockets
@ -25,7 +24,6 @@ import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionManager import space.kscience.visionforge.VisionManager
import space.kscience.visionforge.html.HtmlVisionFragment import space.kscience.visionforge.html.HtmlVisionFragment
import space.kscience.visionforge.html.visionFragment import space.kscience.visionforge.html.visionFragment
import space.kscience.visionforge.server.EngineConnectorConfig
import space.kscience.visionforge.server.VisionRoute import space.kscience.visionforge.server.VisionRoute
import space.kscience.visionforge.server.serveVisionData import space.kscience.visionforge.server.serveVisionData
import space.kscience.visionforge.visionManager import space.kscience.visionforge.visionManager
@ -74,7 +72,7 @@ public class VFForNotebook(override val context: Context) : ContextAware, Corout
} }
} }
val connector: EngineConnectorConfig = EngineConnectorConfig(host, port) //val connector: EngineConnectorConfig = EngineConnectorConfig(host, port)
engine?.stop(1000, 2000) engine?.stop(1000, 2000)
engine = context.embeddedServer(CIO, port, host) { engine = context.embeddedServer(CIO, port, host) {

@ -4,56 +4,32 @@ plugins {
description = "Jupyter api artifact for GDML rendering" description = "Jupyter api artifact for GDML rendering"
kotlin {
explicitApi = null
js {
useCommonJs()
browser {
webpackTask {
this.outputFileName = "js/gdml-jupyter.js"
}
commonWebpackConfig {
sourceMaps = false
cssSupport{
enabled.set(false)
}
}
}
binaries.executable()
}
afterEvaluate {
val jsBrowserDistribution by tasks.getting
tasks.getByName<ProcessResources>("jvmProcessResources") {
dependsOn(jsBrowserDistribution)
from(jsBrowserDistribution)
}
}
sourceSets {
commonMain {
dependencies {
implementation(projects.visionforgeSolid)
implementation(projects.jupyter)
}
}
jvmMain {
dependencies {
implementation(projects.visionforgeGdml)
}
}
jsMain {
dependencies {
implementation(projects.visionforgeThreejs)
implementation(projects.ui.ring)
}
}
}
}
kscience { kscience {
fullStack("js/gdml-jupyter.js",
jsConfig = { useCommonJs() }
) {
commonWebpackConfig {
sourceMaps = false
cssSupport {
enabled.set(false)
}
}
}
dependencies{
implementation(projects.visionforgeSolid)
implementation(projects.jupyter)
}
dependencies(jvmMain){
implementation(projects.visionforgeGdml)
}
dependencies(jsMain){
implementation(projects.visionforgeThreejs)
implementation(projects.ui.ring)
}
jupyterLibrary("space.kscience.visionforge.gdml.jupyter.GdmlForJupyter") jupyterLibrary("space.kscience.visionforge.gdml.jupyter.GdmlForJupyter")
} }

@ -6,7 +6,7 @@ import space.kscience.visionforge.runVisionClient
@DFExperimental @DFExperimental
@JsExport @JsExport
fun main(): Unit = runVisionClient { public fun main(): Unit = runVisionClient {
plugin(ThreeWithControlsPlugin) plugin(ThreeWithControlsPlugin)
} }

@ -34,7 +34,7 @@ dependencyResolutionManagement {
} }
versionCatalogs { versionCatalogs {
create("npmlibs") { create("spclibs") {
from("space.kscience:version-catalog:$toolsVersion") from("space.kscience:version-catalog:$toolsVersion")
} }
} }
@ -48,7 +48,7 @@ include(
":ui:bootstrap", ":ui:bootstrap",
":visionforge-core", ":visionforge-core",
":visionforge-solid", ":visionforge-solid",
":visionforge-fx", // ":visionforge-fx",
":visionforge-threejs", ":visionforge-threejs",
":visionforge-threejs:visionforge-threejs-server", ":visionforge-threejs:visionforge-threejs-server",
":visionforge-gdml", ":visionforge-gdml",
@ -62,7 +62,7 @@ include(
":demo:muon-monitor", ":demo:muon-monitor",
":demo:sat-demo", ":demo:sat-demo",
":demo:playground", ":demo:playground",
":demo:plotly-fx", // ":demo:plotly-fx",
":demo:js-playground", ":demo:js-playground",
":jupyter", ":jupyter",
":jupyter:visionforge-jupyter-gdml" ":jupyter:visionforge-jupyter-gdml"

@ -5,7 +5,7 @@ import org.w3c.dom.Element
import org.w3c.dom.HTMLElement import org.w3c.dom.HTMLElement
import react.* import react.*
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.Name
import space.kscience.visionforge.solid.Solid import space.kscience.visionforge.solid.Solid
import space.kscience.visionforge.solid.specifications.Canvas3DOptions import space.kscience.visionforge.solid.specifications.Canvas3DOptions
@ -25,7 +25,7 @@ public val ThreeCanvasComponent: FC<ThreeCanvasProps> = fc("ThreeCanvasComponent
val elementRef = useRef<Element>(null) val elementRef = useRef<Element>(null)
var canvas by useState<ThreeCanvas?>(null) var canvas by useState<ThreeCanvas?>(null)
val three: ThreePlugin = useMemo(props.context) { props.context.fetch(ThreePlugin) } val three: ThreePlugin = useMemo(props.context) { props.context.request(ThreePlugin) }
useEffect(props.solid, props.options, elementRef) { useEffect(props.solid, props.options, elementRef) {
if (canvas == null) { if (canvas == null) {

@ -14,7 +14,6 @@ import space.kscience.visionforge.Vision
import space.kscience.visionforge.react.render import space.kscience.visionforge.react.render
import space.kscience.visionforge.solid.Solid import space.kscience.visionforge.solid.Solid
import space.kscience.visionforge.solid.three.ThreePlugin import space.kscience.visionforge.solid.three.ThreePlugin
import kotlin.reflect.KClass
public class ThreeWithControlsPlugin : AbstractPlugin(), ElementVisionRenderer { public class ThreeWithControlsPlugin : AbstractPlugin(), ElementVisionRenderer {
public val three: ThreePlugin by require(ThreePlugin) public val three: ThreePlugin by require(ThreePlugin)
@ -44,7 +43,6 @@ public class ThreeWithControlsPlugin : AbstractPlugin(), ElementVisionRenderer {
public companion object : PluginFactory<ThreeWithControlsPlugin> { public companion object : PluginFactory<ThreeWithControlsPlugin> {
override val tag: PluginTag = PluginTag("vision.threejs.withControls", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.threejs.withControls", PluginTag.DATAFORGE_GROUP)
override val type: KClass<ThreeWithControlsPlugin> = ThreeWithControlsPlugin::class
override fun build(context: Context, meta: Meta): ThreeWithControlsPlugin = ThreeWithControlsPlugin() override fun build(context: Context, meta: Meta): ThreeWithControlsPlugin = ThreeWithControlsPlugin()
} }

@ -4,29 +4,20 @@ plugins {
val dataforgeVersion: String by rootProject.extra val dataforgeVersion: String by rootProject.extra
kotlin {
sourceSets {
commonMain {
dependencies {
api("space.kscience:dataforge-context:$dataforgeVersion")
api("org.jetbrains.kotlinx:kotlinx-html:0.8.0")
api("org.jetbrains.kotlin-wrappers:kotlin-css")
}
}
commonTest{
dependencies{
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:${space.kscience.gradle.KScienceVersions.coroutinesVersion}")
}
}
jsMain {
dependencies {
api("org.jetbrains.kotlin-wrappers:kotlin-extensions")
}
}
}
}
kscience{ kscience{
jvm()
js()
dependencies {
api("space.kscience:dataforge-context:$dataforgeVersion")
api(spclibs.kotlinx.html)
api("org.jetbrains.kotlin-wrappers:kotlin-css")
}
testDependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:${space.kscience.gradle.KScienceVersions.coroutinesVersion}")
}
dependencies(jsMain){
api("org.jetbrains.kotlin-wrappers:kotlin-extensions")
}
useSerialization{ useSerialization{
json() json()
} }

@ -17,7 +17,6 @@ import space.kscience.visionforge.html.VisionOfCheckbox
import space.kscience.visionforge.html.VisionOfHtmlForm import space.kscience.visionforge.html.VisionOfHtmlForm
import space.kscience.visionforge.html.VisionOfNumberField import space.kscience.visionforge.html.VisionOfNumberField
import space.kscience.visionforge.html.VisionOfTextField import space.kscience.visionforge.html.VisionOfTextField
import kotlin.reflect.KClass
public class VisionManager(meta: Meta) : AbstractPlugin(meta), MutableVisionContainer<Vision> { public class VisionManager(meta: Meta) : AbstractPlugin(meta), MutableVisionContainer<Vision> {
override val tag: PluginTag get() = Companion.tag override val tag: PluginTag get() = Companion.tag
@ -64,7 +63,6 @@ public class VisionManager(meta: Meta) : AbstractPlugin(meta), MutableVisionCont
public companion object : PluginFactory<VisionManager> { public companion object : PluginFactory<VisionManager> {
override val tag: PluginTag = PluginTag(name = "vision", group = PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag(name = "vision", group = PluginTag.DATAFORGE_GROUP)
override val type: KClass<out VisionManager> = VisionManager::class
public const val VISION_SERIALIZER_MODULE_TARGET: String = "visionSerializerModule" public const val VISION_SERIALIZER_MODULE_TARGET: String = "visionSerializerModule"
@ -110,7 +108,7 @@ public abstract class VisionPlugin(meta: Meta = Meta.EMPTY) : AbstractPlugin(met
/** /**
* Fetch a [VisionManager] from this plugin or create a child plugin with a [VisionManager] * Fetch a [VisionManager] from this plugin or create a child plugin with a [VisionManager]
*/ */
public val Context.visionManager: VisionManager get() = fetch(VisionManager) public val Context.visionManager: VisionManager get() = request(VisionManager )
public fun Vision.encodeToString(): String = public fun Vision.encodeToString(): String =
manager?.encodeToString(this) ?: error("Orphan vision could not be encoded") manager?.encodeToString(this) ?: error("Orphan vision could not be encoded")

@ -1,12 +1,15 @@
package space.kscience.visionforge.meta package space.kscience.visionforge.meta
import kotlinx.coroutines.* import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.take import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.toList import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import space.kscience.dataforge.context.Global import space.kscience.dataforge.context.Global
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.meta.* import space.kscience.dataforge.meta.*
import space.kscience.visionforge.* import space.kscience.visionforge.*
import kotlin.test.Test import kotlin.test.Test
@ -23,7 +26,7 @@ private class TestScheme : Scheme() {
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
internal class VisionPropertyTest { internal class VisionPropertyTest {
private val manager = Global.fetch(VisionManager) private val manager = Global.request(VisionManager)
@Test @Test
fun testPropertyWrite() { fun testPropertyWrite() {
@ -56,7 +59,7 @@ internal class VisionPropertyTest {
@Test @Test
fun testChildrenPropertyPropagation() = runTest(dispatchTimeoutMs = 200) { fun testChildrenPropertyPropagation() = runTest(dispatchTimeoutMs = 200) {
val group = Global.fetch(VisionManager).group { val group = Global.request(VisionManager).group {
properties { properties {
"test" put 11 "test" put 11
} }
@ -91,7 +94,7 @@ internal class VisionPropertyTest {
@Test @Test
fun testChildrenPropertyFlow() = runTest(dispatchTimeoutMs = 200) { fun testChildrenPropertyFlow() = runTest(dispatchTimeoutMs = 200) {
val group = Global.fetch(VisionManager).group { val group = Global.request(VisionManager).group {
properties { properties {
"test" put 11 "test" put 11

@ -21,7 +21,6 @@ import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_ENDPOI
import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_FETCH_ATTRIBUTE import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_FETCH_ATTRIBUTE
import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_NAME_ATTRIBUTE import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_NAME_ATTRIBUTE
import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_RENDERED import space.kscience.visionforge.html.VisionTagConsumer.Companion.OUTPUT_RENDERED
import kotlin.reflect.KClass
import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.milliseconds
/** /**
@ -227,15 +226,13 @@ public class VisionClient : AbstractPlugin() {
numberVisionRenderer(this), numberVisionRenderer(this),
textVisionRenderer(this), textVisionRenderer(this),
formVisionRenderer(this) formVisionRenderer(this)
).toMap() ).associateByName()
} else super.content(target) } else super.content(target)
public companion object : PluginFactory<VisionClient> { public companion object : PluginFactory<VisionClient> {
override fun build(context: Context, meta: Meta): VisionClient = VisionClient() override fun build(context: Context, meta: Meta): VisionClient = VisionClient()
override val tag: PluginTag = PluginTag(name = "vision.client", group = PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag(name = "vision.client", group = PluginTag.DATAFORGE_GROUP)
override val type: KClass<out VisionClient> = VisionClient::class
} }
} }
@ -296,7 +293,7 @@ public fun VisionClient.renderAllVisions(): Unit = whenDocumentLoaded {
} }
public class VisionClientApplication(public val context: Context) : Application { public class VisionClientApplication(public val context: Context) : Application {
private val client = context.fetch(VisionClient) private val client = context.request(VisionClient)
override fun start(document: Document, state: Map<String, Any>) { override fun start(document: Document, state: Map<String, Any>) {
context.logger.info { context.logger.info {

@ -2,21 +2,16 @@ plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
} }
kotlin { kscience {
js(IR){ jvm()
js {
binaries.library() binaries.library()
} }
sourceSets { dependencies {
commonMain{ api(projects.visionforgeSolid)
dependencies { api("space.kscience:gdml:0.4.0")
api(projects.visionforgeSolid) }
api("space.kscience:gdml:0.4.0") dependencies(jvmTest) {
} implementation("ch.qos.logback:logback-classic:1.2.11")
}
jvmTest{
dependencies{
implementation("ch.qos.logback:logback-classic:1.2.11")
}
}
} }
} }

@ -5,20 +5,13 @@ plugins {
val markdownVersion = "0.2.4" val markdownVersion = "0.2.4"
kscience { kscience {
useSerialization() jvm()
}
kotlin {
js { js {
binaries.library() binaries.library()
} }
dependencies {
sourceSets { api(project(":visionforge-core"))
commonMain { api("org.jetbrains:markdown:$markdownVersion")
dependencies {
api(project(":visionforge-core"))
api("org.jetbrains:markdown:$markdownVersion")
}
}
} }
useSerialization()
} }

@ -15,7 +15,6 @@ import space.kscience.dataforge.names.Name
import space.kscience.visionforge.* import space.kscience.visionforge.*
import space.kscience.visionforge.markup.VisionOfMarkup.Companion.COMMONMARK_FORMAT import space.kscience.visionforge.markup.VisionOfMarkup.Companion.COMMONMARK_FORMAT
import space.kscience.visionforge.markup.VisionOfMarkup.Companion.GFM_FORMAT import space.kscience.visionforge.markup.VisionOfMarkup.Companion.GFM_FORMAT
import kotlin.reflect.KClass
public actual class MarkupPlugin : VisionPlugin(), ElementVisionRenderer { public actual class MarkupPlugin : VisionPlugin(), ElementVisionRenderer {
public val visionClient: VisionClient by require(VisionClient) public val visionClient: VisionClient by require(VisionClient)
@ -47,7 +46,6 @@ public actual class MarkupPlugin : VisionPlugin(), ElementVisionRenderer {
public companion object : PluginFactory<MarkupPlugin> { public companion object : PluginFactory<MarkupPlugin> {
override val tag: PluginTag = PluginTag("vision.markup", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.markup", PluginTag.DATAFORGE_GROUP)
override val type: KClass<MarkupPlugin> = MarkupPlugin::class
override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin() override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()

@ -6,7 +6,6 @@ import space.kscience.dataforge.context.PluginFactory
import space.kscience.dataforge.context.PluginTag import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.visionforge.VisionPlugin import space.kscience.visionforge.VisionPlugin
import kotlin.reflect.KClass
public actual class MarkupPlugin : VisionPlugin() { public actual class MarkupPlugin : VisionPlugin() {
override val visionSerializersModule: SerializersModule get() = markupSerializersModule override val visionSerializersModule: SerializersModule get() = markupSerializersModule
@ -16,8 +15,6 @@ public actual class MarkupPlugin : VisionPlugin() {
public companion object : PluginFactory<MarkupPlugin> { public companion object : PluginFactory<MarkupPlugin> {
override val tag: PluginTag = PluginTag("vision.plotly", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.plotly", PluginTag.DATAFORGE_GROUP)
override val type: KClass<out MarkupPlugin> = MarkupPlugin::class
override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin() override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()
} }

@ -2,23 +2,16 @@ plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
} }
val plotlyVersion = "0.5.3-dev-1" val plotlyVersion = "0.5.3"
kscience { kscience {
useSerialization() jvm()
}
kotlin {
js { js {
binaries.library() binaries.library()
} }
dependencies {
sourceSets { api(project(":visionforge-core"))
commonMain { api("space.kscience:plotlykt-core:${plotlyVersion}")
dependencies {
api(project(":visionforge-core"))
api("space.kscience:plotlykt-core:${plotlyVersion}")
}
}
} }
useSerialization()
} }

@ -14,7 +14,6 @@ import space.kscience.visionforge.ElementVisionRenderer
import space.kscience.visionforge.Vision import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionClient import space.kscience.visionforge.VisionClient
import space.kscience.visionforge.VisionPlugin import space.kscience.visionforge.VisionPlugin
import kotlin.reflect.KClass
public actual class PlotlyPlugin : VisionPlugin(), ElementVisionRenderer { public actual class PlotlyPlugin : VisionPlugin(), ElementVisionRenderer {
public val visionClient: VisionClient by require(VisionClient) public val visionClient: VisionClient by require(VisionClient)
@ -31,7 +30,7 @@ public actual class PlotlyPlugin : VisionPlugin(), ElementVisionRenderer {
override fun render(element: Element, name: Name, vision: Vision, meta: Meta) { override fun render(element: Element, name: Name, vision: Vision, meta: Meta) {
val plot = (vision as? VisionOfPlotly)?.plot ?: error("VisionOfPlotly expected but ${vision::class} found") val plot = (vision as? VisionOfPlotly)?.plot ?: error("VisionOfPlotly expected but ${vision::class} found")
val config = PlotlyConfig.read(meta) val config = PlotlyConfig.read(meta)
element.plot(plot, config) element.plot(config, plot)
} }
override fun content(target: String): Map<Name, Any> = when (target) { override fun content(target: String): Map<Name, Any> = when (target) {
@ -41,7 +40,6 @@ public actual class PlotlyPlugin : VisionPlugin(), ElementVisionRenderer {
public actual companion object : PluginFactory<PlotlyPlugin> { public actual companion object : PluginFactory<PlotlyPlugin> {
override val tag: PluginTag = PluginTag("vision.plotly.js", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.plotly.js", PluginTag.DATAFORGE_GROUP)
override val type: KClass<PlotlyPlugin> = PlotlyPlugin::class
override fun build(context: Context, meta: Meta): PlotlyPlugin = PlotlyPlugin() override fun build(context: Context, meta: Meta): PlotlyPlugin = PlotlyPlugin()

@ -6,7 +6,6 @@ import space.kscience.dataforge.context.PluginFactory
import space.kscience.dataforge.context.PluginTag import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.visionforge.VisionPlugin import space.kscience.visionforge.VisionPlugin
import kotlin.reflect.KClass
public actual class PlotlyPlugin : VisionPlugin() { public actual class PlotlyPlugin : VisionPlugin() {
@ -16,7 +15,6 @@ public actual class PlotlyPlugin : VisionPlugin() {
public actual companion object : PluginFactory<PlotlyPlugin> { public actual companion object : PluginFactory<PlotlyPlugin> {
override val tag: PluginTag = PluginTag("vision.plotly", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.plotly", PluginTag.DATAFORGE_GROUP)
override val type: KClass<PlotlyPlugin> = PlotlyPlugin::class
override fun build(context: Context, meta: Meta): PlotlyPlugin = PlotlyPlugin() override fun build(context: Context, meta: Meta): PlotlyPlugin = PlotlyPlugin()

@ -2,12 +2,14 @@ plugins {
id("space.kscience.gradle.jvm") id("space.kscience.gradle.jvm")
} }
val ktorVersion = npmlibs.versions.ktor.get() kscience{
useKtor()
dependencies {
api(projects.visionforgeCore)
api("io.ktor:ktor-server-cio")
api("io.ktor:ktor-server-html-builder")
api("io.ktor:ktor-server-websockets")
implementation("io.ktor:ktor-server-cors")
}
}
dependencies {
api(project(":visionforge-core"))
api("io.ktor:ktor-server-cio:${ktorVersion}")
api("io.ktor:ktor-server-html-builder:${ktorVersion}")
api("io.ktor:ktor-server-websockets:${ktorVersion}")
implementation("io.ktor:ktor-server-cors:${ktorVersion}")
}

@ -1,35 +1,24 @@
import space.kscience.gradle.KScienceVersions
plugins { plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
} }
kscience{ kscience {
useSerialization{ jvm()
js()
useSerialization {
json() json()
} }
} dependencies {
api(projects.visionforgeCore)
kotlin { }
sourceSets { testDependencies {
commonMain { implementation(spclibs.kotlinx.coroutines.test)
dependencies { }
api(project(":visionforge-core")) dependencies(jvmTest) {
} implementation(spclibs.logback.classic)
}
commonTest{
dependencies{
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:${KScienceVersions.coroutinesVersion}")
}
}
jvmTest{
dependencies{
implementation("ch.qos.logback:logback-classic:1.2.11")
}
}
} }
} }
readme{ readme {
maturity = space.kscience.gradle.Maturity.DEVELOPMENT maturity = space.kscience.gradle.Maturity.DEVELOPMENT
} }

@ -169,14 +169,19 @@ internal fun float(name: Name, default: Number): ReadWriteProperty<Solid, Number
} }
} }
internal fun point(name: Name, default: Float): ReadWriteProperty<Solid, Point3D?> = internal fun point(
name: Name,
defaultX: Float,
defaultY: Float = defaultX,
defaultZ: Float = defaultX,
): ReadWriteProperty<Solid, Point3D?> =
object : ReadWriteProperty<Solid, Point3D?> { object : ReadWriteProperty<Solid, Point3D?> {
override fun getValue(thisRef: Solid, property: KProperty<*>): Point3D? { override fun getValue(thisRef: Solid, property: KProperty<*>): Point3D? {
val item = thisRef.properties.own?.get(name) ?: return null val item = thisRef.properties.own?.get(name) ?: return null
return object : Point3D { return object : Point3D {
override val x: Float get() = item[X_KEY]?.float ?: default override val x: Float get() = item[X_KEY]?.float ?: defaultX
override val y: Float get() = item[Y_KEY]?.float ?: default override val y: Float get() = item[Y_KEY]?.float ?: defaultY
override val z: Float get() = item[Z_KEY]?.float ?: default override val z: Float get() = item[Z_KEY]?.float ?: defaultZ
} }
} }

@ -10,13 +10,12 @@ import kotlinx.serialization.serializer
import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.PluginFactory import space.kscience.dataforge.context.PluginFactory
import space.kscience.dataforge.context.PluginTag import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.Name
import space.kscience.visionforge.* import space.kscience.visionforge.*
import space.kscience.visionforge.html.VisionOutput import space.kscience.visionforge.html.VisionOutput
import kotlin.reflect.KClass
public class Solids(meta: Meta) : VisionPlugin(meta), MutableVisionContainer<Solid> { public class Solids(meta: Meta) : VisionPlugin(meta), MutableVisionContainer<Solid> {
@ -30,12 +29,11 @@ public class Solids(meta: Meta) : VisionPlugin(meta), MutableVisionContainer<Sol
public companion object : PluginFactory<Solids>, MutableVisionContainer<Solid> { public companion object : PluginFactory<Solids>, MutableVisionContainer<Solid> {
override val tag: PluginTag = PluginTag(name = "vision.solid", group = PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag(name = "vision.solid", group = PluginTag.DATAFORGE_GROUP)
override val type: KClass<out Solids> = Solids::class
public val default: Solids by lazy { public val default: Solids by lazy {
Context("@Solids") { Context("@Solids") {
plugin(Solids) plugin(Solids)
}.fetch(Solids) }.request(Solids)
} }
override fun build(context: Context, meta: Meta): Solids = Solids(meta) override fun build(context: Context, meta: Meta): Solids = Solids(meta)

@ -1,7 +1,7 @@
package space.kscience.visionforge.solid package space.kscience.visionforge.solid
import space.kscience.dataforge.context.Global import space.kscience.dataforge.context.Global
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import space.kscience.visionforge.getChild import space.kscience.visionforge.getChild
import kotlin.test.Test import kotlin.test.Test
@ -19,7 +19,7 @@ class SolidPluginTest {
@DFExperimental @DFExperimental
@Test @Test
fun testPluginConverter() { fun testPluginConverter() {
val visionManager = Global.fetch(Solids).visionManager val visionManager = Global.request(Solids).visionManager
val meta = visionManager.encodeToMeta(vision) val meta = visionManager.encodeToMeta(vision)
val reconstructed = visionManager.decodeFromMeta(meta) as SolidGroup val reconstructed = visionManager.decodeFromMeta(meta) as SolidGroup

@ -1,7 +1,7 @@
package space.kscience.visionforge.solid package space.kscience.visionforge.solid
import space.kscience.dataforge.context.Global import space.kscience.dataforge.context.Global
import space.kscience.dataforge.context.fetch import space.kscience.dataforge.context.request
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.asValue import space.kscience.dataforge.meta.asValue
import space.kscience.dataforge.names.asName import space.kscience.dataforge.names.asName
@ -12,18 +12,18 @@ import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
internal class VisionUpdateTest { internal class VisionUpdateTest {
val solidManager = Global.fetch(Solids) val solidManager = Global.request(Solids)
val visionManager = solidManager.visionManager val visionManager = solidManager.visionManager
@Test @Test
fun testVisionUpdate(){ fun testVisionUpdate() {
val targetVision = Solids.solidGroup { val targetVision = Solids.solidGroup {
box(200,200,200, name = "origin") box(200, 200, 200, name = "origin")
} }
val dif = visionManager.VisionChange{ val dif = visionManager.VisionChange {
solidGroup ("top") { solidGroup("top") {
color.set(123) color.set(123)
box(100,100,100) box(100, 100, 100)
} }
propertyChanged("top".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue())) propertyChanged("top".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue()))
propertyChanged("origin".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue())) propertyChanged("origin".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue()))
@ -31,15 +31,18 @@ internal class VisionUpdateTest {
targetVision.update(dif) targetVision.update(dif)
assertTrue { targetVision.children.getChild("top") is SolidGroup } assertTrue { targetVision.children.getChild("top") is SolidGroup }
assertEquals("red", (targetVision.children.getChild("origin") as Solid).color.string) // Should work assertEquals("red", (targetVision.children.getChild("origin") as Solid).color.string) // Should work
assertEquals("#00007b", (targetVision.children.getChild("top") as Solid).color.string) // new item always takes precedence assertEquals(
"#00007b",
(targetVision.children.getChild("top") as Solid).color.string
) // new item always takes precedence
} }
@Test @Test
fun testVisionChangeSerialization(){ fun testVisionChangeSerialization() {
val change = visionManager.VisionChange{ val change = visionManager.VisionChange {
solidGroup("top") { solidGroup("top") {
color.set(123) color.set(123)
box(100,100,100) box(100, 100, 100)
} }
propertyChanged("top".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue())) propertyChanged("top".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue()))
propertyChanged("origin".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue())) propertyChanged("origin".asName(), SolidMaterial.MATERIAL_COLOR_KEY, Meta("red".asValue()))
@ -47,6 +50,6 @@ internal class VisionUpdateTest {
val serialized = visionManager.jsonFormat.encodeToString(VisionChange.serializer(), change) val serialized = visionManager.jsonFormat.encodeToString(VisionChange.serializer(), change)
println(serialized) println(serialized)
val reconstructed = visionManager.jsonFormat.decodeFromString(VisionChange.serializer(), serialized) val reconstructed = visionManager.jsonFormat.decodeFromString(VisionChange.serializer(), serialized)
assertEquals(change.properties,reconstructed.properties) assertEquals(change.properties, reconstructed.properties)
} }
} }

@ -2,13 +2,10 @@ plugins {
id("space.kscience.gradle.mpp") id("space.kscience.gradle.mpp")
} }
val tablesVersion = "0.2.0-dev-3" val tablesVersion = "0.2.0-dev-4"
kscience { kscience {
useSerialization() jvm()
}
kotlin {
js { js {
useCommonJs() useCommonJs()
binaries.library() binaries.library()
@ -20,21 +17,15 @@ kotlin {
} }
} }
} }
dependencies {
sourceSets { api(projects.visionforgeCore)
commonMain { api("space.kscience:tables-kt:${tablesVersion}")
dependencies {
api(project(":visionforge-core"))
api("space.kscience:tables-kt:${tablesVersion}")
}
}
jsMain {
dependencies {
implementation(npm("tabulator-tables", "5.0.1"))
implementation(npm("@types/tabulator-tables", "5.0.1"))
}
}
} }
dependencies(jsMain){
implementation(npm("tabulator-tables", "5.0.1"))
implementation(npm("@types/tabulator-tables", "5.0.1"))
}
useSerialization()
} }
readme{ readme{

@ -9,7 +9,6 @@ import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.visionforge.Vision import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionPlugin import space.kscience.visionforge.VisionPlugin
import kotlin.reflect.KClass
public class TableVisionPlugin : VisionPlugin() { public class TableVisionPlugin : VisionPlugin() {
override val tag: PluginTag get() = Companion.tag override val tag: PluginTag get() = Companion.tag
@ -23,7 +22,6 @@ public class TableVisionPlugin : VisionPlugin() {
public companion object : PluginFactory<TableVisionPlugin> { public companion object : PluginFactory<TableVisionPlugin> {
override val tag: PluginTag = PluginTag("vision.table", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.table", PluginTag.DATAFORGE_GROUP)
override val type: KClass<TableVisionPlugin> = TableVisionPlugin::class
override fun build(context: Context, meta: Meta): TableVisionPlugin = TableVisionPlugin() override fun build(context: Context, meta: Meta): TableVisionPlugin = TableVisionPlugin()
} }

@ -16,7 +16,6 @@ import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionClient import space.kscience.visionforge.VisionClient
import tabulator.Tabulator import tabulator.Tabulator
import tabulator.TabulatorFull import tabulator.TabulatorFull
import kotlin.reflect.KClass
public class TableVisionJsPlugin : AbstractPlugin(), ElementVisionRenderer { public class TableVisionJsPlugin : AbstractPlugin(), ElementVisionRenderer {
public val visionClient: VisionClient by require(VisionClient) public val visionClient: VisionClient by require(VisionClient)
@ -89,7 +88,6 @@ public class TableVisionJsPlugin : AbstractPlugin(), ElementVisionRenderer {
public companion object : PluginFactory<TableVisionJsPlugin> { public companion object : PluginFactory<TableVisionJsPlugin> {
override val tag: PluginTag = PluginTag("vision.table.js", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.table.js", PluginTag.DATAFORGE_GROUP)
override val type: KClass<TableVisionJsPlugin> = TableVisionJsPlugin::class
override fun build(context: Context, meta: Meta): TableVisionJsPlugin = TableVisionJsPlugin() override fun build(context: Context, meta: Meta): TableVisionJsPlugin = TableVisionJsPlugin()
} }

@ -10,7 +10,7 @@ kotlin{
} }
dependencies { dependencies {
api(project(":visionforge-solid")) api(projects.visionforgeSolid)
implementation(npm("three", "0.143.0")) implementation(npm("three", "0.143.0"))
implementation(npm("three-csg-ts", "3.1.10")) implementation(npm("three-csg-ts", "3.1.10"))
implementation(npm("three.meshline","1.4.0")) implementation(npm("three.meshline","1.4.0"))

@ -158,7 +158,6 @@ public class ThreePlugin : AbstractPlugin(), ElementVisionRenderer {
public companion object : PluginFactory<ThreePlugin> { public companion object : PluginFactory<ThreePlugin> {
override val tag: PluginTag = PluginTag("vision.threejs", PluginTag.DATAFORGE_GROUP) override val tag: PluginTag = PluginTag("vision.threejs", PluginTag.DATAFORGE_GROUP)
override val type: KClass<ThreePlugin> = ThreePlugin::class
override fun build(context: Context, meta: Meta): ThreePlugin = ThreePlugin() override fun build(context: Context, meta: Meta): ThreePlugin = ThreePlugin()
} }

@ -4,55 +4,26 @@ plugins {
val ktorVersion: String by rootProject.extra val ktorVersion: String by rootProject.extra
kotlin { kscience {
js(IR) { fullStack("js/visionforge-three.js") {
browser { commonWebpackConfig {
webpackTask { cssSupport {
this.outputFileName = "js/visionforge-three.js" enabled.set(false)
}
commonWebpackConfig {
cssSupport{
enabled.set(false)
}
}
}
binaries.executable()
}
sourceSets {
commonMain {
dependencies {
api(projects.visionforgeSolid)
}
}
jvmMain {
dependencies {
api(projects.visionforgeServer)
}
}
jsMain {
dependencies {
api(projects.visionforgeThreejs)
api(projects.ui.ring)
} }
} }
} }
}
dependencies {
val jsBrowserDistribution by tasks.getting api(projects.visionforgeSolid)
val jsBrowserDevelopmentExecutableDistribution by tasks.getting
val devMode = rootProject.findProperty("visionforge.development") as? Boolean
?: rootProject.version.toString().contains("dev")
tasks.getByName<ProcessResources>("jvmProcessResources") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
if (devMode) {
dependsOn(jsBrowserDevelopmentExecutableDistribution)
from(jsBrowserDevelopmentExecutableDistribution)
} else {
dependsOn(jsBrowserDistribution)
from(jsBrowserDistribution)
} }
}
dependencies(jvmMain) {
api(projects.visionforgeServer)
}
dependencies(jsMain) {
api(projects.visionforgeThreejs)
api(projects.ui.ring)
compileOnly(npm("webpack-bundle-analyzer","4.5.0"))
}
}