diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala index 8bde2d2..63eccf8 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala @@ -3,7 +3,6 @@ import zio.* import zio.test.* import com.raquo.airstream.core.EventStream -import com.raquo.airstream.core.Observer import com.raquo.airstream.ownership.Owner object ZIOLaminarInteropSpec extends ZIOSpecDefault: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala index 8bde2d2..63eccf8 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala @@ -3,7 +3,6 @@ import zio.* import zio.test.* import com.raquo.airstream.core.EventStream -import com.raquo.airstream.core.Observer import com.raquo.airstream.ownership.Owner object ZIOLaminarInteropSpec extends ZIOSpecDefault: diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala index fbcd5c8..f30aa6c 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala @@ -1,8 +1,6 @@ package works.iterative.ui.components.laminar.forms import zio.test.* -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext object FormZipSpec extends ZIOSpecDefault: def spec = suite("Form using zip operator")( diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala index 8bde2d2..63eccf8 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala @@ -3,7 +3,6 @@ import zio.* import zio.test.* import com.raquo.airstream.core.EventStream -import com.raquo.airstream.core.Observer import com.raquo.airstream.ownership.Owner object ZIOLaminarInteropSpec extends ZIOSpecDefault: diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala index fbcd5c8..f30aa6c 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala @@ -1,8 +1,6 @@ package works.iterative.ui.components.laminar.forms import zio.test.* -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext object FormZipSpec extends ZIOSpecDefault: def spec = suite("Form using zip operator")( diff --git a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala index 912e74e..8a6cdf1 100644 --- a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala +++ b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala @@ -4,14 +4,12 @@ import org.apache.poi.xssf.usermodel.XSSFRow import org.apache.poi.ss.usermodel.CellStyle import java.time.LocalDate -import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCellStyle import org.apache.poi.ss.usermodel.IndexedColors import org.apache.poi.ss.usermodel.FillPatternType import org.apache.poi.ss.usermodel.BorderStyle import org.apache.poi.xssf.usermodel.XSSFCell -import org.apache.poi.ss.usermodel.Hyperlink import org.apache.poi.common.usermodel.HyperlinkType case class ExternalLink( @@ -77,14 +75,14 @@ override def writeDataCells( row: XSSFRow, value: T - )(using styles: TableCellStyles) = + )(using styles: TableCellStyles): UIO[Unit] = ZIO.succeed { specs.zipWithIndex.map { case (spec, i) => val cell = row.createCell(i) spec.set(cell, value) styles.byName(spec.id).foreach(cell.setCellStyle) } - } + }.unit override def columnSizes: List[Int] = specs.map(_.width).toList diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala index 8bde2d2..63eccf8 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala @@ -3,7 +3,6 @@ import zio.* import zio.test.* import com.raquo.airstream.core.EventStream -import com.raquo.airstream.core.Observer import com.raquo.airstream.ownership.Owner object ZIOLaminarInteropSpec extends ZIOSpecDefault: diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala index fbcd5c8..f30aa6c 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala @@ -1,8 +1,6 @@ package works.iterative.ui.components.laminar.forms import zio.test.* -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext object FormZipSpec extends ZIOSpecDefault: def spec = suite("Form using zip operator")( diff --git a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala index 912e74e..8a6cdf1 100644 --- a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala +++ b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala @@ -4,14 +4,12 @@ import org.apache.poi.xssf.usermodel.XSSFRow import org.apache.poi.ss.usermodel.CellStyle import java.time.LocalDate -import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCellStyle import org.apache.poi.ss.usermodel.IndexedColors import org.apache.poi.ss.usermodel.FillPatternType import org.apache.poi.ss.usermodel.BorderStyle import org.apache.poi.xssf.usermodel.XSSFCell -import org.apache.poi.ss.usermodel.Hyperlink import org.apache.poi.common.usermodel.HyperlinkType case class ExternalLink( @@ -77,14 +75,14 @@ override def writeDataCells( row: XSSFRow, value: T - )(using styles: TableCellStyles) = + )(using styles: TableCellStyles): UIO[Unit] = ZIO.succeed { specs.zipWithIndex.map { case (spec, i) => val cell = row.createCell(i) spec.set(cell, value) styles.byName(spec.id).foreach(cell.setCellStyle) } - } + }.unit override def columnSizes: List[Int] = specs.map(_.width).toList diff --git a/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala b/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala index 112786c..1f4ab8b 100644 --- a/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala +++ b/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala @@ -3,7 +3,6 @@ import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.time.ZoneId -import java.time.Instant import java.time.temporal.TemporalAccessor object TimeUtils: diff --git a/core/shared/src/main/scala/works/iterative/core/Text.scala b/core/shared/src/main/scala/works/iterative/core/Text.scala index 7b9ef2d..c4ea9d5 100644 --- a/core/shared/src/main/scala/works/iterative/core/Text.scala +++ b/core/shared/src/main/scala/works/iterative/core/Text.scala @@ -1,7 +1,6 @@ package works.iterative package core -import scala.jdk.OptionConverters.given import zio.prelude.Validation /* UserText represents different, more specific variants of String to be able to diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala index f432251..467dd17 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonFileRepositoryIntegrationSpec.scala @@ -4,7 +4,6 @@ import zio.test.* import zio.json.* import Assertion.* -import java.io.File object MongoJsonFileRepositoryIntegrationSpec extends ZIOSpecDefault: case class ExampleMetadata(osobniCislo: String) @@ -33,9 +32,6 @@ : TaskLayer[MongoJsonFileRepository[ExampleMetadata, ExampleCriteria]] = import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* - import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson - import org.mongodb.scala.bson.Document import org.mongodb.scala.gridfs.GridFSBucket MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer( for diff --git a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala index 7248c06..56ad2c3 100644 --- a/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala +++ b/mongo/src/it/scala/works/iterative/mongo/MongoJsonRepositoryIntegrationSpec.scala @@ -28,7 +28,6 @@ import org.mongodb.scala.* import org.mongodb.scala.model.Filters.* import org.bson.json.JsonObject - import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.bson.Document MongoConfig.fromEnv >>> MongoClient.layer >>> ZLayer { (for diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 96a3e39..90896ad 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -9,7 +9,6 @@ import org.mongodb.scala.model.ReplaceOptions import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.gridfs.GridFSBucket -import java.io.File import java.nio.ByteBuffer import com.mongodb.client.gridfs.model.GridFSUploadOptions import java.time.Instant diff --git a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 8df0465..c5c2d29 100644 --- a/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/js/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -4,11 +4,9 @@ import sttp.tapir.client.sttp.SttpClientInterpreter import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe -import scala.concurrent.Future import sttp.client3.SttpBackend import sttp.capabilities.WebSockets import sttp.capabilities.zio.ZioStreams -import scala.concurrent.ExecutionContext import sttp.client3.FetchOptions import org.scalajs.dom import sttp.client3.impl.zio.FetchZioBackend @@ -36,8 +34,10 @@ ): I => Task[O] = val req = toRequestThrowErrors(endpoint, baseUri.toUri) req(_).followRedirects(false).send(backend).map(_.body).tapError { + // TODO: remove this handler from here, the app should decide what to do on auth failure + // Which is what the redirect here is case e: RuntimeException if e.getMessage == "Unexpected redirect" => // Reload window on redirect, as it means that we need to log in again - ZIO.attempt(org.scalajs.dom.window.location.reload(true)) + ZIO.attempt(org.scalajs.dom.window.location.reload()) case _ => ZIO.unit } diff --git a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala index 3a88669..f83d618 100644 --- a/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala +++ b/tapir/jvm/src/main/scala/works/iterative/tapir/CustomTapirPlatformSpecific.scala @@ -6,15 +6,10 @@ import sttp.tapir.PublicEndpoint import sttp.tapir.client.sttp.WebSocketToPipe import sttp.tapir.client.sttp.SttpClientInterpreter -import sttp.capabilities.WebSockets import sttp.client3.SttpBackend import sttp.client3.httpclient.zio.HttpClientZioBackend -import sttp.capabilities.zio.ZioStreams -import sttp.client3.SttpBackendOptions import java.net.http.HttpClient import java.net.CookieHandler -import java.net.CookieManager -import java.net.HttpCookie import java.net.URI trait CustomTapirPlatformSpecific extends ZTapir with SttpClientInterpreter: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala index af9cf58..d4ef67e 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/File.scala @@ -1,7 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Icons import works.iterative.ui.components.laminar.HtmlRenderable diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala index 9108fee..e255781 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileList.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.tailwind.Icons +import com.raquo.laminar.api.L.* def FileList(files: List[File]): HtmlElement = ul( diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala index 74029cb..70e5810 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FilePicker.scala @@ -1,8 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* object FilePicker: sealed trait Event diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala index cdc03d6..1ff8185 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileSelector.scala @@ -1,11 +1,7 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import works.iterative.ui.components.tailwind.Loading -import io.laminext.syntax.core.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec object FileSelector: diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala index 41cb94c..e75c21a 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/FileTable.scala @@ -1,15 +1,11 @@ package works.iterative.services.files package components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.StringAsIsCodec -import works.iterative.ui.components.tailwind.Icons -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle -import java.time.ZoneId -import java.util.Locale -import works.iterative.ui.TimeUtils import works.iterative.core.CzechSupport +import works.iterative.ui.TimeUtils +import works.iterative.ui.components.tailwind.Icons def FileTable( files: Signal[List[File]], diff --git a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala index ce2e119..8e7ecb0 100644 --- a/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala +++ b/ui/js/src/main/scala/works/iterative/services/files/components/tailwind/UploadButton.scala @@ -1,6 +1,6 @@ package services.files.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.UIString import org.scalajs.dom.FileList diff --git a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala index dc898f3..88be485 100644 --- a/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/JsonMessageCatalogue.scala @@ -4,7 +4,6 @@ import core.{MessageCatalogue, MessageId} import scala.scalajs.js import works.iterative.core.UserMessage -import java.text.MessageFormat import scala.util.Try // TODO: support hierarchical json structure diff --git a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala index 046b651..14f9d9e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/dashboard/tailwind/Dashboard.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.dashboard.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Dashboard: def number(n: Int, color: String, t: String) = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala index a02e1b7..a598019 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Items.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala index 56f3864..ab6fa46 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/headless/Toggle.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.headless -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Toggle: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala index bfa063a..9dae462 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/Bins.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag case class Bin[Source, +Value]( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala index 3272cad..7e2b259 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ComputableComponent.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.model.Computable import works.iterative.ui.model.Computable.* import com.raquo.laminar.tags.HtmlTag diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala index 257391a..c8ed153 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/CustomAttrs.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.codecs.{StringAsIsCodec, BooleanAsTrueFalseStringCodec} object CustomAttrs { @@ -11,7 +11,7 @@ val datetime = htmlAttr("datetime", StringAsIsCodec) object svg { - import com.raquo.laminar.api.L.svg.{*, given} + import com.raquo.laminar.api.L.svg.* val ariaHidden = svgAttr("aria-hidden", BooleanAsTrueFalseStringCodec, None) } diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala index 4cff836..55d0d1c 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/EffectHandler.scala @@ -1,11 +1,8 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} - import zio.* -import com.raquo.airstream.core.Observer -import scala.annotation.implicitNotFound +import com.raquo.laminar.api.L.* trait EffectHandler[E, A]: def apply( @@ -42,8 +39,8 @@ actions: Observer[A] ): Modifier[HtmlElement] = onMountCallback(ctx => - effects.foreach { effect => - Unsafe.unsafe { implicit unsafe => + val _ = effects.foreach { effect => + val _ = Unsafe.unsafe { implicit unsafe => runtime.unsafe .runToFuture( handler.handle(effect).either.runForeach { diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala index 519ab18..cd630ba 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/FormComponents.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext trait FormComponents(using ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala index 6596de1..3f402b5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HasEffectHook.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** A way to add effect processor to component. * diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 01ba363..2acfc1d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -1,11 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.core.PlainMultiLine import java.time.Instant -import java.time.format.DateTimeFormatter import works.iterative.ui.TimeUtils trait HtmlRenderable[A]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala index 04e76e7..2340aa9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarComponent.scala @@ -1,7 +1,7 @@ package works.iterative.ui package components.laminar -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Hook the action -> effect cycle into a component. */ diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala index 4982296..62b2ea0 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LaminarExtensions.scala @@ -1,15 +1,9 @@ package works.iterative.ui.components.laminar -import com.raquo.laminar.api.L.{*, given} -import works.iterative.core.UserMessage +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* -import works.iterative.core.MessageId -import com.raquo.laminar.modifiers.RenderableNode -import com.raquo.laminar.nodes.ChildNode.Base +import works.iterative.core.{MessageId, UserMessage} import works.iterative.ui.components.ComponentContext -import works.iterative.ui.components.laminar.HtmlRenderable -import com.raquo.airstream.custom.CustomStreamSource -import com.raquo.airstream.custom.CustomSource import zio.IsSubtypeOfError object LaminarExtensions extends I18NExtensions with ZIOInteropExtensions @@ -43,7 +37,7 @@ msg.asElement trait ZIOInteropExtensions: - import zio.{ZIO, Runtime, Unsafe, Fiber, Cause} + import zio.{Fiber, Runtime, Unsafe, ZIO} extension [R, E, O](effect: ZIO[R, E, O]) def toEventStream(using runtime: Runtime[R])(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala new file mode 100644 index 0000000..bc15f92 --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LinkSupport.scala @@ -0,0 +1,11 @@ +package works.iterative.ui.components.laminar + +import com.raquo.laminar.api.L.* + +object LinkSupport: + + extension [El <: org.scalajs.dom.EventTarget]( + ep: EventProcessor[org.scalajs.dom.MouseEvent, org.scalajs.dom.MouseEvent] + ) + def noKeyMod = + ep.filter(ev => !(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala index 26a7e77..84cd177 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/LocalDateSelect.scala @@ -1,12 +1,10 @@ package works.iterative.ui.components.laminar import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import java.time.LocalDate -import java.time.format.DateTimeFormatter -import org.scalajs.dom.{Event, html} +import org.scalajs.dom.Event import com.raquo.laminar.modifiers.KeyUpdater trait LocalDateSelectModule: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala index 6d66554..0f21e92 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/StyleGuide.scala @@ -1,8 +1,6 @@ package works.iterative package ui.components.laminar -import com.raquo.laminar.api.L.{*, given} - trait ButtonStyles: def basic: String def primary: String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala index d331978..5fdb73b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FieldBuilder.scala @@ -1,20 +1,14 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven +import com.raquo.laminar.api.L +import com.raquo.laminar.api.L.* +import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.FileList -import works.iterative.core.FileSupport +import works.iterative.core.{FileSupport, UserMessage, Validated} +import zio.prelude.Validation + +import scala.util.NotGiven case class ChoiceOption[A](id: String, label: String, value: A) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala index 3f13f01..c94d2ce 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/Form.scala @@ -1,9 +1,8 @@ package works.iterative.ui.components.laminar.forms import zio.prelude.Validation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlRenderable.given -import app.tulz.tuplez.Composition sealed trait Form[A] extends FormBuilder[A] @@ -24,8 +23,6 @@ case class Zip[A, B <: Tuple]( left: Form[A], right: Form[B] - )(using - fctx: FormBuilderContext ) extends Form[A *: B]: override def build( initialValue: Option[A *: B] @@ -34,9 +31,7 @@ val rightComponent = right.build(initialValue.map(_.tail)) leftComponent.zip(rightComponent) - case class BiMap[A, B](form: Form[A], f: A => B, g: B => A)(using - fctx: FormBuilderContext - ) extends Form[B]: + case class BiMap[A, B](form: Form[A], f: A => B, g: B => A) extends Form[B]: override def build(initialValue: Option[B]): FormComponent[B] = form.build(initialValue.map(g)).map(f) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala index 218674f..1971da4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormBuilderModule.scala @@ -1,16 +1,8 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.Validation import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue +import com.raquo.laminar.api.L.* +import zio.prelude.Validation trait FormBuilderModule: def buildForm[A](form: Form[A], submit: Observer[A]): HtmlFormBuilder[A] = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala index cdb24d8..4c202dd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormComponent.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.forms -import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} import com.raquo.airstream.core.Signal +import com.raquo.laminar.api.L.* import works.iterative.core.Validated -import app.tulz.tuplez.Composition +import zio.prelude.* trait FormComponent[A]: def validated: Signal[Validated[A]] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala index 7757539..209f3f6 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/FormUIFactory.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.forms -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala index 1529a68..4d3c63e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/InputCodec.scala @@ -1,19 +1,7 @@ package works.iterative.ui.components.laminar.forms +import works.iterative.core.{Email, PlainMultiLine, Validated} import zio.prelude.Validation -import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom.html -import com.raquo.laminar.nodes.ReactiveHtmlElement -import works.iterative.core.UserMessage -import works.iterative.core.PlainMultiLine -import com.raquo.airstream.core.Signal -import works.iterative.ui.components.laminar.HtmlRenderable.given -import works.iterative.ui.components.ComponentContext -import works.iterative.core.MessageCatalogue -import works.iterative.core.Validated -import scala.util.NotGiven -import works.iterative.core.Email trait InputCodec[A]: def encode(a: A): String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala index 466a79c..6a095ee 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/forms/package.scala @@ -1,8 +1,5 @@ package works.iterative.ui.components.laminar -import zio.prelude.Validation -import works.iterative.core.UserMessage - package object forms: type FieldId = String type FieldLabel = String diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala index 65e2cea..9f4514f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageComponent.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.formpage -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.LaminarComponent import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -11,7 +10,6 @@ self: FormPageModel[T] with FormPageView[T] with FormBuilderModule => class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) with Module: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala index fac5f49..2b0eced 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageView.scala @@ -1,10 +1,9 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.forms.FormBuilderModule import works.iterative.ui.components.laminar.forms.Form -import works.iterative.ui.components.ComponentContext import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.forms.FormBuilderContext @@ -12,7 +11,6 @@ self: FormPageModel[T] with FormBuilderModule => class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_], fctx: FormBuilderContext ): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala index 2364cb3..db9a93a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/formpage/FormPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.formpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala index c220dac..d9ed2aa 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageComponent.scala @@ -1,17 +1,16 @@ package works.iterative.ui.components.laminar.modules.listpage -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.laminar.EffectHandler -import works.iterative.ui.components.laminar.LaminarComponent -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* +import works.iterative.ui.components.laminar.{EffectHandler, LaminarComponent} import works.iterative.ui.components.laminar.tables.HtmlTableBuilderModule trait ListPageComponent[T]: self: ListPageView[T] with ListPageModel[T] with HtmlTableBuilderModule => - class Component(effectHandler: EffectHandler[Effect, Action])(using - ctx: ComponentContext[_] - ) extends LaminarComponent[Model, Action, Effect, HtmlElement](effectHandler) + class Component(effectHandler: EffectHandler[Effect, Action]) + extends LaminarComponent[Model, Action, Effect, HtmlElement]( + effectHandler + ) with Module: override def render( m: Signal[Model], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala index c34ce82..dfaef8b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageModel.scala @@ -2,8 +2,6 @@ import works.iterative.core.UserMessage import works.iterative.ui.model.Computable -import works.iterative.ui.services.UserNotificationService -import works.iterative.ui.ZIOEffectHandler trait ListPageModel[T]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala index 1012c6c..49641da 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageView.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.prelude.* -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.components.ComponentContext +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.ComputableComponent import works.iterative.ui.components.laminar.HtmlTabular import io.laminext.syntax.core.* @@ -11,9 +10,7 @@ trait ListPageView[T: HtmlTabular]: self: ListPageModel[T] with HtmlTableBuilderModule => - class View(model: Signal[Model], actions: Observer[Action])(using - ctx: ComponentContext[_] - ): + class View(model: Signal[Model], actions: Observer[Action]): val element: HtmlElement = ComputableComponent(div)( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala index 5798aba..328cfbf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/modules/listpage/ListPageZIOHandler.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.laminar.modules.listpage import zio.* -import works.iterative.ui.services.UserNotificationService import works.iterative.ui.ZIOEffectHandler import zio.stream.ZStream diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala index 8e97f7d..aaeaa59 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tables/TableBuilderModule.scala @@ -1,11 +1,7 @@ package works.iterative.ui.components.laminar.tables -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.laminar.HtmlTabular -import works.iterative.ui.model.tables.Tabular -import works.iterative.core.UserMessage -import works.iterative.ui.components.laminar.LaminarExtensions.given -import works.iterative.ui.components.ComponentContext import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala index 87f3e8d..62fc6ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/tailwind/color/Color.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.laminar.tailwind.color -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* /** Complete color definition that can be rendered to CSS. * @@ -10,8 +10,6 @@ def toCSS: String = s"${area.name}-${color.toCSS}" object Color: - import ColorDef.given - given colorToCSS: Conversion[Color, HtmlMod] with def apply(c: Color) = cls(c.toCSS) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala index 50987a1..8e077ed 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Alert.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Alert: enum Kind(val color: Color, val icon: String => SvgElement): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala index 305f467..7248f49 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Avatar.scala @@ -2,8 +2,7 @@ package tailwind import laminar.CustomAttrs.ariaHidden -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec +import com.raquo.laminar.api.L.* // TODO: macros for size class Avatar($avatarImg: Signal[Option[String]]): diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala index 3262fcb..ba84b80 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/CardWithHeader.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class CardWithHeader( title: String, diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala index 7b7351f..acd4a2b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Component.scala @@ -3,7 +3,6 @@ import com.raquo.laminar.nodes.ReactiveHtmlElement import com.raquo.laminar.nodes.ReactiveSvgElement import org.scalajs.dom -import com.raquo.airstream.core.EventStream trait HtmlComponent[Ref <: dom.html.Element, -A]: extension (a: A) def element: ReactiveHtmlElement[Ref] = render(a) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala index f23f0e8..9ec397e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Display.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Display: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala index 796c251..0d255a7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Icons.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components package tailwind -import com.raquo.laminar.codecs.BooleanAsTrueFalseStringCodec -import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.laminar.api.L.svg.* import com.raquo.laminar.api.L.SvgElement import com.raquo.laminar.codecs.StringAsIsCodec import com.raquo.laminar.nodes.ReactiveSvgElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala index 5f17be5..0c8add4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Layout.scala @@ -2,7 +2,7 @@ package ui.components package tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object Layout: def card(content: Modifier[HtmlElement]*)(using diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala index 5399933..706910d 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Loader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* // TODO: proper loader def Loading = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala index 3dd5134..062fa7e 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/Modal.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* @deprecated("Use ModalComponentsModule", "2023-04-28") object Modal: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala index b5af03c..7a101a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/data_display/description_lists/LeftAlignedInCard.scala @@ -1,17 +1,9 @@ package works.iterative.ui.components.tailwind.data_display.description_lists -import com.raquo.laminar.api.L.{*, given} -import works.iterative.ui.UIString -import works.iterative.ui.TimeUtils -import java.time.LocalDate -import works.iterative.ui.components.tailwind.BaseHtmlComponent -import works.iterative.ui.components.laminar.HtmlRenderable -import works.iterative.ui.components.tailwind.form.ActionButtons -import works.iterative.ui.components.tailwind.HtmlComponent -import works.iterative.ui.components.tailwind.form.ActionButton +import com.raquo.laminar.api.L.* import works.iterative.ui.components.ComponentContext +import works.iterative.ui.components.laminar.HtmlRenderable import works.iterative.ui.components.tailwind.Icons -import scala.reflect.ClassTag type ValueContent = String | Modifier[HtmlElement] type OptionalValueContent = ValueContent | Option[ValueContent] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala index f5ac8cb..39f5520 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ActionButtons.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.tailwind.HtmlComponent import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala index d9ee9aa..982b127 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/ComboBox.scala @@ -2,7 +2,7 @@ package tailwind package form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import io.laminext.syntax.core.* case class ComboBox( diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala index e232ae1..86de243 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Form.scala @@ -1,7 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object Form: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala index f6afcd0..2ddce75 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormBody.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormBody: @deprecated("use specific form's 'body' method (see LabelsOnLeft)") diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala index af958ed..a9a3735 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormCodec.scala @@ -3,8 +3,6 @@ import zio.prelude.Validation -import scala.scalajs.js - import core.PlainMultiLine import java.time.format.DateTimeFormatter import java.time.LocalDate diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala index 322e0d8..5a735a9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormFields.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala index 3680628..2a00c0a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormHeader.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object FormHeader: case class ViewModel(header: String, description: String) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala index 587a35a..2e08a02 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormInput.scala @@ -3,7 +3,7 @@ import core.PlainMultiLine -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import java.time.LocalDate import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala index f6f8fa9..b64ef1b 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormPropertyRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormPropertyRow[V]( property: FormProperty[V], diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala index ffc5807..04d1630 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormRow.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* case class FormRow(id: String, label: String, content: Modifier[Div]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala index d41ec7e..18fbae4 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/FormSection.scala @@ -1,6 +1,6 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement object FormSection: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala index 976cbd3..9d0db3f 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Inputs.scala @@ -1,8 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} -import scala.scalajs.js +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import java.time.LocalDate @@ -20,7 +19,8 @@ tpe := inputType, cls := "block max-w-lg w-full shadow-sm focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm border-gray-300 rounded-md", prop.value.map(v => value(codec.toForm(v))), - onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates + onInput.mapToValue.setAsValue.map(v => codec.toValue(v)) --> updates, + mods ) class PlainInput[V](using FormCodec[V, String]) extends FormInput[V]: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala index ba63ea7..7fa46ac 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/InvalidValue.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.core.UserMessage diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala index 2e87c32..e815754 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/LabelsOnLeft.scala @@ -2,7 +2,7 @@ package ui.components.tailwind.form import com.raquo.laminar.api.L -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object LabelsOnLeft: diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala index 73ce0a0..63536cf 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/Switch.scala @@ -1,8 +1,7 @@ package works.iterative.ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* -import zio.prelude.Validation import works.iterative.ui.components.ComponentContext class Switch[V](using codec: FormCodec[V, Boolean], ctx: ComponentContext[_]) diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala index 5bb8f69..2586ee5 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/form/TextArea.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.form -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.html diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala index 248c457..a78e45a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/IconText.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.tags.HtmlTag import org.scalajs.dom diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala index 197ea5d..fb47907 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/ListRow.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala index 946ffaf..7bedf26 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/PropList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object PropList: type ViewModel = List[HtmlElement] diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala index 7e411c9..81582f7 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowNext.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowNext: def render: HtmlElement = diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala index 5998707..bf92fa1 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/RowTag.scala @@ -1,13 +1,15 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* object RowTag: def apply(text: String, color: Color): HtmlElement = + /* inline def colorClass(color: Color): Seq[String] = import ColorWeight._ List(color.bg(w100), color.text(w800)) + */ p( cls := "px-2 inline-flex text-xs leading-5 font-semibold rounded-full", diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala index 62f69d1..88f23fc 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/list/StackedList.scala @@ -1,7 +1,7 @@ package works.iterative.ui.components.tailwind package list -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import org.scalajs.dom import com.raquo.laminar.nodes.ReactiveHtmlElement import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala index 2458be4..372341a 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/feeds/SimpleWithIcons.scala @@ -1,11 +1,9 @@ package works.iterative package ui.components.tailwind.lists.feeds -import com.raquo.laminar.api.L.{*, given} -import java.time.Instant +import com.raquo.laminar.api.L.* import works.iterative.ui.TimeUtils import java.time.temporal.TemporalAccessor -import java.text.DateFormat import com.raquo.laminar.codecs.StringAsIsCodec import java.time.format.DateTimeFormatter import java.time.ZoneId diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala index 9c6b8d2..b0716cd 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/lists/grid_lists/SimpleCards.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.lists.grid_lists -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.ui.components.tailwind.Color import works.iterative.ui.components.tailwind.ColorWeight import works.iterative.ui.components.headless.Items diff --git a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala index a6f4022..7c58669 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/tailwind/navigation/Tabs.scala @@ -1,7 +1,7 @@ package works.iterative package ui.components.tailwind.navigation -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import works.iterative.core.MessageId import works.iterative.ui.components.ComponentContext diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala index ff4203e..00ade33 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/Scenario.scala @@ -2,15 +2,9 @@ package scenarios import com.raquo.laminar.api.L - -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom -import org.scalajs.dom.html - -import scala.scalajs.js -import works.iterative.core.MessageCatalogue import works.iterative.ui.components.ComponentContext object Scenario: diff --git a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala index cc15f90..a6663c9 100644 --- a/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala +++ b/ui/js/src/main/scala/works/iterative/ui/scenarios/ScenarioMain.scala @@ -1,23 +1,22 @@ package works.iterative.ui.scenarios -import scala.scalajs.js.annotation.{JSExportTopLevel, JSImport} -import com.raquo.laminar.api.L.{*, given} -import org.scalajs.dom - -import scala.scalajs.js -import works.iterative.ui.JsonMessageCatalogue -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext -import ui.components.tailwind.TailwindSupport +import com.raquo.laminar.api.L.* import com.raquo.waypoint.* +import org.scalajs.dom +import ui.components.tailwind.TailwindSupport +import works.iterative.core.MessageCatalogue +import works.iterative.ui.JsonMessageCatalogue +import works.iterative.ui.components.ComponentContext +import scala.annotation.unused +import scala.scalajs.js import scala.scalajs.js.Dictionary trait ScenarioMain( prefix: String, scenarios: List[Scenario], messages: js.Any, - css: js.Any + @unused css: js.Any ) extends TailwindSupport: val scenarioMap: Map[Scenario.Id, Scenario] = @@ -45,9 +44,7 @@ unsafeWindowOwner ) - def main(args: Array[String]): Unit = - given MessageCatalogue = messageCatalogue - + def main(@unused args: Array[String]): Unit = given ComponentContext[Unit] with val app: Unit = () val messages: MessageCatalogue = messageCatalogue @@ -103,4 +100,4 @@ ) val appContainer = dom.document.querySelector("#app") - render(appContainer, container) + val _ = render(appContainer, container) diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala index 8bde2d2..63eccf8 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/ZIOLaminarInteropSpec.scala @@ -3,7 +3,6 @@ import zio.* import zio.test.* import com.raquo.airstream.core.EventStream -import com.raquo.airstream.core.Observer import com.raquo.airstream.ownership.Owner object ZIOLaminarInteropSpec extends ZIOSpecDefault: diff --git a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala index fbcd5c8..f30aa6c 100644 --- a/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala +++ b/ui/js/src/test/scala/works/iterative/ui/components/laminar/forms/FormZipSpec.scala @@ -1,8 +1,6 @@ package works.iterative.ui.components.laminar.forms import zio.test.* -import works.iterative.core.MessageCatalogue -import works.iterative.ui.components.ComponentContext object FormZipSpec extends ZIOSpecDefault: def spec = suite("Form using zip operator")( diff --git a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala index 912e74e..8a6cdf1 100644 --- a/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala +++ b/ui/jvm/src/main/scala/works/iterative/data/table/XSSFWriter.scala @@ -4,14 +4,12 @@ import org.apache.poi.xssf.usermodel.XSSFRow import org.apache.poi.ss.usermodel.CellStyle import java.time.LocalDate -import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCellStyle import org.apache.poi.ss.usermodel.IndexedColors import org.apache.poi.ss.usermodel.FillPatternType import org.apache.poi.ss.usermodel.BorderStyle import org.apache.poi.xssf.usermodel.XSSFCell -import org.apache.poi.ss.usermodel.Hyperlink import org.apache.poi.common.usermodel.HyperlinkType case class ExternalLink( @@ -77,14 +75,14 @@ override def writeDataCells( row: XSSFRow, value: T - )(using styles: TableCellStyles) = + )(using styles: TableCellStyles): UIO[Unit] = ZIO.succeed { specs.zipWithIndex.map { case (spec, i) => val cell = row.createCell(i) spec.set(cell, value) styles.byName(spec.id).foreach(cell.setCellStyle) } - } + }.unit override def columnSizes: List[Int] = specs.map(_.width).toList diff --git a/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala b/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala index 112786c..1f4ab8b 100644 --- a/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala +++ b/ui/shared/src/main/scala/works/iterative/ui/TimeUtils.scala @@ -3,7 +3,6 @@ import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.time.ZoneId -import java.time.Instant import java.time.temporal.TemporalAccessor object TimeUtils: diff --git a/ui/shared/src/main/scala/works/iterative/ui/model/Computable.scala b/ui/shared/src/main/scala/works/iterative/ui/model/Computable.scala index f888701..53d226b 100644 --- a/ui/shared/src/main/scala/works/iterative/ui/model/Computable.scala +++ b/ui/shared/src/main/scala/works/iterative/ui/model/Computable.scala @@ -3,8 +3,6 @@ import works.iterative.core.UserMessage import java.time.Instant import zio.prelude.Covariant -import zio.prelude.ForEach -import zio.prelude.IdentityBoth /** A class representing the states of a model that needs computation */