- 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
@instyle 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,#afterReconcilehooks - 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/etandease-colors/ecstyle 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
superinextend class/tag - Add experimental support for
extend someObject - Variable / parameter named
selfused 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 classcode generation for better tooling support - BREAKING: Compile predicate identifiers
name?to unicodenameΦand dashed identifiersone-two-threetooneΞtwoΞthreeto 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-listenerwill not work sincewindowdoes not have anaddΞeventΞlistenerproperty. See #568 for more info.
- Fix regression resulting in nested assets being rebuilt in incorrect folder
- Added
--asset-namesand--html-namesbuild 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
-wwould not detect changes in unhashed outputs
- Experimental
<global>slot to add global listeners from inside tags @event.outsidemodifier 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
@intersectlistener 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
.eotfont 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 falseinside 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
edge16toedge18due to esbuild warning - Make
imba createexecutable on mac (#550) - Set default esbuild target to es2019 to transpile optional chaining++
- Avoid using
-adin generated class-names due to adblockers (#531)
- Minor improvements to sourcemapping
- Fixed
import type defaultcompilation
- 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=xxxxxxsuffix from asset references generated with--no-hashing - Allow
"external":["builtins",...]to externalize builtin node modules for other platforms thannode - Add
-Halias for the--no-hashingoption
- Upgraded esbuild to v0.9.2
- Automatically polyfill built-in node modules like buffer,stream,crypto etc when compiling for browser. Still experimental.
- Prevent
touchstartevent 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
resizedevent from ResizeObserver
- Overhauled
@touchto work be more consistent on touch devices - Add
@touch.roundevent modifier
- Prevent
touchstartevent on iOS in@touch.prevent
- Make custom events cancelable by default
- Make
@-webkit-scrollbar-*style selectors work - Make core event modifiers work for
@touchevent - Fix issue where text selection did not work after
@touch - Make
@touch.preventprevent scrolling viatouch-action:none - Add
@importantstyle 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,unsuspendcomponent lifecycle methods - Improved router interface & internals
- Added
imba.servetoindex.d.ts - Fix serious regression in router causing crash
- Parse
fn await somethingcorrectly - Improved router internals
- Add internal
Node#attachToParentandNode#detachFromParentmethods - Preserve signed zero in output (Fixes #497)
- Make hmr reloading work with raw html assets
- Make
--no-hashingcli option actually work - Build html entrypoints in correct dist folder
- Add
imba createcommand 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
tabindextotabIndexin 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,60fpsetc) to ms-based numbers on compile-time
- Add
debounceevent modifier
- Add
no-minifyoption to cli - Always compile
htmlnamespaced attributes to rawsetAttribute
- Add
__realnameas 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=hashto asset urls when filename hashing is turned off - Add experimental support for
.htmlentrypoints toimba serveandimba build - Add
absandrelshorthands forpositionstyle 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-childselectors - Improve internals of intersect event handling
- Add
asset.bodyproperty for accessing raw content of assets
- Allow passing
rootMarginoptions 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.exactmodifier 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 Fooinstantiation syntax - Deprecate
Foo.newinstantiation 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
$referenceselectors - 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
beforeandafterstyle property modifiers - Added
prefixas alias forbefore.content - Added
suffixas alias forafter.content
- Fix nested selector bug
- Fix focus-within modifier
- Add
:localpseudo-class for only styling local children of component - Support
$referencein selectors for targeting local referenced elements - Change
displaystyle 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
textstyle 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
@decoratorsyntax. 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/setinstead ofdefkeyword - Add support for compiling props to native getters and setters using
nativeoption (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
imbacli - 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,constandawaitunless--es5is specified - Align
awaitprecedence with js - Support variable shadowing
- Fix fat-arrow template parsing
<div.item => ...
- Make
imbapack input.imba output.jswork without a config
- Introduce
modulekeyword 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.allwrapping 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.mountandtag.unmount - Allow setting css inline
<div css:height=100> - Deprecated selector syntax
- Deprecated various tag helpers
- Tons of bugfixes and improvements
tag.initializecan 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#txandImba.Touch#tyfor 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 analyzenow takes--entitiesflag 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?.methodparses 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
Imbacinstead ofimbalang - Returning self from default constructors
- Preliminary support for source maps (through
--source-map-inlineoption for ̀imba watchandimba compile)
- Added
imba export-runtimecommand to export the latest imba.js runtime. - Fix
imba watchon 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
newandcharas varnames tag#renderis 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 imbaor similar shebangs will be kept and converted in the compiled js (to#!/usr/bin/env nodeetc) - Improved preservation of linebreaks, and removal of parens in compiled code.