calico

Pure, reactive UI library for Scala.js

APACHE-2.0 License

Stars
109
Committers
7

Bot releases are visible (Hide)

calico - v0.2.2 Latest Release

Published by armanbilge 11 months ago

This release updates several dependencies, notably domtypes v18.0.0.

Updates

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.1...v0.2.2

calico - v0.2.1

Published by armanbilge over 1 year ago

This release updates to Scala v3.3.0 LTS and includes some bug fixes.

What's Changed

Fixes

Docs

Updates

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0...v0.2.1

calico - v0.2.0

Published by armanbilge over 1 year ago

This is the first stable release in the Calico v0.2.x series! This new series continues the same look-and-feel as the 0.1.x series while delivering safer, more idiomatic APIs and performance improvements. For more details on these enhancements and a migration guide see the release notes for v0.2.0-M1.

The following is summary of changes since v0.2.0-RC2.

Features

Fixes

Docs

Updates

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-RC2...v0.2.0

calico - v0.2.0-RC2

Published by armanbilge over 1 year ago

This is the second release candidate of Calico v0.2.0. Unfortunately, this release has a bit more breakage than I might have liked for an RC 😅

In https://github.com/armanbilge/calico/pull/199, tuples of modifiers became first-class modifiers themselves, which is an overall enhancement and simplification. However, this interacted badly with the existing modifier provided for Foldable, because Cats provides instances of Foldable for tuples, with conflicting, counter-intuitive behavior.

So the generic modifier for Foldable was removed and replaced by instances for List and Option. If you were using that modifier with Seq or Vector, it will no longer compile, and should be changed to List. List is better anyway 😇 if you were using it with some other Foldable type, please open an issue!

Other notable changes:

  • @yurique has published frontroute for Calico ❤️
  • Updates to latest RCs for Cats Effect, FS2, and FS2-DOM.

Thank you to everyone who has been trying the Calico RCs and sharing feedback! Very appreciated 😁

Features

Optimizations

Fixes

Docs

Updates

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-RC1...v0.2.0-RC2

calico - v0.2.0-RC1

Published by armanbilge over 1 year ago

This is the first release candidate of Calico v0.2.0. It updates to Cats Effect v3.5.0-RC1 which includes a new runtime for JS. This enabled some usability and performance enhancements that are described in the updated documentation for task scheduling and rendering.

If all goes well, this release candidate will become v0.2.0 final when Cats Effect v3.5.0 final is released.

I am also happy to announce that Calico is now a Typelevel affiliate project! 🎉

What's Changed

Docs

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-M4...v0.2.0-RC1

calico - v0.2.0-M4

Published by armanbilge over 1 year ago

This is the fourth milestone release of Calico v0.2.0. It updates to FS2 3.6.0 which upstreamed the Signal#changes method and includes other Signal-related performance improvements.

What's Changed

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-M3...v0.2.0-M4

calico - v0.2.0-M3

Published by armanbilge over 1 year ago

This is the third milestone release of Calico v0.2.0. It upgrades to fs2-dom v0.2.0-M3 which introduces the Window[IO] wrapper that provides access to many useful browser APIs. This is now exposed as window in IOWebApp and is used by Router.

What's Changed

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-M2...v0.2.0-M3

calico - v0.2.0-M2

Published by armanbilge over 1 year ago

This is the second milestone release of Calico v0.2.0. It brings one important, breaking change: events are now modeled by the new fs2.dom.Event[F] classes, which replicate the DOM event hierarchy, but properly suspend side-effects in F[_].

Enhancements

Docs

Updates

Full Changelog: https://github.com/armanbilge/calico/compare/v0.2.0-M1...v0.2.0-M2

calico - v0.2.0-M1

Published by armanbilge over 1 year ago

I am excited to release the first milestone of Calico v0.2.0! This new series continues the same look-and-feel as the 0.1.x series while delivering safer, more idiomatic APIs and performance improvements.

  1. Preferring Signal instead of Stream for rendering dynamic content e.g. via <--. A Stream can always become a Signal by providing an initial value (or None); see the FS2 Stream#hold APIs. The presence of that initial value—indeed, the notion there is always a current value—is important for both correctness and performance.

  2. Offering a more idiomatic Cats Effect-style API, with the option for tagless final. We are in the process of wrapping all unsafe JS APIs (e.g. HTMLElement and friends) with safe, Cats Effect-based versions in the FS2 DOM project. You may use these via the DSL directly with IO, or in tagless final style with the new Html typeclass.

  3. Updating to Scala Dom Types v17.0.0. It is no longer a runtime dependency; we are now 100% generating our own customized sources for HTML tags, attributes, and properties! Thanks to @2chilled for leading this effort.

  4. Performance enhancements, by strategically scheduling non-rendering-related work after rendering. This will also build on the new JS runtime developed in https://github.com/typelevel/cats-effect/pull/3225 for the upcoming Cats Effect 3.5.0.

I expect development from this point to be "mostly stable". The remaining breaking changes will be the continued effort to provide safe Cats Effect wrappers for unsafe JS APIs (notably, Event and friends).

Otherwise, this milestone is fully functional and already a marked improvement over the 0.1.x series. So I strongly encourage its use, and consider the 0.1.x series to be EOL.

To migrate from Calico 0.1.x:

  1. Replace import calico.dsl.io.* with import calico.html.io.{*, given}
  2. Replace instances of <-- stream with <-- stream.holdResource(initialValue). Or .holdOptionResource or .hold1Resource, depending on the semantics you want.

User-facing PRs

New Contributors

Full Changelog: https://github.com/armanbilge/calico/compare/v0.1.2...v0.2.0-M1

calico - v0.1.2

Published by armanbilge almost 2 years ago

This is the third release in the 0.1.x series of Calico. There are two significant new features:

  • A new calico-router module, to add navigation to your application (i.e. URL-based, support for history forward/back, etc.). Check out the docs/demo.

  • A SignallingSortedMapRef, which is a MapRef implementation where each key is mapped to an FS2 SignallingRef. This enables precise updates and signals on a specific key.

In addition, Calico now has a dependency on fs2-dom, which provides idiomatic wrappers for several standard and useful browser APIs, such as Clipboard and local/session Storage.

The TodoMVC example has been updated to demonstrate each of these things:

  1. Navigating between the all/active/completed views of the todo list is implemented via routing and can be observed in the URL.
  2. The todo list is now stored in a SignallingSortedMapRef. This significantly improved performance and closed https://github.com/armanbilge/calico/issues/45.
  3. The todo items are now persisted in your brower's local storage. Furthermore, if you have the Todo app open in multiple browser tabs, they will automatically stay in sync!

This will likely be the last 0.1.x release of Calico. I have already started work on Calico v0.2.0 in https://github.com/armanbilge/calico/pull/107.

The overall feel will stay the same. Briefly, the major changes so far are:

  1. Requiring Signal instead of Stream for rendering dynamic content e.g. via <--. A Stream can always become a Signal by plugging in an initial value, and the presence of that initial value (indeed, the notion there is always a current value) is important for both correctness and performance.
  2. Some API restructuring so that Calico can be used to make effect agnostic components in tagless final style, without requiring Async[F] constraints everywhere.

If you have thoughts or feedback I would like to hear from you! :)

What's Changed

New Contributors

Thank you so much for your contribution! ❤️

Full Changelog: https://github.com/armanbilge/calico/compare/v0.1.1...v0.1.2

calico - v0.1.1

Published by armanbilge over 2 years ago

This is the second release in the 0.1.x series of calico and is binary-compatible with v0.1.0 and published for Scala 3.1+ and Scala.js 1.8+.

This release introduces a new calico-frp module that is cross-compiled for JS and JVM and included by default in calico core. It provides a Monad instance for Signal which you can import like so:

import calico.frp.given

For example, the TodoMVC example uses it to compose the SignallingRef for the selected filter (all/active/completed) with the SignallingRef for the list of todo items.

User-facing PRs

Full Changelog: https://github.com/armanbilge/calico/compare/v0.1.0...v0.1.1

calico - v0.1.0

Published by armanbilge over 2 years ago

I'm pleased to announce the first stable release of Calico 🎉 Of course, there is still much work to do, but I feel confident that we can continue to evolve the API backwards-compatibly from here. Yes, that's a "we"! I'm looking to you for your help: please try it out and contribute bug reports, feature requests, and code :)

The milestone that prompted this release was the implementation of the TodoMVC project with Calico. Please check it out at https://armanbilge.github.io/calico/todomvc/