All Projects → guidomb → PortalView

guidomb / PortalView

Licence: MIT license
A (potentially) cross-platform, declarative and immutable Swift library for building user interfaces

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to PortalView

transmute
kind of like lodash but works with Immutable
Stars: ✭ 35 (+133.33%)
Mutual labels:  immutable
ConstructionBase.jl
Primitives for construction of objects
Stars: ✭ 22 (+46.67%)
Mutual labels:  immutable
django-concurrency-talk
🎭 Database Integrity in Django: Safely Handling Critical Data in Distributed Systems
Stars: ✭ 49 (+226.67%)
Mutual labels:  immutable
rrbit
An Immutable vectors/lists/arrays library using the Relaxed Radix Balancing(RRB) technique
Stars: ✭ 12 (-20%)
Mutual labels:  immutable
vana
Observe your immutable state trees 🌲👀 (great with React)
Stars: ✭ 24 (+60%)
Mutual labels:  immutable
SSComposeCookBook
A Collection of major Jetpack compose UI components which are commonly used.🎉🔝👌
Stars: ✭ 386 (+2473.33%)
Mutual labels:  declarative-ui
SandDB
A simple immutable database for the masses.
Stars: ✭ 21 (+40%)
Mutual labels:  immutable
ate
Distributed immutable data store with strong encryption and authentication
Stars: ✭ 94 (+526.67%)
Mutual labels:  immutable
immutable-gametree
An immutable game tree data type.
Stars: ✭ 18 (+20%)
Mutual labels:  immutable
Flower-App-Jetpack-Compose
This sample is created to elaborate this article, it contains the UI of the flower app from our dribble collection
Stars: ✭ 73 (+386.67%)
Mutual labels:  declarative-ui
extendable-immutable
Wrapper classes around Immutable.js that turn it inheritable
Stars: ✭ 58 (+286.67%)
Mutual labels:  immutable
deepClone
A tiny library for deeply copying Javascript objects and arrays
Stars: ✭ 17 (+13.33%)
Mutual labels:  immutable
apllodb
A RDBMS with Immutable Schema feature
Stars: ✭ 28 (+86.67%)
Mutual labels:  immutable
grand central
State-management and action-dispatching for Ruby apps
Stars: ✭ 20 (+33.33%)
Mutual labels:  immutable
pagemaker production
🐎 前端页面制作工具
Stars: ✭ 50 (+233.33%)
Mutual labels:  immutable
VIZIA
A declarative GUI library written in Rust
Stars: ✭ 551 (+3573.33%)
Mutual labels:  declarative-ui
js-data-structures
🌿 Data structures for JavaScript
Stars: ✭ 56 (+273.33%)
Mutual labels:  immutable
Wiggles
🐶 Beautiful Puppy adoption app with Jetpack Compose #AndroidDevChallenge
Stars: ✭ 365 (+2333.33%)
Mutual labels:  declarative-ui
Witch-Android
View-data binding library for Android.
Stars: ✭ 25 (+66.67%)
Mutual labels:  immutable
UIComponent
Write UI in crazy speed, with great perf & no limitations.
Stars: ✭ 333 (+2120%)
Mutual labels:  declarative-ui

PortalView

Swift Carthage compatible Platform License

A (potentially) cross-platform, declarative and immutable Swift library for building user interfaces.

WARNING!: This is still a work-in-progress, although the minimum features are available to create real world applications the API is still under design and some key optimizations are still missing. Use at your own risk.

TL; DR;

  • Declarative API inspired by Elm and React.
  • 100% in Swift and decoupled from UIKit which makes it (potentially) cross-platform.
  • Uses facebook's Yoga. A cross-platform layout engine that implements Flexbox which is used by ReactNative.
  • Leverage the Swift compiler in order to have a strongly type-safe API.

Here is a sneak peak of the API but you can also check this examples or read the library overview to learn more about the main concepts.

enum Message {

  case like
  case goToDetailScreen

}

let component: Component<Message> = container(
  children: [
    label(
      text: "Hello PortalView!",
      style: labelStyleSheet() { base, label in
          base.backgroundColor = .white
          label.textColor = .red
          label.textSize = 12
      },
      layout: layout() {
          $0.flex = flex() {
              $0.grow = .one
          }
          $0.justifyContent = .flexEnd
      }
    )
    button(
      properties: properties() {
          $0.text = "Tap to like!"
          $0.onTap = .like
      }
    )
    button(
      properties: properties() {
          $0.text = "Tap to got to detail screen"
          $0.onTap = .goToDetailScreen
      }
    )
  ]
)

Installation

Carthage

Install Carthage first by either using the official .pkg installer for the latest release or If you use Homebrew execute the following commands:

brew update
brew install carthage

Once Carthage is installed add the following entry to your Cartfile

github "guidomb/PortalView" "master"

Manual

TODO

Example

For some examples on how the API looks like and how to use this library check

  • The examples project in this repository.
  • This example project
  • The following video

PortalView live reload example

Documentation

PortalView is still a work-in-progress. Documentation will be added as the library matures inside the Documentation directory. You can read the library overview to learn more about the main concepts.

Contribute

Setup

Install Carthage first, then run

git clone [email protected]:guidomb/PortalView.git
cd PortalView
script/bootstrap
open PortalView.xcworkspace
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].