All Projects → jcouyang → owlet

jcouyang / owlet

Licence: other
Typed Spreadsheet UI library for ScalaJS

Programming Languages

scala
5932 projects
Makefile
30231 projects
HTML
75241 projects

Projects that are alternatives of or similar to owlet

xlsx2csv.rs
Excel (eg. .xlsx/.xls) to CSV/TSV Format Converter in Rust
Stars: ✭ 47 (+17.5%)
Mutual labels:  spreadsheet
oxjs
Reactive JavaScript Objects and Primitives
Stars: ✭ 33 (-17.5%)
Mutual labels:  reactive
reflex-native
Framework for writing fully native apps using Reflex, a Functional Reactive Programming library for Haskell.
Stars: ✭ 40 (+0%)
Mutual labels:  reactive
frontend
Frontend repository / Reactive realtime forum software (currently alpha).
Stars: ✭ 13 (-67.5%)
Mutual labels:  reactive
deep-state-observer
State library for high performance applications.
Stars: ✭ 25 (-37.5%)
Mutual labels:  reactive
convey
CSV processing and web related data types mutual conversion
Stars: ✭ 16 (-60%)
Mutual labels:  spreadsheet
Dexiom.EPPlusExporter
A very simple, yet incredibly powerfull library to generate Excel documents out of objects, arrays, lists, collections, etc.
Stars: ✭ 19 (-52.5%)
Mutual labels:  spreadsheet
whoshiring
A browser for Hacker News's Ask HN: Who's Hiring, with Matrix Inside(tm)
Stars: ✭ 24 (-40%)
Mutual labels:  reactive
springboot-rsocketjwt-example
Example of using JWT with RSocket and Spring Boot
Stars: ✭ 26 (-35%)
Mutual labels:  reactive
SpreadsheetInput Feedback Tut
Demo App - Send Feedback From Android App To Spreadsheet
Stars: ✭ 35 (-12.5%)
Mutual labels:  spreadsheet
dash.js
⚒️ Reactive UI components and framework for modular dashboards.
Stars: ✭ 74 (+85%)
Mutual labels:  reactive
copypaster
Make web forms copy-pasteable.
Stars: ✭ 85 (+112.5%)
Mutual labels:  spreadsheet
agile
🌌 Global State and Logic Library for JavaScript/Typescript applications
Stars: ✭ 90 (+125%)
Mutual labels:  reactive
financial-forecast
Personal Financial Forecasting Model
Stars: ✭ 24 (-40%)
Mutual labels:  spreadsheet
rust-flutter-reactive
This is a sample app to improve consistency over Mobile App Development.
Stars: ✭ 25 (-37.5%)
Mutual labels:  reactive
reactive-graphql
A GraphQL implementation based around RxJS, very well suited for client side only GraphQL usage
Stars: ✭ 58 (+45%)
Mutual labels:  reactive
backscatter
Reactive extension for Backbone
Stars: ✭ 17 (-57.5%)
Mutual labels:  reactive
chatter
Build a twitter clone in 10 mins with Rails, CableReady, and StimulusReflex
Stars: ✭ 50 (+25%)
Mutual labels:  reactive
spreadsheet
Yii2 extension for export to Excel
Stars: ✭ 79 (+97.5%)
Mutual labels:  spreadsheet
elastic-composer
Client-side Elasticsearch query generator and executor. Filter fields, find search suggestions, and paginate query results for your indicies using a simple, reactive, and high-level API
Stars: ✭ 14 (-65%)
Mutual labels:  reactive

Owlet

Owlet is a Typed Spreadsheet UI library for ScalaJS. It is built on top of Monix and Typelevel Cats to combine predefined input fields to a reactive user interface, just like what you would done in spreadsheet. Owlet is inspired by the PureScript library Flare.

Do one thing and do it well micro birds library series

Get Started

1. add dependency in your build.sbt

Stable

Latest version

libraryDependencies += "us.oyanglul" %%% "owlet" % "<maven version>"

RC

resolvers += "jitpack" at "https://jitpack.io"
libraryDependencies += "com.github.jcouyang" % "owlet" % "<jitpact version>"

2. Now programming UI is just like using spreadsheet

import us.oyanglul.owlet._
import DOM._
val a1 = number("a1", 1)
val a2 = number("a2", 2)
val a3 = number("a3", 3)
val sum = fx[List, Double, Double](_.sum, List(a1, a2, a3))
render(a1 &> a2 &> a3 &> sum, "#app")

or Cats Friendly Badge

val a1 = number("a1", 1)
val a2 = number("a2", 2)
val a3 = number("a3", 3)
val sum = a1 |+| a2 |+| a3
renderOutput(sum, "#app")

eh... Ready for 3D spreadsheet programming?

You know spreadsheet is 2D, when we have monad, it became 3D

!!!Monad Warning!!!

val numOfItem = int("noi", 3)
val items = numOfItem
  .flatMap(
    no => (0 to no).toList.parTraverse(i => string("inner", i.toString))
  )
  • imagine that numOfItem lives in dimension (x=1, y=1, z=0)
  • then items live in dimension (x=1,y=1,z=1)

you can render either numOfItem or items seperatly, for they live in diffenrent z axis (which means render items you won't able to see numOfItem even it's flatMap from there

but you can some how connect the dots with magic &>

renderOutput(numOfItem &> items, "#output")

Anyway, just keep in mind that monad ops map ap flatMap... will lift your z axis parMap parAp parXXX instead, will keep them in the same z axis

More...

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].