Compare commits

..

7 Commits

Author SHA1 Message Date
65e8ae5f75 Merge pull request 'kotlin is here' (#3) from develop into main
Reviewed-on: #3
2025-07-21 22:13:29 +03:00
363a82d0c5 customtheme 2025-07-21 20:05:22 +03:00
e83535e871 loginscreen 2025-07-19 02:22:26 +03:00
224cd8e411 kmp init 2025-07-19 01:00:54 +03:00
3de0277a0b revert 561a5df648
revert kmp init
2025-07-19 00:54:08 +03:00
0ea15cdacd revert f213a11368
revert kmp init
2025-07-19 00:53:59 +03:00
44a5bd9d67 revert 91f6ce8288
revert kmp init
2025-07-19 00:52:19 +03:00
86 changed files with 179 additions and 843 deletions

19
client/.gitignore vendored
View File

@ -62,6 +62,25 @@ local_settings.py
db.sqlite3
db.sqlite3-journal
*.iml
.kotlin
.gradle
**/build/
xcuserdata
!src/**/build/
local.properties
.idea
.DS_Store
captures
.externalNativeBuild
.cxx
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcodeproj/project.xcworkspace/
!*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings
# Flask stuff:
instance/
.webassets-cache

View File

@ -1 +0,0 @@
<EFBFBD>mtq2jwarfnafxi7l63qo7uu7aa<10><>_<EFBFBD>G<EFBFBD>La<4C><61>G<EFBFBD><47>_1uh<02>classesA7<41><37><EFBFBD>Bt<42>J<EFBFBD>h[;8%<25><>sourcesJ7<4A>ȤH<C8A4><48>`<60>db<64>WD

View File

@ -1,309 +0,0 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
import org.gradle.plugin.use.PluginDependency;
import org.gradle.api.artifacts.ExternalModuleDependencyBundle;
import org.gradle.api.artifacts.MutableVersionConstraint;
import org.gradle.api.provider.Provider;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory;
import org.gradle.api.internal.catalog.DefaultVersionCatalog;
import java.util.Map;
import org.gradle.api.internal.attributes.ImmutableAttributesFactory;
import org.gradle.api.internal.artifacts.dsl.CapabilityNotationParser;
import javax.inject.Inject;
/**
* A catalog of dependencies accessible via the {@code libs} extension.
*/
@NonNullApi
public class LibrariesForLibs extends AbstractExternalDependencyFactory {
private final AbstractExternalDependencyFactory owner = this;
private final AndroidxLibraryAccessors laccForAndroidxLibraryAccessors = new AndroidxLibraryAccessors(owner);
private final KotlinLibraryAccessors laccForKotlinLibraryAccessors = new KotlinLibraryAccessors(owner);
private final KotlinxLibraryAccessors laccForKotlinxLibraryAccessors = new KotlinxLibraryAccessors(owner);
private final VersionAccessors vaccForVersionAccessors = new VersionAccessors(providers, config);
private final BundleAccessors baccForBundleAccessors = new BundleAccessors(objects, providers, config, attributesFactory, capabilityNotationParser);
private final PluginAccessors paccForPluginAccessors = new PluginAccessors(providers, config);
@Inject
public LibrariesForLibs(DefaultVersionCatalog config, ProviderFactory providers, ObjectFactory objects, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) {
super(config, providers, objects, attributesFactory, capabilityNotationParser);
}
/**
* Dependency provider for <b>junit</b> with <b>junit:junit</b> coordinates and
* with version reference <b>junit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getJunit() {
return create("junit");
}
/**
* Group of libraries at <b>androidx</b>
*/
public AndroidxLibraryAccessors getAndroidx() {
return laccForAndroidxLibraryAccessors;
}
/**
* Group of libraries at <b>kotlin</b>
*/
public KotlinLibraryAccessors getKotlin() {
return laccForKotlinLibraryAccessors;
}
/**
* Group of libraries at <b>kotlinx</b>
*/
public KotlinxLibraryAccessors getKotlinx() {
return laccForKotlinxLibraryAccessors;
}
/**
* Group of versions at <b>versions</b>
*/
public VersionAccessors getVersions() {
return vaccForVersionAccessors;
}
/**
* Group of bundles at <b>bundles</b>
*/
public BundleAccessors getBundles() {
return baccForBundleAccessors;
}
/**
* Group of plugins at <b>plugins</b>
*/
public PluginAccessors getPlugins() {
return paccForPluginAccessors;
}
public static class AndroidxLibraryAccessors extends SubDependencyFactory {
private final AndroidxLifecycleLibraryAccessors laccForAndroidxLifecycleLibraryAccessors = new AndroidxLifecycleLibraryAccessors(owner);
public AndroidxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.lifecycle</b>
*/
public AndroidxLifecycleLibraryAccessors getLifecycle() {
return laccForAndroidxLifecycleLibraryAccessors;
}
}
public static class AndroidxLifecycleLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>runtimeCompose</b> with <b>org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose</b> coordinates and
* with version reference <b>androidx.lifecycle</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getRuntimeCompose() {
return create("androidx.lifecycle.runtimeCompose");
}
/**
* Dependency provider for <b>viewmodel</b> with <b>org.jetbrains.androidx.lifecycle:lifecycle-viewmodel</b> coordinates and
* with version reference <b>androidx.lifecycle</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getViewmodel() {
return create("androidx.lifecycle.viewmodel");
}
}
public static class KotlinLibraryAccessors extends SubDependencyFactory {
public KotlinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>test</b> with <b>org.jetbrains.kotlin:kotlin-test</b> coordinates and
* with version reference <b>kotlin</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getTest() {
return create("kotlin.test");
}
/**
* Dependency provider for <b>testJunit</b> with <b>org.jetbrains.kotlin:kotlin-test-junit</b> coordinates and
* with version reference <b>kotlin</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getTestJunit() {
return create("kotlin.testJunit");
}
}
public static class KotlinxLibraryAccessors extends SubDependencyFactory {
public KotlinxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>coroutinesSwing</b> with <b>org.jetbrains.kotlinx:kotlinx-coroutines-swing</b> coordinates and
* with version reference <b>kotlinx.coroutines</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getCoroutinesSwing() {
return create("kotlinx.coroutinesSwing");
}
}
public static class VersionAccessors extends VersionFactory {
private final AndroidxVersionAccessors vaccForAndroidxVersionAccessors = new AndroidxVersionAccessors(providers, config);
private final KotlinxVersionAccessors vaccForKotlinxVersionAccessors = new KotlinxVersionAccessors(providers, config);
public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>composeHotReload</b> with value <b>1.0.0-alpha11</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeHotReload() { return getVersion("composeHotReload"); }
/**
* Version alias <b>composeMultiplatform</b> with value <b>1.8.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeMultiplatform() { return getVersion("composeMultiplatform"); }
/**
* Version alias <b>junit</b> with value <b>4.13.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getJunit() { return getVersion("junit"); }
/**
* Version alias <b>kotlin</b> with value <b>2.2.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getKotlin() { return getVersion("kotlin"); }
/**
* Group of versions at <b>versions.androidx</b>
*/
public AndroidxVersionAccessors getAndroidx() {
return vaccForAndroidxVersionAccessors;
}
/**
* Group of versions at <b>versions.kotlinx</b>
*/
public KotlinxVersionAccessors getKotlinx() {
return vaccForKotlinxVersionAccessors;
}
}
public static class AndroidxVersionAccessors extends VersionFactory {
public AndroidxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>androidx.lifecycle</b> with value <b>2.9.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getLifecycle() { return getVersion("androidx.lifecycle"); }
}
public static class KotlinxVersionAccessors extends VersionFactory {
public KotlinxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>kotlinx.coroutines</b> with value <b>1.10.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoroutines() { return getVersion("kotlinx.coroutines"); }
}
public static class BundleAccessors extends BundleFactory {
public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); }
}
public static class PluginAccessors extends PluginFactory {
public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>composeCompiler</b> with plugin id <b>org.jetbrains.kotlin.plugin.compose</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeCompiler() { return createPlugin("composeCompiler"); }
/**
* Plugin provider for <b>composeHotReload</b> with plugin id <b>org.jetbrains.compose.hot-reload</b> and
* with version reference <b>composeHotReload</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeHotReload() { return createPlugin("composeHotReload"); }
/**
* Plugin provider for <b>composeMultiplatform</b> with plugin id <b>org.jetbrains.compose</b> and
* with version reference <b>composeMultiplatform</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeMultiplatform() { return createPlugin("composeMultiplatform"); }
/**
* Plugin provider for <b>kotlinMultiplatform</b> with plugin id <b>org.jetbrains.kotlin.multiplatform</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getKotlinMultiplatform() { return createPlugin("kotlinMultiplatform"); }
}
}

View File

@ -1,373 +0,0 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
import org.gradle.plugin.use.PluginDependency;
import org.gradle.api.artifacts.ExternalModuleDependencyBundle;
import org.gradle.api.artifacts.MutableVersionConstraint;
import org.gradle.api.provider.Provider;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory;
import org.gradle.api.internal.catalog.DefaultVersionCatalog;
import java.util.Map;
import org.gradle.api.internal.attributes.ImmutableAttributesFactory;
import org.gradle.api.internal.artifacts.dsl.CapabilityNotationParser;
import javax.inject.Inject;
/**
* A catalog of dependencies accessible via the {@code libs} extension.
*/
@NonNullApi
public class LibrariesForLibsInPluginsBlock extends AbstractExternalDependencyFactory {
private final AbstractExternalDependencyFactory owner = this;
private final AndroidxLibraryAccessors laccForAndroidxLibraryAccessors = new AndroidxLibraryAccessors(owner);
private final KotlinLibraryAccessors laccForKotlinLibraryAccessors = new KotlinLibraryAccessors(owner);
private final KotlinxLibraryAccessors laccForKotlinxLibraryAccessors = new KotlinxLibraryAccessors(owner);
private final VersionAccessors vaccForVersionAccessors = new VersionAccessors(providers, config);
private final BundleAccessors baccForBundleAccessors = new BundleAccessors(objects, providers, config, attributesFactory, capabilityNotationParser);
private final PluginAccessors paccForPluginAccessors = new PluginAccessors(providers, config);
@Inject
public LibrariesForLibsInPluginsBlock(DefaultVersionCatalog config, ProviderFactory providers, ObjectFactory objects, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) {
super(config, providers, objects, attributesFactory, capabilityNotationParser);
}
/**
* Dependency provider for <b>junit</b> with <b>junit:junit</b> coordinates and
* with version reference <b>junit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getJunit() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("junit");
}
/**
* Group of libraries at <b>androidx</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLibraryAccessors getAndroidx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLibraryAccessors;
}
/**
* Group of libraries at <b>kotlin</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public KotlinLibraryAccessors getKotlin() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForKotlinLibraryAccessors;
}
/**
* Group of libraries at <b>kotlinx</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public KotlinxLibraryAccessors getKotlinx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForKotlinxLibraryAccessors;
}
/**
* Group of versions at <b>versions</b>
*/
public VersionAccessors getVersions() {
return vaccForVersionAccessors;
}
/**
* Group of bundles at <b>bundles</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public BundleAccessors getBundles() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return baccForBundleAccessors;
}
/**
* Group of plugins at <b>plugins</b>
*/
public PluginAccessors getPlugins() {
return paccForPluginAccessors;
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLibraryAccessors extends SubDependencyFactory {
private final AndroidxLifecycleLibraryAccessors laccForAndroidxLifecycleLibraryAccessors = new AndroidxLifecycleLibraryAccessors(owner);
public AndroidxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.lifecycle</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLifecycleLibraryAccessors getLifecycle() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLifecycleLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLifecycleLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>runtimeCompose</b> with <b>org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose</b> coordinates and
* with version reference <b>androidx.lifecycle</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getRuntimeCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.lifecycle.runtimeCompose");
}
/**
* Dependency provider for <b>viewmodel</b> with <b>org.jetbrains.androidx.lifecycle:lifecycle-viewmodel</b> coordinates and
* with version reference <b>androidx.lifecycle</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getViewmodel() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.lifecycle.viewmodel");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class KotlinLibraryAccessors extends SubDependencyFactory {
public KotlinLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>test</b> with <b>org.jetbrains.kotlin:kotlin-test</b> coordinates and
* with version reference <b>kotlin</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getTest() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("kotlin.test");
}
/**
* Dependency provider for <b>testJunit</b> with <b>org.jetbrains.kotlin:kotlin-test-junit</b> coordinates and
* with version reference <b>kotlin</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getTestJunit() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("kotlin.testJunit");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class KotlinxLibraryAccessors extends SubDependencyFactory {
public KotlinxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>coroutinesSwing</b> with <b>org.jetbrains.kotlinx:kotlinx-coroutines-swing</b> coordinates and
* with version reference <b>kotlinx.coroutines</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getCoroutinesSwing() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("kotlinx.coroutinesSwing");
}
}
public static class VersionAccessors extends VersionFactory {
private final AndroidxVersionAccessors vaccForAndroidxVersionAccessors = new AndroidxVersionAccessors(providers, config);
private final KotlinxVersionAccessors vaccForKotlinxVersionAccessors = new KotlinxVersionAccessors(providers, config);
public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>composeHotReload</b> with value <b>1.0.0-alpha11</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeHotReload() { return getVersion("composeHotReload"); }
/**
* Version alias <b>composeMultiplatform</b> with value <b>1.8.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeMultiplatform() { return getVersion("composeMultiplatform"); }
/**
* Version alias <b>junit</b> with value <b>4.13.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getJunit() { return getVersion("junit"); }
/**
* Version alias <b>kotlin</b> with value <b>2.2.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getKotlin() { return getVersion("kotlin"); }
/**
* Group of versions at <b>versions.androidx</b>
*/
public AndroidxVersionAccessors getAndroidx() {
return vaccForAndroidxVersionAccessors;
}
/**
* Group of versions at <b>versions.kotlinx</b>
*/
public KotlinxVersionAccessors getKotlinx() {
return vaccForKotlinxVersionAccessors;
}
}
public static class AndroidxVersionAccessors extends VersionFactory {
public AndroidxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>androidx.lifecycle</b> with value <b>2.9.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getLifecycle() { return getVersion("androidx.lifecycle"); }
}
public static class KotlinxVersionAccessors extends VersionFactory {
public KotlinxVersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>kotlinx.coroutines</b> with value <b>1.10.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoroutines() { return getVersion("kotlinx.coroutines"); }
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class BundleAccessors extends BundleFactory {
public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); }
}
public static class PluginAccessors extends PluginFactory {
public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>composeCompiler</b> with plugin id <b>org.jetbrains.kotlin.plugin.compose</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeCompiler() { return createPlugin("composeCompiler"); }
/**
* Plugin provider for <b>composeHotReload</b> with plugin id <b>org.jetbrains.compose.hot-reload</b> and
* with version reference <b>composeHotReload</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeHotReload() { return createPlugin("composeHotReload"); }
/**
* Plugin provider for <b>composeMultiplatform</b> with plugin id <b>org.jetbrains.compose</b> and
* with version reference <b>composeMultiplatform</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getComposeMultiplatform() { return createPlugin("composeMultiplatform"); }
/**
* Plugin provider for <b>kotlinMultiplatform</b> with plugin id <b>org.jetbrains.kotlin.multiplatform</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getKotlinMultiplatform() { return createPlugin("kotlinMultiplatform"); }
}
}

View File

@ -1 +0,0 @@
<EFBFBD>mtq2jwarfnafxi7l63qo7uu7aao5<6F><35><EFBFBD><EFBFBD>_i^i</<2F><>&<02>classes<06>]<0F><EFBFBD>ʶ<12>5<EFBFBD>z<EFBFBD>sources<10>g<EFBFBD><67>x<EFBFBD>}<7D>a@k<><6B>

View File

@ -1,20 +0,0 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.internal.artifacts.dependencies.ProjectDependencyInternal;
import org.gradle.api.internal.artifacts.DefaultProjectDependencyFactory;
import org.gradle.api.internal.artifacts.dsl.dependencies.ProjectFinder;
import org.gradle.api.internal.catalog.DelegatingProjectDependency;
import org.gradle.api.internal.catalog.TypeSafeProjectDependencyFactory;
import javax.inject.Inject;
@NonNullApi
public class ComposeAppProjectDependency extends DelegatingProjectDependency {
@Inject
public ComposeAppProjectDependency(TypeSafeProjectDependencyFactory factory, ProjectDependencyInternal delegate) {
super(factory, delegate);
}
}

View File

@ -1,31 +0,0 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.internal.artifacts.dependencies.ProjectDependencyInternal;
import org.gradle.api.internal.artifacts.DefaultProjectDependencyFactory;
import org.gradle.api.internal.artifacts.dsl.dependencies.ProjectFinder;
import org.gradle.api.internal.catalog.DelegatingProjectDependency;
import org.gradle.api.internal.catalog.TypeSafeProjectDependencyFactory;
import javax.inject.Inject;
@NonNullApi
public class RootProjectAccessor extends TypeSafeProjectDependencyFactory {
@Inject
public RootProjectAccessor(DefaultProjectDependencyFactory factory, ProjectFinder finder) {
super(factory, finder);
}
/**
* Creates a project dependency on the project at path ":"
*/
public SClientProjectDependency getSClient() { return new SClientProjectDependency(getFactory(), create(":")); }
/**
* Creates a project dependency on the project at path ":composeApp"
*/
public ComposeAppProjectDependency getComposeApp() { return new ComposeAppProjectDependency(getFactory(), create(":composeApp")); }
}

View File

@ -1,25 +0,0 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.internal.artifacts.dependencies.ProjectDependencyInternal;
import org.gradle.api.internal.artifacts.DefaultProjectDependencyFactory;
import org.gradle.api.internal.artifacts.dsl.dependencies.ProjectFinder;
import org.gradle.api.internal.catalog.DelegatingProjectDependency;
import org.gradle.api.internal.catalog.TypeSafeProjectDependencyFactory;
import javax.inject.Inject;
@NonNullApi
public class SClientProjectDependency extends DelegatingProjectDependency {
@Inject
public SClientProjectDependency(TypeSafeProjectDependencyFactory factory, ProjectDependencyInternal delegate) {
super(factory, delegate);
}
/**
* Creates a project dependency on the project at path ":composeApp"
*/
public ComposeAppProjectDependency getComposeApp() { return new ComposeAppProjectDependency(getFactory(), create(":composeApp")); }
}

View File

@ -1,18 +0,0 @@
This is a Kotlin Multiplatform project targeting Web, Desktop.
* `/composeApp` is for code that will be shared across your Compose Multiplatform applications.
It contains several subfolders:
- `commonMain` is for code thats common for all targets.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name.
For example, if you want to use Apples CoreCrypto for the iOS part of your Kotlin app,
`iosMain` would be the right folder for such calls.
Learn more about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html),
[Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#compose-multiplatform),
[Kotlin/Wasm](https://kotl.in/wasm/)…
We would appreciate your feedback on Compose/Web and Kotlin/Wasm in the public Slack channel [#compose-web](https://slack-chats.kotlinlang.org/c/compose-web).
If you face any issues, please report them on [YouTrack](https://youtrack.jetbrains.com/newIssue?project=CMP).
You can open the web application by running the `:composeApp:wasmJsBrowserDevelopmentRun` Gradle task.

View File

@ -7,6 +7,8 @@ plugins {
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.composeHotReload)
id("org.jetbrains.kotlin.plugin.serialization") version "1.9.20"
}
kotlin {
@ -44,6 +46,7 @@ kotlin {
implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.lifecycle.runtimeCompose)
implementation("org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03")
}
commonTest.dependencies {
implementation(libs.kotlin.test)

View File

@ -1,44 +1,21 @@
package su.sonoma.sclient
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.safeContentPadding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import org.jetbrains.compose.resources.painterResource
import androidx.compose.material3.ColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.navigation.NavController
import org.jetbrains.compose.ui.tooling.preview.Preview
import sclient.composeapp.generated.resources.Res
import sclient.composeapp.generated.resources.compose_multiplatform
@Composable
@Preview
fun App() {
MaterialTheme {
var showContent by remember { mutableStateOf(false) }
Column(
modifier = Modifier
.safeContentPadding()
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
fun App(
onNavHostReady: suspend (NavController) -> Unit = {}
) {
Button(onClick = { showContent = !showContent }) {
Text("Click me!")
}
AnimatedVisibility(showContent) {
val greeting = remember { Greeting().greet() }
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
Image(painterResource(Res.drawable.compose_multiplatform), null)
Text("Compose: $greeting")
}
}
CustomTheme {
val navController = Navigation().getNavController()
LaunchedEffect(navController) {
onNavHostReady(navController)
}
}
}

View File

@ -0,0 +1,66 @@
package su.sonoma.sclient
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Typography
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import org.jetbrains.compose.resources.Font
import sclient.composeapp.generated.resources.Res
import sclient.composeapp.generated.resources.consolas
import sclient.composeapp.generated.resources.consolasbold
@Composable
fun CustomTheme(
content: @Composable () -> Unit
) {
val darkTheme = isSystemInDarkTheme()
val colors = if (darkTheme) {
darkColorScheme()
} else {
lightColorScheme()
}
val fontFamily = FontFamily(Font(Res.font.consolas, FontWeight.Normal))
val typography = InterTypography()
MaterialTheme(
colorScheme = colors,
content = content,
typography = typography
)
}
@Composable
private fun InterTypography(): Typography {
val interFont = FontFamily(
Font(Res.font.consolas, FontWeight.Normal),
Font(Res.font.consolasbold, FontWeight.Bold),
)
return with(MaterialTheme.typography) {
copy(
displayLarge = displayLarge.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
displayMedium = displayMedium.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
displaySmall = displaySmall.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
headlineLarge = headlineLarge.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
headlineMedium = headlineMedium.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
headlineSmall = headlineSmall.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
titleLarge = titleLarge.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
titleMedium = titleMedium.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
titleSmall = titleSmall.copy(fontFamily = interFont, fontWeight = FontWeight.Bold),
labelLarge = labelLarge.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
labelMedium = labelMedium.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
labelSmall = labelSmall.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
bodyLarge = bodyLarge.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
bodyMedium = bodyMedium.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
bodySmall = bodySmall.copy(fontFamily = interFont, fontWeight = FontWeight.Normal),
)
}
}

View File

@ -1,9 +0,0 @@
package su.sonoma.sclient
class Greeting {
private val platform = getPlatform()
fun greet(): String {
return "Hello, ${platform.name}!"
}
}

View File

@ -0,0 +1,26 @@
package su.sonoma.sclient
import androidx.compose.runtime.Composable
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import kotlinx.serialization.Serializable
import su.sonoma.sclient.screen.LoginScreen
@Serializable
class Navigation {
@Serializable
object Login
@Composable
fun getNavController(): NavHostController {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = Login) {
composable<Login> { LoginScreen() }
}
return navController
}
}

View File

@ -1,7 +0,0 @@
package su.sonoma.sclient
interface Platform {
val name: String
}
expect fun getPlatform(): Platform

View File

@ -0,0 +1,53 @@
package su.sonoma.sclient.screen
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.safeContentPadding
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import su.sonoma.sclient.CustomTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import org.jetbrains.compose.ui.tooling.preview.Preview
@Composable
@Preview
fun LoginScreen() {
Scaffold {
Column(
modifier = Modifier
.safeContentPadding()
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
var login by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
TextField(
value = login,
onValueChange = { login = it },
label = { Text("Login") }
)
TextField(
value = password,
onValueChange = { password = it },
label = { Text("Password") }
)
Button(
onClick = { print("$login, $password") }
) {
Text("Login")
}
}
}
}

View File

@ -1,7 +0,0 @@
package su.sonoma.sclient
class JVMPlatform: Platform {
override val name: String = "Java ${System.getProperty("java.version")}"
}
actual fun getPlatform(): Platform = JVMPlatform()

View File

@ -1,7 +0,0 @@
package su.sonoma.sclient
class WasmPlatform: Platform {
override val name: String = "Web with Kotlin/Wasm"
}
actual fun getPlatform(): Platform = WasmPlatform()