- Fix: Allow binding tag properties to symbol identifiers
- Report correct location for "Cannot redeclare variable" error (#114)
- Fix: Rendering list inside conditional
- Support css blocks inside conditionals in tag trees
- Warn about interpolated style values outside of tag trees
- Improved specificity for nested css rules
- Fix: Make
<global @resize>
work correctly - Fix: Variable resolution for
let item = do ... item()
- Fix: Allow ternary in tag trees
- Fix: Allow
condition && <tag>
in tag trees - Fix: Ternary parsing
cond ? <div> "a" : "b"
- Added
@in
style modifier for specifying in-only transitions - Renamed transition hooks to
transition-(in|out)-(end|cancel)
- Using
<button bind=prop>
without a value acts like<button bind=prop value=yes>
- Fix: Various dom regressions in SSR
- Updated default ease duration to 300ms
- Use setAttribute('class') under the hood for svg elements
- Added
#afterVisit
,#beforeReconcile
,#afterReconcile
hooks - Added experimental easing via
<my-element ease>
, with element hooks#ease-enter
,#ease-entered
,#ease-enter-cancel
, and#ease-exit
,#ease-exited
,#ease-exit-cancel
- Added
ease/e
,ease-opacity/eo
,ease-transform/et
andease-colors/ec
style properties for experimental easing feature - Fix: Passing slots into child components (#607)
- Allow using setters on
#context
- Add support for generic media selectors via
@media(some-media) ...
- Fix: Interpolated numeric value for
rotate:{val}
works i FF - Add @all and @speech style modifiers (for @media all/speech)
- Fix: Allow empty css selectors
- Fix: Rebuilt prebuilt imba.mjs for web
- Add experimental support for class decorators
- Fix: Apply display:block to global tags without dashed name
- Change:
inset:*
style shorthand setsposition:absolute
- Added
<teleport to=(sel/element)>
component (#606) by @haikyuu
- Reorganize prebuilt files for jspm support
- Add jspm configuration in package.json
- Add #inited hook for class instance initialization
- All custom components defaults to display:block
- Fix: Don't inject hmr.js script into html assets when building
- Fix: Generate html files in public directory
- Allow
$envvar$
as first argument of implicit calls (#571) - Allow
super
inextend class/tag
- Add experimental support for
extend someObject
- Variable / parameter named
self
used for implicit self in scope - Throw error for non-self tags in tag declaration body
- Allow accessing array elements from end with literal numbers like
array[-1]
- Include precompiled browser-version of library to make it work with jspm
- Fix issue with html parser
- Fix issue with
<input value=...>
not working in certain cases - Add optional static file serving for
imba serve
- Fix issue with prop watchers not compiling correctly
- Correctly parse comments inside multi-line tag literals
- Readable names for generated (internal) variables
- Tag literals act as block scopes for variable declarations
- Fix interpolated style values in tag-tree selectors
- Remove charset:utf8 option from esbuild
- Fix regression with font-size presets (#569)
- Allow declaring return type via
def method\returntype arg1, ...
- Fix crash when inlining sourcemaps on node 16+ (#567)
- Overhaul
extend class
code generation for better tooling support - BREAKING: Compile predicate identifiers
name?
to unicodenameΦ
and dashed identifiersone-two-three
tooneΞtwoΞthree
to avoid potential naming collisions and improve tooling support. If you previously relied on dashed identifiers converting to camelCase while interacting with an external library - this will no longer work. Iewindow.add-event-listener
will not work sincewindow
does not have anaddΞeventΞlistener
property. See #568 for more info.
- Fix regression resulting in nested assets being rebuilt in incorrect folder
- Added
--asset-names
and--html-names
build options for controlling the generated paths - Tweaked format of generated manifest
- Fixed issue with generated stylesheets being blank
- Automatically include Link preload headers when serving through imba
- Allow all valid RegExp flags in literal regexes
- Generate class augmentations (
extend class/tag
) in tsc mode - Use setAttribute for non-idl element attributes
- Fix bundler crash when parsing html entrypoints with doctype
- Fix regression where imba
-w
would not detect changes in unhashed outputs
- Experimental
<global>
slot to add global listeners from inside tags @event.outside
modifier that works in conjunction with<global>
slot
- Remove use of String#replaceAll (unsupported before node 15.0.0)
- Don't crash when loading tags with
@intersect
listener on server - Fix svg parsing issue for large svg files (#543)
- Fix incorrect dehydration when creating custom element on client directly via document.createElement
- Inject asset imports in correct order relative to regular imports
- Add support for
.eot
font file reference in stylesheets - Auto-generate combined stylesheet for server and client accessible via
<style src='*'>
- Stop auto-injecting styles for referenced assets when rendering
<html>
on server
- Support webp,avif,apng,gif images in bundler
- Fixed missing first character in non-minified css output
- Expose imba.commit++ on globalThis
- Fix compilation issue with
if false
inside tag tree - Respect custom palettes in imbaconfig.json when building
- Allow aliasing palettes in imbaconfig.json
- Support inlined svg elements on server
- Improve output from
imba create
- Stop bundler from crashing when generating worker
- Fix incorrect sourcemap paths with esbuild 0.9.7
- Let server fail gracefully when accessing invalid asset urls
- Fix relative path for mac/linux
- Raise default browser-target from
edge16
toedge18
due to esbuild warning - Make
imba create
executable on mac (#550) - Set default esbuild target to es2019 to transpile optional chaining++
- Avoid using
-ad
in generated class-names due to adblockers (#531)
- Minor improvements to sourcemapping
- Fixed
import type default
compilation
- Improved sourcemapping
- Improved support for type annotations
- Fixed crash in bundler
- Improve windows compatibility for bundler and
imba create
- Serve hashed (cacheable) assets with
Cache-Control: max-age=31536000
- Remove
?v=xxxxxx
suffix from asset references generated with--no-hashing
- Allow
"external":["builtins",...]
to externalize builtin node modules for other platforms thannode
- Add
-H
alias for the--no-hashing
option
- Upgraded esbuild to v0.9.2
- Automatically polyfill built-in node modules like buffer,stream,crypto etc when compiling for browser. Still experimental.
- Prevent
touchstart
event on iPad Pro in@touch.prevent
- Fixed text in svg
<text>
elements (#482)
- Fixed image asset urls in SSR
- Make bundler work with client entrypoint without any styles
- Dispatch bubbling
resized
event from ResizeObserver
- Overhauled
@touch
to work be more consistent on touch devices - Add
@touch.round
event modifier
- Prevent
touchstart
event on iOS in@touch.prevent
- Make custom events cancelable by default
- Make
@-webkit-scrollbar-*
style selectors work - Make core event modifiers work for
@touch
event - Fix issue where text selection did not work after
@touch
- Make
@touch.prevent
prevent scrolling viatouch-action:none
- Add
@important
style modifier
- Update built-in colors to follow Tailwind 2.0
- Allow interpolating colors in runtime
<div[c:{mycolor}]>
- Fix deep selector
>>>
with multiple nested children
- Fix router crashing when event-related runtime code is tree-shaken
- Fix issue with type inferencing tags in certain cases
- Add
suspend
,unsuspend
component lifecycle methods - Improved router interface & internals
- Added
imba.serve
toindex.d.ts
- Fix serious regression in router causing crash
- Parse
fn await something
correctly - Improved router internals
- Add internal
Node#attachToParent
andNode#detachFromParent
methods - Preserve signed zero in output (Fixes #497)
- Make hmr reloading work with raw html assets
- Make
--no-hashing
cli option actually work - Build html entrypoints in correct dist folder
- Add
imba create
command for creating project from template
- Add support for object spread syntax
{a:1, ...obj}
- Fix regression causing crash when generating css
- Only call imba.commit when events are actually handled
- Alias
tabindex
totabIndex
in tag attributes. - Fix scoping issue with css in tag trees
- Add experimental router aliases/redirects support
- Include preflight.css at root level of package
- Convert durations (
1s
,150ms
,60fps
etc) to ms-based numbers on compile-time
- Add
debounce
event modifier
- Add
no-minify
option to cli - Always compile
html
namespaced attributes to rawsetAttribute
- Add
__realname
as an unaltered alias for__filename
- Add support for selectors in tag tree - see #490
- Show full version (including alpha number) in cli
imba --version
- Add experimental
<tag autorender=interval>
inteface - Add
?v=hash
to asset urls when filename hashing is turned off - Add experimental support for
.html
entrypoints toimba serve
andimba build
- Add
abs
andrel
shorthands forposition
style property - Fix memory leak when using
imba --watch
- Support extending native tags
tag Purchase < form
- Allow defining global tags without dash in name
- Fix issue with
@nth-of-type
,@nth-child
selectors - Improve internals of intersect event handling
- Add
asset.body
property for accessing raw content of assets
- Allow passing
rootMargin
options to intersect event - Fix issue in router related to hash links
- Fix issue with css property order
- changelog and docs coming soon. see imba.io
- Add
route-to.exact
modifier to router
- Add support for numeric separator
100_000
- Fix multiline regex parsing issues
- Allow setting innerHTML in SSR
- Update instantiation syntax in tests++
- Add
new Foo
instantiation syntax - Deprecate
Foo.new
instantiation syntax
- Allow local/exportable tags (uppercased tag declarations)
- Allow interpolated tags inside strings in tag trees
- Allow getters and setters in object literals
- Allow media breakpoints in style selectors
- Added max-width breakpoints
- Fix issue with nested
$reference
selectors - Allow router to work for regular links
- Add route-to.replace modifier
- Add route-to.sticky modifier
- No longer inheriting from CustomEvent as it is not supported in Safari
- Fix input data binding issue
- Added
before
andafter
style property modifiers - Added
prefix
as alias forbefore.content
- Added
suffix
as alias forafter.content
- Fix nested selector bug
- Fix focus-within modifier
- Add
:local
pseudo-class for only styling local children of component - Support
$reference
in selectors for targeting local referenced elements - Change
display
style property to accept multiple layout aliases - Add 1-digit color aliases (blue900 -> blue9 etc)
- Allow border and border-(top|right|bottom|left) to accept a single color value
- Accept rgb/hsl/hex colors in text and border properties
- Added multi-purpose
text
style property for describing font-family, font-size, font-style, font-weight, text-decoration, text-transform, line-height, letter-spacing and color in a single property - Added shorthand style aliases for border-_ and flex-_
- Added x, y, z, rotate, scale, scale-x, scale-y, skew-x, skew-y custom style properties
- Extended transition property to accept colors, styles, sizes as properties and custom easings
- Added experimental syntax for css/styling. See #334
- Broke scoped css comment blocks until further notice
- Fix conditional rendering bug (#334)
- Changed event syntax from
<div :click.stop.{method()}>
to<div @click.stop=method()>
- Allow comments inside multiline tags
- Include left/right event key modifiers
- Improve resize and intersect events
- Always bind data when using
<tag[my-data]>
syntax
- Improved lifecycle methods for components
- Fix sourcemapping for env-flags
- Add syntax for element references
<div$reference>
- Fix problem with missing ResizeObserver in safari
- Fixed webpack imba/loader issues with scoped css
- Add event wrapper for ResizeObserver
- Add experimental router code
- Add basic support for setting dom classes outside of templates
- Allow calling imba.mount with a function
- Rename #context api to $context
- Rename parentContext to $parent
- Introduce decorators with
@decorator
syntax. See #334 - Allow declaring tag attributes. See #335
- Shorthand
!
for invoking parenless methods (object.mymethod!
) - Implicit self is back (for good)
See #263 for an overview of changes
- Fixed #237 (CSS comments not working in SFC)
- Fixed #240 (Build issues with font-properties in SFC)
- Fixed #239 (Module not found: Error: Can't resolve 'important[...] in SFC)
- Add support for declaring native getters and setters using
get/set
instead ofdef
keyword - Add support for compiling props to native getters and setters using
native
option (prop name native: yes
) - Make svg tags and non-svg tags use same class naming scheme (#230)
- Add experimental support for single-file-components
- Made splats compatible with ES6 containers like Set (#167)
- Cache compilation for node runtime when 'IMBA_CACHE_DIR' process variable is set
- Make puppeteer tests work again
- Fixed #203 (trigger data is null when supposed to be 0)
- Fix crash when packaging for webworker
- Fix bugs in analyzer returning incorrect locations for classes and methods
- Include properties in analyzer entity output
- Support for
**
and**=
operators (#192 by @taw) - Fix imbapack crash with newer webpack (#194 by @gdamjan)
- Fix --stdio/-s option for imbac (#178 by @shreeve)
- Make special variables in event handlers default to event methods
- Include all global attributes on Imba.Tag
- Respect empty parens in event handlers (
<div :tap.someMethod()>
) - Allow special variables in event handlers (
<div :tap.someMethod($event,$data)>
) - Allow all aria-* attributes
- Fixed bug where compiler could end up in faulty state
- Lookup event handlers in owner-scope
- Make Imba.setInterval automatically commit on each interval
- Compile is to === (instead of ==)
- Compile isnt to !== (instead of !=)
- Require Node >=8.0.0
- Introduce new root scope per file for more consistent self
- Fix export const
- Add
<input number=bool>
for numeric inputs - Only prevent native click if tap was prevented
- Print out compiler warnings in imbac and webpack loader
- Pass through stdio configuration from imbapack to webpack
- Don't include comments by default in webpack loader
- Disallow cross-scope calling of root 'def' functions (breaking change)
- Don't silence input events for form elements
- Implement style.removeProperty on server
- Improve mount/unmount performance
- Fix webpack4 compatibility
- Improve svg support
- Suppress setValue for input and textarea while editing
- Fix duplicate attributes in serverside rendering
- Make popstate event notify schedulers
- Make event manager delay adding listeners until needed
- Optimize tag tree syncing
- Add support for event modifiers (e.g.
<div :keydown.enter.myHandler>
) - Add support for form input bindings (e.g.
<input[data:myField]>
) - Allow method definitions inside object literals
- Better error reporting from parser when running through
imba
cli - Add automatic cache pruning for loops
- Improve performance of setText
- Improve performance of non-keyed tag lists
- Implement radically improved inline caching strategy
- Improve overall rendering performance
- Allow all attributes on svg elements
- 25% smaller library (now 57k minified, 15k gzipped)
- Remove deprecated selector-syntax
- Remove deprecated methods on Imba.Tag (object,width,height,append,prepend)
- Remove deprecated methods on Imba.Event (keychar,keycombo)
- Remove deprecated Imba.isClient and Imba.isServer
- Allow reconciler to work with tag-like objects
- Make Imba.commit notify schedulers
- Make sure schedulers are correctly activated and deactivated
- Fix issue where process.version was not parsed correctly
- Fix variable naming issue when compiling with sourceMaps
- Fix let scoping where assignment is consumed by statement
- Allow ivar-syntax in plain objects
{@ivar: value}
- Allow direct ivar access through
object@ivar
- Compile to native
let
,const
andawait
unless--es5
is specified - Align
await
precedence with js - Support variable shadowing
- Fix fat-arrow template parsing
<div.item => ...
- Make
imbapack input.imba output.js
work without a config
- Introduce
module
keyword for singleton classes - Allow aliasing imports with
import x as y from ...
- Always escape attributes textContent when rendering on server
- Made Imbapack read options using the recommended way in Webpack 3.
- Made Imba.mount schedule the target by default (fix)
- Compiler returns correct location for classes and constants
- Enable experimental native async/await behind —es6 option
- Make imbapack commands platform-safe (GavinRay97 · pr#102)
- Deprecated implicit
Promise.all
wrapping of expr inawait *expr*
if expr instanceof Array
- Require 'imba' in each file - no longer depending on Imba being global
- Introduced imbapack as intelligent wrapper around webpack
- Introduced non-global tags
- Allow multiple adjacent tags inside for-loops
- Add
tag.mount
andtag.unmount
- Allow setting css inline
<div css:height=100>
- Deprecated selector syntax
- Deprecated various tag helpers
- Tons of bugfixes and improvements
tag.initialize
can now be defined / overridden- Dynamic flags
<div .{flag}>
works as expected - Added more missing attributes to html elements
- Allow defining properties with reserved names
prop watch:
now accepts a Function- Minor bugfixes
- Add trailing semicolon to IIFE wrapper (#67)
- Allow uppercase flags in tag (#64)
- Setters return self by default (#56)
- CLI will find index.imba, if exists within folder
- Improved serverside rendering
- Predeclare
_
in global scope
- Mixing tabs and spaces for indentation will now throw error
- Internal refactoring
- Moved internal build over to webpack
- Bugfix: source maps should work again
- Bugfix: compilation on windows finds correct path
- Fixed regression for awakening tags from client
- Add width/height getters for tags
- Add context getter for canvas
- Removed deprecated code in dom.events
- Add
Imba.Touch#tx
andImba.Touch#ty
for pos relative to target - Add Imba.Touch#capture for preventing all default behaviour of events
- Handle touchcancel correctly
- Deprecate Imba.Touch#suppress
- Bugfix: right-click caused havok with mousebased Imba.Touch
- Bugfix: watched attribute would not trigger correctly
- Removed IMBA_TAGS (must use Imba.TAGS)
- Groundwork for arbitrary namespaces for tags (and local/private tags)
- Added support for SVG
- attr definitions will preserve dash in generated setAttribute
- Removed description object for plain generated properties
- Allow nested tag definitions (local to the parent scope)
- Error now includes the relevant code/lines in message - contributed by @sleewoo
- Make scheduler register for next tick before running the current ticks
- Bugfix: Regression where methods with trailing comment did not parse
- tag(domnode) will awaken domnode as native type if the custom tag is not defined
- Bugfix: Parser should not treat
]
and)
as implicit functions (issue#34) - Allow methods without body to parse correctly (closes issue#35)
- Bugfix: Regression where indented return broke certain tag trees
- Bugfix: if branches without else does not return 0 when false (inside tag trees)
- Bugfix: Improved error reporting in terminal
- Documented more of the runtime/stdlib
- Adding prelim support for static analysis of tags,classes,methods++
imba analyze
now takes--entities
flag to export entities- Removed several undocumented and deprecated methods
- Cleaned up code UglifyJS warned about when minifying runtime
- Add failing test for known scoping bug (fix is underway for next release)
- Bugfix: temp vars were declared (but not used) in certain situations
- Added scheduler for an official/approved way to schedule rendering
- Reworked tag rendering to work with non-string textual nodes again
- Fixed yet another regression
- Throw error when trying to spawn undefined tag
- Fix regression with serverside rendering from 0.13.3
- Optimized rendering further
- Bugfix: native tags no longer spawn with empty class attribute
- Bugfix: wrong cachekeys in certain nested trees
- Bugfix: (cond && ) were not cached in static trees
- Bugfix: numerous edgecases with static trees
- cache tags in for-loops by default (inside static trees)
- call render in tag#commit by default
- Improved sourcemaps
- Tap and click events handled in more consistent manner
- Added version of compiler that can run in a WebWorker
- Various bugfixes
- Rework tag class structure
- Bugfix: safe call
object:key?.method
parses correctly - Added support for data-attributes through tag#dataset method
- Bugfix: parsing tags inside object literals
- Bugfix: methods with optional arg and block arg compiles correctly
- Bugfix: tag#prepend works for empty tag
- Internal refactoring
- Fix standalone compiler for browser
- Renamed packaged compiler from compiler.js to imbac.js
- Export standalone compiler to
Imbac
instead ofimbalang
- Returning self from default constructors
- Preliminary support for source maps (through
--source-map-inline
option for ̀imba watch
andimba compile
)
- Added
imba export-runtime
command to export the latest imba.js runtime. - Fix
imba watch
on Windows (issue #11)
- Don't single children in Imba.static
- Reworked how setHandler to bind directly to outer scope
- Guard against loading the library multiple times
- Added minified version of library and compiler
- Remove need for classList (to support ie9)
- Now caching static attributes on tags
- More improvements to reconciler
- Added window, document, parseInt, parseFloat as implicit global variables
- Fixed issue in dom reconciler
- Allow
new
andchar
as varnames tag#render
is called by default fromtag#build
- Slightly improved error reporting when using
:
in control-flow (like python) - Massively improved algorithm for reconciling dom trees (rendering for-loops etc will now be much more efficient) - contributed by @judofyr
- Fixed issue when requiring imba through browserify
- Add support for guarded loops:
... for x in ary when x > 10
- Add dynamic cachekey for tags using
<node@{mykey}>
inside loops - Add support for if/forin as first/only argument to implicit calls
- Fixed bug where for-in could not be the first/only indented child in a tag.
- Fixed regression with multiple nested parens in !(expressions)
- Improved error reporting from terminal
- Register 'module' as an automatic global variable, along with 'global', '__dirname', 'exports', 'console', 'process', 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval'. The timeout/interval are likely to be deprecated in next version.
- added support for shebangs to top of files.
#!/usr/bin/env imba
or similar shebangs will be kept and converted in the compiled js (to#!/usr/bin/env node
etc) - Improved preservation of linebreaks, and removal of parens in compiled code.