# ~preview=md
import 'util/styles'
# ---
let message = "Hello"
imba.mount do <section>
<input type='text' bind=message>
<label> "Message is {message}"
# ~preview=md
import 'util/styles'
# ---
let tweet = ''
imba.mount do <section>
<textarea bind=tweet placeholder="What's on your mind...">
<label> "Written {tweet.length} characters"
# ~preview=md
import 'util/styles'
# ---
let point = {r:0, x:0}
imba.mount do <section[gap:2]>
<input type='range' bind=point.x>
<input type='range' bind=point.r>
<label[js:center w:40px rotate:{point.r}deg x:{point.x}]> "{point.x},{point.r}"
# ~preview
import 'util/styles'
# ---
let a=1
let b=2
imba.mount do <div.group>
<input type='number' min=0 max=100 bind=a/> " + "
<input type='number' min=0 max=100 bind=b/> " = "
<samp> "{a + b}"
# [preview=md]
import 'util/styles'
# ---
let bool=no
imba.mount do <section>
<label>
<input[mr:1] type='checkbox' bind=bool />
<span> "Enabled: {bool}"
# [preview=md]
import {genres} from 'imdb'
import 'util/styles'
css div d:flex flf:row wrap pi:center jc:flex-start
# ---
let options = ['React','Vue','Imba','Svelte','Ember']
let interests = []
imba.mount do <section>
<div> for option in options
<label[mr:2]>
<input type='checkbox' bind=interests value=option/>
<span[pl:1]> option
<label> "Interested in {interests.join(', ')}"
# [preview=md]
import {genres} from 'imdb'
import 'util/styles'
css div d:flex flf:row wrap pi:center jc:flex-start
# ---
let options = ['React','Vue','Imba','Svelte','Ember']
let interest = 'Imba'
imba.mount do <section>
<div> for option in options
<label[mr:2]>
<input type='radio' bind=interest value=option/>
<span[pl:1]> option
<label> "Interested in {interest}"
# [preview=md]
import {genres} from 'imdb'
import 'util/styles'
css div d:flex flf:row wrap pi:center jc:flex-start
# ---
let options = ['React','Vue','Imba','Svelte','Ember']
let focus = 'Imba'
imba.mount do <section>
<select bind=focus> for item in options
<option value=item> item
<label> "Focused on {focus}"
# [preview=lg]
import {genres} from 'imdb'
import 'util/styles'
css div d:flex flf:row wrap pi:center jc:flex-start
# ---
import {projects} from 'util/data'
let choices = []
imba.mount do <section>
<select multiple bind=choices> for item in projects
<option value=item> item.name
<label> "Interested in"
<div> for item in choices
<div[color:{item.color}]> item.name
# [preview=md]
import {genres} from 'imdb'
import 'util/styles'
# ---
let state = 'one'
css button.checked bxs:inset bg:gray2 o:0.6
imba.mount do <section>
<div.group>
<button bind=state value='one'> "one"
<button bind=state value='two'> "two"
<label> "State is {state}"
Buttons bound to data behave just like checkboxes. A checked
class indicates when their value matches the bound data. Clicking a button multiple times will toggle just like a checkbox.
# [preview=lg]
import 'util/styles'
# ---
let options = {
width: 12
height: 12
title: 'Something'
}
tag Field
get type
typeof data == 'number' ? 'range' : 'text'
<self[d:flex js:stretch]>
<label[w:80px]> <slot> 'Field'
<input[flex:1] type=type bind=data>
imba.mount do <section>
<Field bind=options.title> 'Title'
<Field bind=options.width> 'Width'
<Field bind=options.height> 'Height'
<label> "{options.title} is {options.width}x{options.height}"
# [preview=xl]
import {genres} from 'imdb'
import 'util/styles'
css div d:flex flf:row wrap pi:center jc:flex-start
# ---
let people = [{name: 'Jane Doe', interests: ['Imba']}]
let person = people[0]
def addPerson
person = {name: 'John',interests:[]}
people.push(person)
def addInterest e
person.interests.push e.target.value
e.target.value = ''
imba.mount do <main>
<header>
<select bind=person> for item in people
<option value=item> item.name
<button[ml:2] @click=addPerson> 'Add'
<article>
<label[ta:left]> "Editing {person.name}:"
<input bind=person.name placeholder="Name...">
<input placeholder="Add interest..." @keyup.enter.prevent=addInterest>
<div.tags> for item in person.interests
<button[mr:1].chip bind=person.interests value=item> item