0.2.0 #71

Merged
altavir merged 139 commits from dev into master 2022-01-24 09:44:18 +03:00
12 changed files with 223 additions and 230 deletions
Showing only changes of commit b5fdc6c4fe - Show all commits

View File

@ -5,7 +5,7 @@ plugins {
group = "ru.mipt.npm" group = "ru.mipt.npm"
val ktorVersion: String = ru.mipt.npm.gradle.KScienceVersions.ktorVersion val ktorVersion: String = npmlibs.versions.ktor.get()
kscience { kscience {
useCoroutines() useCoroutines()
@ -45,17 +45,17 @@ kotlin {
jvmMain { jvmMain {
dependencies { dependencies {
implementation("org.apache.commons:commons-math3:3.6.1") implementation("org.apache.commons:commons-math3:3.6.1")
implementation("io.ktor:ktor-server-cio:$ktorVersion") implementation(npmlibs.ktor.server.cio)
implementation("io.ktor:ktor-serialization:$ktorVersion") implementation(npmlibs.ktor.serialization)
} }
} }
jsMain { jsMain {
dependencies { dependencies {
implementation(project(":ui:ring")) implementation(project(":ui:ring"))
implementation("io.ktor:ktor-client-js:$ktorVersion") implementation(npmlibs.ktor.client.js)
implementation("io.ktor:ktor-client-serialization:$ktorVersion") implementation(npmlibs.ktor.client.serialization)
implementation(project(":visionforge-threejs")) implementation(project(":visionforge-threejs"))
implementation(devNpm("webpack-bundle-analyzer", "4.4.0")) //implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
} }
} }
} }

View File

@ -8,3 +8,5 @@ org.gradle.parallel=true
publishing.github=false publishing.github=false
publishing.sonatype=false publishing.sonatype=false
toolsVersion=0.10.9-kotlin-1.6.10

View File

@ -1,6 +1,6 @@
pluginManagement { pluginManagement {
val toolsVersion = "0.10.7" val toolsVersion: String by extra
repositories { repositories {
//mavenLocal() //mavenLocal()
@ -23,6 +23,9 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("VERSION_CATALOGS") enableFeaturePreview("VERSION_CATALOGS")
dependencyResolutionManagement { dependencyResolutionManagement {
val toolsVersion: String by extra
repositories { repositories {
maven("https://repo.kotlin.link") maven("https://repo.kotlin.link")
mavenCentral() mavenCentral()
@ -30,7 +33,7 @@ dependencyResolutionManagement {
versionCatalogs { versionCatalogs {
create("npmlibs") { create("npmlibs") {
from("ru.mipt.npm:version-catalog:0.10.7") from("ru.mipt.npm:version-catalog:$toolsVersion")
} }
} }
} }

View File

@ -5,18 +5,17 @@ import org.w3c.dom.HTMLOptionElement
import org.w3c.dom.HTMLSelectElement import org.w3c.dom.HTMLSelectElement
import org.w3c.dom.asList import org.w3c.dom.asList
import org.w3c.dom.events.Event import org.w3c.dom.events.Event
import react.FunctionComponent import react.FC
import react.dom.attrs import react.dom.attrs
import react.dom.option import react.dom.option
import react.dom.select import react.dom.select
import react.functionComponent import react.fc
import space.kscience.dataforge.meta.descriptors.allowedValues import space.kscience.dataforge.meta.descriptors.allowedValues
import space.kscience.dataforge.values.asValue import space.kscience.dataforge.values.asValue
import space.kscience.dataforge.values.string import space.kscience.dataforge.values.string
@JsExport @JsExport
public val MultiSelectChooser: FunctionComponent<ValueChooserProps> = public val MultiSelectChooser: FC<ValueChooserProps> = fc("MultiSelectChooser") { props ->
functionComponent("MultiSelectChooser") { props ->
val onChange: (Event) -> Unit = { event: Event -> val onChange: (Event) -> Unit = { event: Event ->
val newSelected = (event.target as HTMLSelectElement).selectedOptions.asList() val newSelected = (event.target as HTMLSelectElement).selectedOptions.asList()
.map { (it as HTMLOptionElement).value.asValue() } .map { (it as HTMLOptionElement).value.asValue() }

View File

@ -47,8 +47,7 @@ public external interface PropertyEditorProps : Props {
public var expanded: Boolean? public var expanded: Boolean?
} }
private val PropertyEditorItem: FunctionComponent<PropertyEditorProps> = private val PropertyEditorItem: FC<PropertyEditorProps> = fc("PropertyEditorItem") { props ->
functionComponent("PropertyEditorItem") { props ->
propertyEditorItem(props) propertyEditorItem(props)
} }
@ -193,7 +192,7 @@ private fun RBuilder.propertyEditorItem(props: PropertyEditorProps) {
} }
@JsExport @JsExport
public val PropertyEditor: FunctionComponent<PropertyEditorProps> = functionComponent("PropertyEditor") { props -> public val PropertyEditor: FC<PropertyEditorProps> = fc("PropertyEditor") { props ->
child(PropertyEditorItem) { child(PropertyEditorItem) {
attrs { attrs {
this.key = "" this.key = ""
@ -211,7 +210,7 @@ public fun RBuilder.propertyEditor(
allProperties: MetaProvider = ownProperties, allProperties: MetaProvider = ownProperties,
descriptor: MetaDescriptor? = null, descriptor: MetaDescriptor? = null,
key: Any? = null, key: Any? = null,
expanded: Boolean? = null expanded: Boolean? = null,
) { ) {
child(PropertyEditor) { child(PropertyEditor) {
attrs { attrs {

View File

@ -6,9 +6,9 @@ import kotlinx.html.InputType
import kotlinx.html.js.onChangeFunction import kotlinx.html.js.onChangeFunction
import org.w3c.dom.HTMLInputElement import org.w3c.dom.HTMLInputElement
import org.w3c.dom.events.Event import org.w3c.dom.events.Event
import react.FunctionComponent import react.FC
import react.dom.attrs import react.dom.attrs
import react.functionComponent import react.fc
import react.useState import react.useState
import space.kscience.dataforge.meta.descriptors.ValueRequirement import space.kscience.dataforge.meta.descriptors.ValueRequirement
import space.kscience.dataforge.meta.double import space.kscience.dataforge.meta.double
@ -19,8 +19,7 @@ import styled.css
import styled.styledInput import styled.styledInput
@JsExport @JsExport
public val RangeValueChooser: FunctionComponent<ValueChooserProps> = public val RangeValueChooser: FC<ValueChooserProps> = fc("RangeValueChooser") { props ->
functionComponent("RangeValueChooser") { props ->
var innerValue by useState(props.actual.double) var innerValue by useState(props.actual.double)
var rangeDisabled: Boolean by useState(props.meta.value == null) var rangeDisabled: Boolean by useState(props.meta.value == null)

View File

@ -21,9 +21,7 @@ public external interface ThreeCanvasProps : Props {
public var selected: Name? public var selected: Name?
} }
public val ThreeCanvasComponent: FunctionComponent<ThreeCanvasProps> = functionComponent( public val ThreeCanvasComponent: FC<ThreeCanvasProps> = fc("ThreeCanvasComponent") { props ->
"ThreeCanvasComponent"
) { props ->
val elementRef = useRef<Element>(null) val elementRef = useRef<Element>(null)
var canvas by useState<ThreeCanvas?>(null) var canvas by useState<ThreeCanvas?>(null)

View File

@ -28,7 +28,7 @@ public external interface ObjectTreeProps : Props {
public var clickCallback: (Name) -> Unit public var clickCallback: (Name) -> Unit
} }
private val TreeLabel = functionComponent<ObjectTreeProps> { props -> private val TreeLabel = fc<ObjectTreeProps> { props ->
val token = useMemo(props.name) { props.name.lastOrNull()?.toString() ?: "World" } val token = useMemo(props.name) { props.name.lastOrNull()?.toString() ?: "World" }
styledSpan { styledSpan {
css { css {
@ -107,14 +107,14 @@ private fun RBuilder.visionTree(props: ObjectTreeProps): Unit {
} }
@JsExport @JsExport
public val ObjectTree: FunctionComponent<ObjectTreeProps> = functionComponent("ObjectTree") { props -> public val ObjectTree: FC<ObjectTreeProps> = fc("ObjectTree") { props ->
visionTree(props) visionTree(props)
} }
public fun RBuilder.visionTree( public fun RBuilder.visionTree(
vision: Vision, vision: Vision,
selected: Name? = null, selected: Name? = null,
clickCallback: (Name) -> Unit = {} clickCallback: (Name) -> Unit = {},
) { ) {
child(ObjectTree) { child(ObjectTree) {
attrs { attrs {

View File

@ -10,11 +10,11 @@ import kotlinx.html.js.onKeyDownFunction
import org.w3c.dom.HTMLInputElement import org.w3c.dom.HTMLInputElement
import org.w3c.dom.HTMLSelectElement import org.w3c.dom.HTMLSelectElement
import org.w3c.dom.events.Event import org.w3c.dom.events.Event
import react.FunctionComponent import react.FC
import react.Props import react.Props
import react.dom.attrs import react.dom.attrs
import react.dom.option import react.dom.option
import react.functionComponent import react.fc
import react.useState import react.useState
import space.kscience.dataforge.meta.* import space.kscience.dataforge.meta.*
import space.kscience.dataforge.meta.descriptors.MetaDescriptor import space.kscience.dataforge.meta.descriptors.MetaDescriptor
@ -36,8 +36,7 @@ public external interface ValueChooserProps : Props {
} }
@JsExport @JsExport
public val StringValueChooser: FunctionComponent<ValueChooserProps> = public val StringValueChooser: FC<ValueChooserProps> = fc("StringValueChooser") { props ->
functionComponent("StringValueChooser") { props ->
var value by useState(props.actual.string ?: "") var value by useState(props.actual.string ?: "")
val keyDown: (Event) -> Unit = { event -> val keyDown: (Event) -> Unit = { event ->
if (event.type == "keydown" && event.asDynamic().key == "Enter") { if (event.type == "keydown" && event.asDynamic().key == "Enter") {
@ -61,8 +60,7 @@ public val StringValueChooser: FunctionComponent<ValueChooserProps> =
} }
@JsExport @JsExport
public val BooleanValueChooser: FunctionComponent<ValueChooserProps> = public val BooleanValueChooser: FC<ValueChooserProps> = fc("BooleanValueChooser") { props ->
functionComponent("BooleanValueChooser") { props ->
val handleChange: (Event) -> Unit = { val handleChange: (Event) -> Unit = {
val newValue = (it.target as HTMLInputElement).checked val newValue = (it.target as HTMLInputElement).checked
props.meta.value = newValue.asValue() props.meta.value = newValue.asValue()
@ -80,8 +78,7 @@ public val BooleanValueChooser: FunctionComponent<ValueChooserProps> =
} }
@JsExport @JsExport
public val NumberValueChooser: FunctionComponent<ValueChooserProps> = public val NumberValueChooser: FC<ValueChooserProps> = fc("NumberValueChooser") { props ->
functionComponent("NumberValueChooser") { props ->
var innerValue by useState(props.actual.string ?: "") var innerValue by useState(props.actual.string ?: "")
val keyDown: (Event) -> Unit = { event -> val keyDown: (Event) -> Unit = { event ->
if (event.type == "keydown" && event.asDynamic().key == "Enter") { if (event.type == "keydown" && event.asDynamic().key == "Enter") {
@ -119,8 +116,7 @@ public val NumberValueChooser: FunctionComponent<ValueChooserProps> =
} }
@JsExport @JsExport
public val ComboValueChooser: FunctionComponent<ValueChooserProps> = public val ComboValueChooser: FC<ValueChooserProps> = fc("ComboValueChooser") { props ->
functionComponent("ComboValueChooser") { props ->
var selected by useState(props.actual.string ?: "") var selected by useState(props.actual.string ?: "")
val handleChange: (Event) -> Unit = { val handleChange: (Event) -> Unit = {
selected = (it.target as HTMLSelectElement).value selected = (it.target as HTMLSelectElement).value
@ -144,8 +140,7 @@ public val ComboValueChooser: FunctionComponent<ValueChooserProps> =
} }
@JsExport @JsExport
public val ColorValueChooser: FunctionComponent<ValueChooserProps> = public val ColorValueChooser: FC<ValueChooserProps> = fc("ColorValueChooser") { props ->
functionComponent("ColorValueChooser") { props ->
val handleChange: (Event) -> Unit = { val handleChange: (Event) -> Unit = {
props.meta.value = (it.target as HTMLInputElement).value.asValue() props.meta.value = (it.target as HTMLInputElement).value.asValue()
} }
@ -165,7 +160,7 @@ public val ColorValueChooser: FunctionComponent<ValueChooserProps> =
} }
@JsExport @JsExport
public val ValueChooser: FunctionComponent<ValueChooserProps> = functionComponent("ValueChooser") { props -> public val ValueChooser: FC<ValueChooserProps> = fc("ValueChooser") { props ->
val rawInput by useState(false) val rawInput by useState(false)
val descriptor = props.descriptor val descriptor = props.descriptor

View File

@ -5,7 +5,9 @@ plugins {
val dataforgeVersion: String by rootProject.extra val dataforgeVersion: String by rootProject.extra
kscience{ kscience{
useSerialization() useSerialization{
json()
}
} }
kotlin { kotlin {

View File

@ -71,17 +71,14 @@ public interface ValueChooser {
public companion object { public companion object {
private fun findWidgetByType(context: Context, type: String): Factory? { private fun findWidgetByType(context: Context, type: String): Factory? = when (Name.parse(type)) {
return when (Name.parse(type)) {
TextValueChooser.name -> TextValueChooser TextValueChooser.name -> TextValueChooser
ColorValueChooser.name -> ColorValueChooser ColorValueChooser.name -> ColorValueChooser
ComboBoxValueChooser.name -> ComboBoxValueChooser ComboBoxValueChooser.name -> ComboBoxValueChooser
else -> null//context.provideByType(type)//Search for additional factories in the plugin else -> null//context.provideByType(type)//Search for additional factories in the plugin
} }
}
private fun build(context: Context, descriptor: MetaDescriptor?): ValueChooser { private fun build(context: Context, descriptor: MetaDescriptor?): ValueChooser = if (descriptor == null) {
return if (descriptor == null) {
TextValueChooser(); TextValueChooser();
} else { } else {
val widgetType = descriptor.widgetType val widgetType = descriptor.widgetType
@ -100,7 +97,6 @@ public interface ValueChooser {
chooser.descriptor = descriptor chooser.descriptor = descriptor
chooser chooser
} }
}
public fun build( public fun build(
context: Context, context: Context,

View File

@ -42,6 +42,7 @@ public interface Point3D {
} }
} }
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@Serializable(Point3DSerializer::class) @Serializable(Point3DSerializer::class)
public interface MutablePoint3D : Point3D { public interface MutablePoint3D : Point3D {
override var x: Float override var x: Float
@ -56,7 +57,6 @@ internal object Point3DSerializer : KSerializer<Point3D> {
override val descriptor: SerialDescriptor = Point3DImpl.serializer().descriptor override val descriptor: SerialDescriptor = Point3DImpl.serializer().descriptor
override fun deserialize(decoder: Decoder): MutablePoint3D = decoder.decodeSerializableValue(Point3DImpl.serializer()) override fun deserialize(decoder: Decoder): MutablePoint3D = decoder.decodeSerializableValue(Point3DImpl.serializer())
override fun serialize(encoder: Encoder, value: Point3D) { override fun serialize(encoder: Encoder, value: Point3D) {