UNPKG

50.8 kBMarkdownView Raw
1# Changelog
2
3## 2.0.0-alpha.230
4
5* Improved integration with vite
6
7* `.env` traverse up file tree from file instead of cwd
8
9* Add `@standalone` and `@browser` style modifiers
10
11* Add custom `@mutate` event that wraps `MutationObserver` the same way `@resize` wraps `ResizeObserver` and `@intersect` wraps `IntersectionObserver`
12
13* Add built-in `@bound` decorator. This will bind methods to their class instance.
14
15 ```
16 class Item
17 # method is automatically bound to instance and can be passed around
18 # without changing self when called.
19 @bound def setup
20 yes
21 ```
22
23* Add built-in `@thenable` decorator. Very useful - wait for docs :)
24
25* Add `ease-styles` style property and make the alias `e` a shorthand for `ease-styles` instead of `ease-all`.
26
27 It's quite common to just want smooth generic easing of styles. Previously you could just do `e:200ms` or `e:300ms ease-in-out` etc, but that would add easing to _all_ properties. Many properties like `z-index`, `position`, `display` should usually not be eased, and can cause major performance issues. The default shorthand now only eases the visual properties you would usually want to ease.
28
29* Initial work on stdlib that adds functionality to builtins like String, Number, Array, Set and more. Use via `import 'imba/std'`.
30
31* Add `kb`, `mb` and `gb` units. Including these units after a literal number
32will compile to number of bytes. Ie:
33
34 ```
35 2mb # 2097152
36 1kb # 1024
37 file.size < 500kb # check a filesize
38 new Uint8Array(8mb) # Allocating an 8mb UintArray
39 ```
40
41* Various fixes and quality-of-life improvements.
42
43## 2.0.0-alpha.229
44
45* Fixed regression with style values inside parenthesis
46
47* Made `bdx` and `bdy` aliases work as intended
48
49## 2.0.0-alpha.228
50
51* Fixed issue with certain scoped selectors compiling incorrectly
52
53* Fixed `@odd`, `@even`, `@not-first` and `@not-last` selectors
54
55* Changed behaviour of `@hotkey` with multiple handlers
56
57 If multiple elements bind to the same `@hotkey` combo Imba would
58 previously always trigger them in reverse order (ie, last dom element first). If some but not all of the handlers are bound to visible elements (ie has offsetParent) it will only trigger on those.
59
60 This is useful if you have multiple pages / sections that bind to the same
61 hotkeys, and you show / hide the elements using css instead of adding and removing them from the dom.
62
63## 2.0.0-alpha.227
64
65* Fix regression which caused `.!classname` and `@!hover` negated modifiers to break.
66
67* Fix issue where css selector could not start with `^` parent reference.
68
69## 2.0.0-alpha.226
70
71We've reworked a core part of how style selectors are compiled in terms of specificity++. If your existing styles break in any way, please let us know on discord!
72
73* Fixed reference to missing index.css.map when building projects.
74
75* Fixed issue with reactivity when error was thrown inside reactive function.
76
77* Fixed issue with routed elements inside slots.
78
79* Fixed tooling to make it work with latest vscode.
80
81* Add numerous 3-letter display values for all common flex layouts.
82
83* Include `min-width` and `min-height` in list of easing properties.
84
85* Add field descriptor syntax for declaring advanced get/set wrappers for properties on classes and tags.
86
87* Add new css aliases:
88
89 ```
90 tof: text-overflow
91 tuf: text-underline-offset
92 mih: min-height
93 mah: max-height
94 miw: min-width
95 maw: max-width
96 ```
97
98* Add experimental support for `.env` files (docs coming)
99
100* Changed how `..@hover` and `..outer-class` selectors work.
101
102 They now rely on browser-support for `:matches` and `:is` which is still at ~95% support globally.
103
104* Use literaly `@` in html classes for modifiers.
105
106 If you previously relied on the fact that `d@custom-modifier:block` compiled to `.mod-custom-modifier { display: block }` you need to follow new conventions.
107
108* Add support for `^` in style modifiers for advanced targeting.
109
110 ```imba
111 # color of span is blue when button is hovered
112 <button> <span[c^@hover:blue]>
113 # opacity of nested i is 1 only when button is foxused
114 <button> <span> <i[o:0 o^^@focus:1]>
115 ```
116
117## 2.0.0-alpha.225
118
119* Automatically prefix certaib css properties for better browser compatibility.
120
121* When errors are thrown inside event handlers - a subsequent `@error` event will be triggered from the element of the throwing handler.
122
123* All new `imba create` command (by @familyfriendlymikey)
124
125* Remove support for old `prop name @set ...` syntax for watching when property is changed. Implement using descriptors instead.
126
127## 2.0.0-alpha.224
128
129* Fixed parsing of nested template literal strings.
130
131* Enable sourcemapping by default when running scripts.
132
133* Added `imba.awaits`
134
135* Make sure automatic `import {...} from 'imba'` is inserted at the very top.
136
137* Make empty catch block return the error
138
139 Useful to be able to handle things like error handling for asynchronous promises in a more compact manner:
140
141 ```imba
142 # will just swallow potential errors like before
143 let res = try await some-function
144 # ending with catch will return the error instead of the result
145 let res = try await some-function catch
146 if res isa Error
147 ...
148 ```
149
150* Various fixes
151
152## 2.0.0-alpha.223
153
154* Include safari15 as a target when compiling for web.
155
156 We recently started using class static initialization blocks to simplify
157 some internals, and this is not yet supported in safari.
158
159* Allow two parameters in `ja`/`justify-align` property to set justify/align independently.
160
161## 2.0.0-alpha.222
162
163* Enable `x` and `y` shorthands for all border properties.
164
165* Add `s` shorthand for `size`.
166
167* Deprecate `j` and `a` shorthands.
168
169* Streamlined more css shorthands and added more tests for styling
170
171## 2.0.0-alpha.221
172
173* Add shorthands for `outline-*` css properties.
174
175* Unify `ease` and `transition` css properties.
176
177 This is a breaking change. Going forward it is recommended to use the `ease` properties for all transitioning. See [documentation](https://imba.io/docs/css/easing).
178
179* Add support for custom colors in predefined box-shadows.
180
181 See [documentation](https://imba.io/docs/css/properties/box-shadow) for details.
182
183* Improvements to the router.
184
185* Rely more on esbuild to generate simpler code (ie using static blocks in classes).
186
187* Add `inherited` hook for classes.
188
189 Whenever a class is extended, the `inherited` method on the parent class will be called, with the subclass as the only argument, if one is defined.
190
191 ```imba
192 class Model
193 static def inherited subclass
194 console.log subclass,'inherited from',self
195
196 class Item < Model
197 ```
198
199## 2.0.0-alpha.219
200
201* Add import handler for `?serviceworker` suffix.
202
203 These assets are built without hashes in filename and to the root of the public folder, as is required for serviceworkers.
204
205* Deprecate `shadow` shorthand for `box-shadow` - use `bxs` instead.
206
207* Deprecate `ts` shorthand for `text-shadow` - use `txs` instead.
208
209* Support two parameters in css property `gap`
210
211## 2.0.0-alpha.216
212
213Last version (with new features) before `beta.1`. This release contains breaking changes in the bundler that need to be tested thoroughly before beta.
214
215* Use the latest version of esbuild
216
217 We are finally using the latest version of esbuild. All of our custom logic
218 for hashing, resolving and chunking is now done by esbuild instead.
219
220* Support path aliases from `[js|ts]config.json`
221
222 Now that we are using the latest version of esbuild we finally support [path aliases](https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping) declared in `[js|ts]config.json` files. This also works with assets, ie. declaring `"icons/*": ["assets/svg/*","assets/codicons/*]` in your tsconfig would allow `<svg src="icons/some-icon.svg">` to work anywhere in your project.
223
224* Remove support for path aliases in `imbaconfig.json`
225
226 If you had declared path aliases in an `imbaconfig.json` these should be moved into a `[js|ts]config.json` instead.
227
228* Remove backwards compatible transforms from compiler itself.
229
230 Previously we included a bunch of logic for transforming conditional assignments like `??=`,`&&=`, and `||=` to support older browsers and node versions. Now we compile these statements as is and rely on esbuild to transform when needed.
231
232* Remove support for `?=` operator - use `??=` instead.
233
234* Drop commonjs target from compiler
235
236 The imba compiler will now always compile import/export statements natively
237 to import/export in javascript, and instead rely on esbuild to convert the output to cjs when needed.
238
239* Simplify output from `imba build`
240
241 The output of imba build is now possible to run directly through node (and soon Bun). We
242
243* Allow running html file directly with `imba some-entry.html`
244
245 This will spawn a dev-server for this html file and its referenced scripts and stylesheets.
246
247* Allow testing client-side scripts with `imba --web some-entry.imba`
248
249 This will spawn a dev-server, a html entrypoint and all that is needed to run a script in the browser.
250
251* Copy static assets over from `public` when building
252
253 If you have a `public` directory in your project, files from this will be copied over to the public folder of your output dir (default `dist`) when building.
254
255* Allow prefixing asset paths via `--base` option
256
257 Ie, when building for github pages you would run `imba build --base /my-repo-name -o docs index.html` to build your files and assets with the correct prefix, into the `docs/` folder of your project to adhere to github pages convetions.
258
259* Support loading workers following vite conventions
260
261 ```
262 import MyWorker from './some/script?worker'
263 import MySharedWorker from './some/script?sharedworker'
264 import url from './some/script?worker&url'
265 ```
266
267* Set node14.13.0 as the default minimum target when building for node.
268
269 This can be overridden by supplying your version of node through the `--node.target` option. Ie `imba build --node.target node12 my/script.imba`
270
271* Fixed regression in router that caused routed elements inside the root component to fail.
272
273## 2.0.0-alpha.214
274
275* Treat routes ending with `/` as exact routes.
276
277 The `<div route='/'>` would previously match any path. You could define exact routes by including a `$` at the end of the route. This lead to a lot
278 of confusion. Now, any route that ends with a `/` will only match the exact path. Use `*` to bypass
279
280 ```imba
281 <div route='/'> # matches / _only_
282 <div route='/*'> # matches any path
283
284 <div route='/items'> # matches /items, /items/1 etc
285 <div route='/items/'> # matches /items only
286 ```
287
288* Only show first matching element if multiple siblings match a route.
289
290 ```imba
291 <div>
292 <div route='/items/new'>
293 <div route='/items/:id'> # if /items/new matched - this will not show
294 <div route='/'> # matches if url is exactly '/'
295 <div route='*'> # matches if none of the above matches
296 ```
297
298## 2.0.0-alpha.213
299
300* Make `@event.emit('...')` on `<global/teleport>` dispath event inside their literal parent (fixes #693)
301
302## 2.0.0-alpha.210
303
304* Add number units for `minutes`, `hours`, and `days`
305
306* Fixed issue where identical nested selectors were incorrectly optimized away
307
308* Support `silent: true` option for `imba.autorun` to not call imba.commit
309
310* Fixed issue where @autorun methods threw error when element was re-mounted (#684)
311
312## 2.0.0-alpha.209
313
314* Fixed bug with observables not unsubscribing correctly in certain cases
315
316* Expose `imba.reportObserved`, `imba.reportChanged` and `imba.createAtom` (still experimental)
317
318* Add `imba.hotkeys.addKeycodes(...)` (#677)
319
320* Made `@touch.hold(dur)=handler` trigger handler after duration without waiting for additioanl events (#664)
321
322## 2.0.0-alpha.207
323
324* Don't try to implicitly return debugger statement
325
326* Improve compilation of `extend` statements for tooling
327
328## 2.0.0-alpha.206
329
330* Disallow iterating over falsy values using `for in`
331
332* Compile literal bigints correctly
333
334* Minor improvements to type definitions
335
336## 2.0.0-alpha.205
337
338* Support `for await ... of` syntax
339
340* Support tagged templates
341
342 Works like in plain js, but `{}` is still used for interpolation instead of `${}`.
343
344 ```imba
345 import md from 'tag-markdown'
346 const html = md`## Welcome to {name}`
347 ```
348
349* Add internal `#__patch__(props)` method for class instances to update fields
350
351* Stop shimming top-level await (delegates responsibility to esbuild)
352
353## 2.0.0-alpha.204
354
355* Fixed operator precedence for ternary expressions
356
357* Revert automatic `calc` wrapping for css values introduced in alpha 200
358
359 Introduced a lot of bugs and challenges related to `/` being a valid part of css values. `calc` will still be automatically be added around top-level parenthesis in css values, so `width:(100vw - 20px)` will still compile as `calc(100vw - 20px)`, but properties like `grid-column: 1 / 3` will now compile without calc again.
360
361## 2.0.0-alpha.203
362
363* Fixed regression with negated breakpoint modifiers like `display@!600:none`
364
365## 2.0.0-alpha.202
366
367* Fixed performance regression for tag trees introduced in alpha 191
368
369* Fixed compilation of css properties wrapped in parenthesis
370
371* Make unresolved decorators resolve to `imba.@decorator`
372
373 ```imba
374 class Order
375 @lazy get lines
376 ...
377 ```
378
379 If `@lazy` is not found in the file above, the compiler will essentially include
380 `import {@lazy} from 'imba` when compiling.
381
382* Introduced experimental state management decorators
383
384 A minimal set of decorators heavily inspired by MobX that allows you to mark classes
385 and objects as observable, and run code upon changes. This feature will be kept under
386 wraps until it has been battle-tested.
387
388## 2.0.0-alpha.201
389
390* Fixed regression where css colors `rgb(0 0 0 / alpha)` would compile incorrectly
391
392## 2.0.0-alpha.200
393
394* Allow `@hotkey('*')` to listen to all hotkey events
395
396 This is perfect for disabling all other hotkeys in certain contexts.
397
398 ```imba
399 tag ConfirmDialog
400 # when this dialog is mounted - all hotkey handlers preceding
401 # it in the dom tree will be blocked by the `*` listener
402 <self @hotkey('*').global>
403 <button @hotkey('esc')> "Cancel"
404 <button @hotkey('enter')> "Ok"
405 ```
406
407* Automatically wrap style expressions in `calc()`
408
409 ```imba
410 css div width: calc(100vw - 40px)
411 # can now be written as
412 css div width: 100vw - 40px
413 ```
414
415* Make bind=data.property work for textarea when value is `undefined`
416
417* Allow nested parentheticals in css calc
418
419* Fixed issue where removing class names using `el.flags.remove` would not work
420
421* Made `@touch.flag` support selector in second argument to match `@event.flag`
422
423* Allow second argument to `el.flags.incr(flag, dur = 0)`
424
425 With this argument you can automatically decrement the flag after a certain duration.
426
427* Allow negated style modifiers
428
429 ```imba
430 css div
431 @!hover o:0.5 # div:not(:hover) { opacity: 0.5 }
432 @!md d:none # @media (max-width: 767px) { div { display:none } }
433 # also works for classes
434 css div
435 @.!disabled o:0.5 # div:not(.disabled){ opacity:0.5 }
436 ```
437
438## 2.0.0-alpha.199
439
440* Fix regression where content of `<teleport>` and `<global>` was not rendered (#643)
441
442## 2.0.0-alpha.198
443
444* Change how css specificity is forced in generated selectors
445
446 Older browsers do not support complex selectors within `:not()`, so the style `:not(#_#_#_)` which is used for "inline" styles would not work in these browsers. We have now reverted to using multiple not selectors like `:not(#_):not(#_):not(#_)`. This is more verbose but the size is negligible, especially with compression. Debugging styles in the browser is a bit more clumsy.
447
448* Change css specificity for component rules
449
450 Selectors inside tag declarations are now compiled with a higher specificity than global selectors.
451
452 ```imba
453 tag App
454 # scoped selectors have higher precedence than global styles
455 css .selector d:block
456 ```
457
458* Fixed case where a generated class-name is added multiple times on elements
459
460## 2.0.0-alpha.197
461
462* Fixed issue with bracketless multiline object and certain operators
463
464 ```imba
465 let x = null
466 x ||=
467 one: 1
468 two: 2
469 # would previously compile incorrectly to x ||= {one: 1}
470 ```
471
472## 2.0.0-alpha.196
473
474* Introduced `@event.closest(sel)` modifier
475
476 Works like `@event.sel(selector)`, but checks for `target.closest(...)` instead of `target.matches(...)`.
477 In the cases where you want to just handle clicks that do _not_ match a selector you can negate the modifier using `.!closest(...)`.
478
479 ```imba
480 tag App
481 <self>
482 # all clicks outside of button tags
483 <div @click.!closest('button')>
484 <button> <span> "Click"
485 <p> "blabla"
486 ```
487
488## 2.0.0-alpha.195
489
490* Fixed compilation issue for functional tags without arguments
491
492* Throw error when trying to use bind on functional tags
493
494## 2.0.0-alpha.194
495
496* Improved syntax for functional tags
497
498 If you supply `()` after a tag name, Imba will now treat it as a functional tag. Ie, `<some-name(1,2)>` is equal to `<( some-name(1,2) )>`. The old syntax may be phased out before final release.
499
500 ```imba
501 def List items
502 return if items.length == 0
503
504 <section>
505 <slot>
506 <ul> for item in items
507 <li> item.title
508
509 tag App
510 def head
511 <header> <slot> <h2> "Welcome"
512
513 <self>
514 <head()>
515 <List(data.newest)> <h2> "Newest posts"
516 <List(data.all).large> <h2> "All posts"
517 ```
518
519## 2.0.0-alpha.193
520
521* Fix issue where parts of runtime was incorrectly tree-shaked
522
523* Always resolve `node:*` imports as external
524
525* Include changelog.md in npm package
526
527## 2.0.0-alpha.191
528
529There will likely be a few more alpha releases fixing regressions and issues related to the new features in alpha 191, but after these potential issues have been resolved we're moving to beta 🥳! This release does contain a few breaking changes, both in relation to styles and memoization. We'll update the docs at imba.io and publish a screencast going over the changes to make it easier to transition to this new version. Changes;
530
531* Rename $key to key
532
533 To give elements a stable identity (usually inside lists) you should now use `<el key=value>` instead of `<el $key=value>`. `$key` is deprecated and will be removed in `beta.1`.
534
535* Allow using any object as `<element key=...>` value
536
537 Keyed elements now use a `Map` instead of a plain object to keep track of unique elements. This means that any value (both objects and primitive values) may be used as keys.
538
539 ```imba
540 const items = [{title: "One"},{title: "Two"}]
541
542 tag App
543 <self> for item in items
544 # objects themselves can be used as keys now
545 <AppItem key=item data=item>
546 ```
547
548* New (improved) syntax for rendering functional components / tag trees
549
550 This was the main change holding us back from reaching beta, as it is a breaking change for most users. When you want to include external live dom elements from getters or methods outside of the render-tree, wrap the expression in `<(expression)>`.
551
552 Besides simplifying the way memoization works it also allows you to add classes and styles to these external fragments, making it vastly more flexible than before.
553
554 ```imba
555 tag App
556 get body
557 <div> "This is body"
558
559 def list title, items
560 <section>
561 <h2> title
562 <ul> for item in items
563 <li> item.title
564
565 <self>
566 <( body )>
567 <( list 'Top', data.popular ).large [mt:2]>
568 <( list 'New', data.posts.slice(0,10) )>
569 ```
570
571* Log warnings to console when building/running without minification
572
573 Added runtime checks that notify about erroneous behaviour when building/running w/o minification. Initially it will only warn about non-memoized elements being created during rendering. Eventually we'll use these conventions to add much more elobrate checks and readable error messages for the most common issues users can run into.
574
575* Allow instantiating elements w/o memoization using `new`
576
577 Imba will automagically allow any element (literal tag) in any method to be memoized.
578
579 ```imba
580 def wrap text
581 let div = <div.item> text
582 return div
583
584 imba.mount do <section>
585 <( wrap "One" )>
586 <( wrap "Two" )>
587 ```
588
589 If you call a method or access a getter that returns an element (like `def wrap`) it will look up a memoization context and just reuse/update the div for that particular context. If you call it directly without being in a context, Imba will warn you. There are however some situations where you actually just want to create new elements. In this case, use `new` in front of the element. If the root is not memoized, the children won't either, so you only need to add `new` in front of the top element.
590
591 ```imba
592 def wrap text
593 let div = new <div.item> text
594 return div
595 ```
596
597* Allow non-global tag types in dynamic tag names
598
599 Local tag types are now allowed in `<{tag-type} ...>` syntax. Previously it would only work when `tag-type` evaluated to a string, and there was a globally defined web component or native tag with that name. Now it works with classes as well.
600
601 ```imba
602 import {PostView,ArticleView} from './views'
603
604 const items = [
605 { type: Post, title: "My post"}
606 { type: Article, title: "My article"}
607 ]
608
609 tag App
610 <self>
611 for item in items
612 <{item.type} data=item>
613 ```
614
615* Only allow named elements inside `<self>`
616
617 Using named elements (`<div$myname>`) outside of self would previously introduce subtle bugs and conflicts. They are now only allowed inside of `<self>`.
618
619* Changed css specificity
620
621 Styles declared in tag declaration body now has lower specificity than class selectors.
622
623 ```imba
624 css .warn hue:red
625 css .large p:4 fs:lg
626
627 tag Button
628 css p:2 fs:sm hue:blue
629
630 # styles from classes take precedence
631 <Button.warn.large>
632 ```
633
634* Scoped selectors no longer applies to self
635
636 Now, selectors like `.warn` declared in tag declaration body only applies to elements _inside_ `Button`, not the button itself. To target the button itself, use `&` in the selector.
637
638 ```imba
639 tag Button
640 css bg:blue2
641 css .warn bg:red2
642 css &.large fs:lg
643
644 <self.warn.large> "Still blue bg - but large"
645 ```
646
647* Add `declare` keyword for declaring fields (with type annotations) without generating any code for that field
648
649 ```imba
650 class Foo
651 declare a\number
652 ```
653
654* Allow multiline conditionals when lines start with `and`,`or`,`||`, or `&&`
655
656 This is a temporary solution for a larger challenge. It simply ignores new-lines whenever your line starts with these operators.
657
658 ```imba
659 if condition
660 and test
661 or force
662 return ...
663 ```
664
665* Allow third argument in `for in` loops referencing length
666
667 If you need to know the length of a collection you are iterating over, you can now access the total length of the collection by supplying a third argument. This is not available in `for of`, only `for in`.
668
669 ```imba
670 for member,index,len in list
671 # len refers to the length of the iterable list
672 if index == len - 1
673 yes # this is the last element
674 ```
675
676* Exposed `imba.hotkeys.humanize` for converting hotkey combos to readable shortcuts
677
678* Exposed `imba.hotkeys.htmlify` for converting hotkey combos to readable shortcuts as html
679
680## 2.0.0-alpha.190
681
682* Fixed regression related to implicit parenthesis in tag trees
683
684* Renamed `@hotkey.capture` to `@hotkey.force`
685
686## 2.0.0-alpha.189
687
688* Introduced `@hotkey.repeat` modifier
689
690 When a user presses a key and then keeps holding it, keydown/keypress
691 events will be generated every n milliseconds. For hotkeys you usually
692 only want to trigger once when the user press the combination.
693
694 If you want the handler to keep firing while user holds down the keys
695 you can now use the `.repeat` modifier:
696
697 ```imba
698 # will only toggle when pressing space, no matter how long you
699 # keep it pressed.
700 <div @hotkey('space')=togglePlayback>
701 # holding the right arrow will call fastForward repeatedly
702 <div @hotkey('right').repeat=fastForward>
703 ```
704
705* Changed rules for implicit parenthes / calling in tag trees
706
707 Indented code under a tag-tree will no longer be compiled as an invocation.
708
709 ```imba
710 <div> data.name
711 "something"
712 if data.name
713 "something"
714 ```
715
716 The code above would previously compile to div `data.name("something")`. Now
717 indentation in tag trees will behave like they do in statements like if/for/while etc.
718 This fixes #630, so you can now add css blocks like this:
719
720 ```imba
721 <div> data.name
722 css d:block # style for the div
723 ```
724
725* Added `@first-child` and `@last-child` css modifiers
726
727 We already have `@first` and `@last` as shorter aliases, but since all other standard pseudo-selectors exist it makes sense to include the longer versions of these as well.
728
729* Fixed issue with nested loops in tag trees
730
731 It is now possible to use nested loops without wrapping the inner loops in a fragment.
732
733 ```imba
734 <div>
735 for item in data.items
736 for label in item.labels
737 <div> label
738 ```
739
740* Allow declaring variables and global tags with the same name
741
742 Global web components should not be registered as regular variables.
743 Previously the compiler would throw an error if `tag app` and `let app = ...`
744 were declared in the same file.
745
746* Allow optional chaining with dynamic keys - #638
747
748 ```imba
749 user..[key]
750 ```
751
752* Mark imported SVGs as @__PURE__
753
754 This allows efficient tree-shaking so that one can include all icons from a collection
755 and only bundle the ones that are used.
756
757 ```imba
758 import * as icons from 'imba-codicons'
759
760 <svg src=icons.volume-up>
761 # you get completions and previews for all icons, but only volume-up
762 # will be bundled in your code now
763 ```
764
765* Don't round x,y in `@touch.reframe` and `@touch.fit` by default (#639)
766
767## 2.0.0-alpha.187
768
769* Call `dehydrate` on compononents when rendering components from the server.
770
771* Updated type declarations.
772
773## 2.0.0-alpha.186
774
775* Don't add html class name for named elements
776
777 Previously when naming an element like `<div$title> ...`, imba would automatically
778 add a `title` class name to the element. This can lead to confusing issues. If you
779 have used this undocumented behaviour previously you just need to add the class
780 yourself, like `<div$title.title>`.
781
782* Introduced `@mouse.mod` modifier
783
784 Since Mac and Windows/Linux use different keyboard modifiers for most standard actions
785 (ctrl+c,ctrl+s,ctrl+click) vs (⌘c,⌘s,⌘+click) etc, it makes sense to have an event
786 modifier that takes care of checking the platform. `@mouse.mod` will return true of
787 ⌘ is pressed on mac, and Ctrl is pressed on all other platforms.
788
789 ```imba
790 <div @click.mod.stop=openInNewWindow @click=openHere>
791 ```
792
793* Fixed bug in `@event.throttle` modifier
794
795## 2.0.0-alpha.183
796
797- Remove unneeded class names on tags when building
798
799## 2.0.0-alpha.182
800
801- Fixed issues with using event modifiers with external imba library
802
803## 2.0.0-alpha.177
804
805- Added type declarations into typings/
806
807## 2.0.0-alpha.176
808
809- Deprecated `@touch.moved-dir`
810
811 The direction of the `@touch.moved` modifier can now be specified in the second argument of `@touch.moved` instead of as 6 separate modifiers. These are not used that often and it seems natural to keep inside a single modifier instead.
812
813 ```imba
814 <div @touch.moved-left(4px)> # before
815 <div @touch.moved(4px,'left')> # after
816 ```
817
818- Renamed style property `tint` to `hue`
819
820 Hue is a better name for the newly introduced `tint` style property.
821
822 ```imba
823 # hue can be set to any named color from the imba color palette
824 <div[hue:orange]>
825 <h1[color:hue7]> # refer to a shade/tint of the aliased color
826 ```
827
828- Refactored event modifiers
829
830 Foundations to allow defining custom event modifiers down the road. Complex modifiers have access to the context in which it was called, including a state-object that is persisted across events etc. Documentation fo this will be in place before 2.0 final. As an example, a tiny `@keydown.f1` modifier for only passing through F1 can be defined like this:
831
832 ```imba
833 extend class KeyboardEvent
834
835 def @f1
836 return keyCode == 112
837 ```
838
839- Changed behavior of `@event.throttle` modifier
840
841 `throttle` would previously fire once and suppress subsequent events for a certain duration (default 250ms). Now it will re-fire at the end of the throttling if there were any suppressed events during the initial throttle. For events like `@resize` and `@scroll` where you just want to limit how often they fire, the new behavior is much more useful.
842
843 ```imba
844 # handler will be called immediately upon scrolling and keep emitting
845 # every 100ms until there are no more scroll events.
846 <div @scroll.throttle(100ms)=handler>
847
848 # So, clicking this button twice will trigger once immediately,
849 # and then again after 1 second. Previously the second click would
850 # never trigger.
851 <div @click.throttle(1s)=handler>
852 ```
853
854- Introduced `@event.cooldown` modifier
855
856 The old `throttle` was renamed to `cooldown`. Ie, if you want subsequent button clicks to be suppressed for `n` time (250ms default) you should now use `cooldown` instead of `throttle`.
857
858 ```imba
859 # So, clicking this button twice will trigger once immediately, and
860 # the next click will be ignored as long as it happens less than a second later
861 <div @click.cooldown(1s)=handler>
862 ```
863
864- Allow negated event modifiers
865
866 Certain event modifiers are called guards, like `@keydown.enter`, `@click.self` etc. These are modifiers that essentially evaluate to true/false and decides whether to continue handling an event or not. `@click.self` would only trigger if the target of the event is the same as the element to which the `@click` is bound. Now you can include a `!` in front of any such event handler to only continue if the guard is false.
867
868 Ie. `<div @click.!shift=...>` would only trigger if shiftKey is _not_ pressed.
869
870 ```imba
871 # Only call handler if shiftKey is NOT pressed
872 <div @click.!shift=handler>
873
874 # Only call handler if target does NOT match the selector
875 <div @click.!sel('.active')=handler>
876 ```
877
878- Introduced `@mouse.left`, `@mouse.middle`, and `@mouse.right` modifiers
879
880 Only trigger if the left,middle, or right mouse button is pressed. Works for all mouse and pointer events, as well as the custom `@touch` event.
881
882 ```imba
883 # Only call handler if the middle mouse button was pressed
884 <div @click.middle=handler>
885
886 # Only start touch handling if the right mouse button was pressed
887 <div @touch.right=handler>
888 ```
889
890- Introduced `@intersect.flag` modifier
891
892 The `flag` modifier now works differently for `@intersect` event. It will add a css class to the element when it is intersecting and remove it whenever it is not intersecting.
893
894 ```imba
895 # the html class showing will be present on div
896 # whenever it is intersecting with the viewport
897 <div @intersect.flag('showing')>
898 ```
899
900- Introduced `@touch.end` modifier
901
902 The `end` guard breaks unless the touch is in its ending state.
903
904 ```imba
905 # handler is only called at the end of the touch
906 <div @touch.end=handler>
907 # handler is only called at the end of the touch if pointer moved
908 <div @touch.moved.end=handler>
909 ```
910
911- Introduced `@touch.hold(dur=1000ms)` modifier
912
913 The `hold` modifier allows you to require an element to be pressed for some time (default 1000ms) until it starts allow events to come through.
914
915 ```imba
916 # handler is only called once the touch has been held for 1000ms
917 <div @touch.hold=handler>
918 # handler only called if ctrl was pressed and touch held for 250ms
919 <div @touch.ctrl.hold(250ms)=handler>
920 ```
921
922- Introduced `@touch.apply(target,xprop='x',yprop='y')` modifier
923
924 Like `@touch.sync` but just setting the x,y values on an object directly instead of adding to the previous values.
925
926 ```imba
927 const obj = {}
928 # apply is essentially shorthand for setting properties:
929 <div @touch.apply(obj)>
930 <div @touch=(obj.x = e.x, obj.y = e.y)>
931 ```
932
933- Added `@event.key(keyOrCode)` modifier for keyboard events
934
935 KeyboardEvent.keyCode is deprecated but still useful in many cases. If you supply a number to the modifier it will stop handling if `keyCode` does not match this number.
936
937 ```imba
938 # Only trigger if F1 is pressed (event.keyCode==112)
939 <div @keydown.key(112)=handler>
940 ```
941
942 If you supply a string it will compare it against KeyboardEvent.key.
943
944 ```imba
945 # Only trigger if PrintScreen is pressed (event.key=='PrintScreen')
946 <div @keydown.key('PrintScreen')=handler>
947 ```
948
949- Changed behavior of `@touch.moved` modifier
950
951 Now, if you add a `moved-left(threshold = 4px)` modifier, the event handling will be cancelled if the touch has moved more in any other direction (in this case up,down, or right) _before_ moving 4px left.
952
953 ```imba
954 # If user moves more than 10px up/down before left/right
955 # the touch will not be handled
956 <div @touch.moved-x(10px)=draghandle>
957 ```
958
959- Improved behaviour of `@touch` and `@click` events
960
961 `@click` events on nested children of an element with a `@touch` handler would previously be prevented. This made `@touch` pretty challenging to use for things like dragging elements with buttons etc.
962
963 Now `@click` events will be triggered unless the `@touch` handler has a `prevent` modifier, a `moved(-x|y|up|down)` modifier that has activated, or a `hold` modifier that has activated.
964
965 ```imba
966 # button click is triggered onless touch is held more than 500ms
967 <li @touch.hold(500ms)=draghandle> <button @click=handle>
968 ```
969
970- Improved behaviour of `@touch` and scrolling on touch devices
971 Previously, scrolling (and clicking) would be disabled for any element with a `@touch` handler on iOS. Ie. if you added `@touch` to a custom slider, scrolling would not work if the user happened to touch down on the slider while flicking down the page.
972
973 Scrolling is disabled by the `prevent` modifier, an activated `moved` modifier or activated `hold` modifier.
974
975 ```imba
976 # Scrolling will now work fine when touching the div and flicking up/down.
977 # Only if the user holds still on the element for 500ms will scrolling and
978 # default behavior be prevented.
979 <div @touch.hold(500ms)=draghandler>
980 ```
981
982- Add support for additional file extensions in bundler (webm, weba, avi, mp3, mp4, m4a, mpeg, wav, ogg, ogv, oga, opus, bmp)
983
984## 2.0.0-alpha.175
985- Fix: `@in` transitions for nested elements works
986- Experimental support for tweening from/to implicit width/height in transitions
987- Experimental `@resize.css` modifier to automatically enable size units
988- Allow variables in color opacity like `color:blue4/$alpha`
989- Experimental support for `tint:colorname` and using `tint0-9` colors in styles
990
991## 2.0.0-alpha.174
992- Named elements (`<div$myname>`) exist immediately in components
993- Fix: Spread operator works for any expression in objects
994- Fix: Make sure ::before/after comes last in selectors with other pseudo-classes>
995- Fix: Allow symbol keys in `prop/attr #my-sym-key`
996
997## 2.0.0-alpha.173
998
999- Fix: Allow binding tag properties to symbol identifiers
1000- Report correct location for "Cannot redeclare variable" error (#114)
1001- Experimental support for `@hotkey` events
1002- Fix: Don't run `imba.commit` on unhandled events>
1003- Added `@trusted` event guard
1004- Added `@trap` event modifier
1005
1006## 2.0.0-alpha.172
1007
1008- Fix: Rendering list inside conditional
1009- Support css blocks inside conditionals in tag trees
1010- Warn about interpolated style values outside of tag trees
1011- Improved specificity for nested css rules
1012
1013## 2.0.0-alpha.171
1014
1015- Fix: Make `<global @resize>` work correctly
1016- Fix: Variable resolution for `let item = do ... item()`
1017- Fix: Allow ternary in tag trees
1018- Fix: Allow `condition && <tag>` in tag trees
1019- Fix: Ternary parsing `cond ? <div> "a" : "b"`
1020
1021## 2.0.0-alpha.170
1022
1023- Added `@in` style modifier for specifying in-only transitions
1024- Renamed transition hooks to `transition-(in|out)-(end|cancel)`
1025- Using `<button bind=prop>` without a value acts like `<button bind=prop value=yes>`
1026
1027## 2.0.0-alpha.169
1028
1029- Fix: Various dom regressions in SSR
1030- Updated default ease duration to 300ms
1031
1032## 2.0.0-alpha.168
1033
1034- Use setAttribute('class') under the hood for svg elements
1035- Added `#afterVisit`, `#beforeReconcile`, `#afterReconcile` hooks
1036- Added experimental easing via `<my-element ease>`, with element hooks
1037 `#ease-enter`, `#ease-entered`, `#ease-enter-cancel`, and
1038 `#ease-exit`, `#ease-exited`, `#ease-exit-cancel`
1039- Added `ease/e`,`ease-opacity/eo`,`ease-transform/et` and `ease-colors/ec`
1040 style properties for experimental easing feature
1041- Fix: Passing slots into child components (#607)
1042- Allow using setters on `#context`
1043
1044## 2.0.0-alpha.167
1045
1046- Add support for generic media selectors via `@media(some-media) ...`
1047- Fix: Interpolated numeric value for `rotate:{val}` works i FF
1048- Add @all and @speech style modifiers (for @media all/speech)
1049- Fix: Allow empty css selectors
1050- Fix: Rebuilt prebuilt imba.mjs for web
1051
1052## 2.0.0-alpha.166
1053
1054- Add experimental support for class decorators
1055- Fix: Apply display:block to global tags without dashed name
1056- Change: `inset:*` style shorthand sets `position:absolute`
1057- Added `<teleport to=(sel/element)>` component (#606) by @haikyuu
1058
1059## 2.0.0-alpha.165
1060
1061- Reorganize prebuilt files for jspm support
1062
1063## 2.0.0-alpha.157
1064
1065- Add jspm configuration in package.json
1066
1067## 2.0.0-alpha.156
1068
1069- Add #**inited** hook for class instance initialization
1070- All custom components defaults to display:block
1071- Fix: Don't inject hmr.js script into html assets when building
1072- Fix: Generate html files in public directory
1073
1074## 2.0.0-alpha.155
1075
1076- Allow `$envvar$` as first argument of implicit calls (#571)
1077- Allow `super` in `extend class/tag`
1078- Add experimental support for `extend someObject`
1079- Variable / parameter named `self` used for implicit self in scope
1080- Throw error for non-self tags in tag declaration body
1081- Allow accessing array elements from end with literal numbers like `array[-1]`
1082
1083## 2.0.0-alpha.154
1084
1085- Include precompiled browser-version of library to make it work with jspm
1086- Fix issue with html parser
1087- Fix issue with `<input value=...>` not working in certain cases
1088- Add optional static file serving for `imba serve`
1089
1090## 2.0.0-alpha.153
1091
1092- Fix issue with prop watchers not compiling correctly
1093
1094## 2.0.0-alpha.152
1095
1096- Correctly parse comments inside multi-line tag literals
1097- Readable names for generated (internal) variables
1098- Tag literals act as block scopes for variable declarations
1099
1100## 2.0.0-alpha.151
1101
1102- Fix interpolated style values in tag-tree selectors
1103
1104## 2.0.0-alpha.150
1105
1106- Remove charset:utf8 option from esbuild
1107
1108## 2.0.0-alpha.149
1109
1110- Fix regression with font-size presets (#569)
1111
1112## 2.0.0-alpha.148
1113
1114- Allow declaring return type via `def method\returntype arg1, ...`
1115- Fix crash when inlining sourcemaps on node 16+ (#567)
1116- Overhaul `extend class` code generation for better tooling support
1117- BREAKING: Compile predicate identifiers `name?` to unicode `nameΦ` and
1118 dashed identifiers `one-two-three` to `oneΞtwoΞthree` to avoid potential
1119 naming collisions and improve tooling support. If you previously relied on
1120 dashed identifiers converting to camelCase while interacting with an
1121 external library - this will no longer work. Ie `window.add-event-listener`
1122 will not work since `window` does not have an `addΞeventΞlistener` property.
1123 See [#568](https://github.com/imba/imba/pull/568) for more info.
1124
1125## 2.0.0-alpha.147
1126
1127- Fix regression resulting in nested assets being rebuilt in incorrect folder
1128
1129## 2.0.0-alpha.146
1130
1131- Added `--asset-names` and `--html-names` build options for controlling the generated paths
1132- Tweaked format of generated manifest
1133- Fixed issue with generated stylesheets being blank
1134- Automatically include Link preload headers when serving through imba
1135- Allow all valid RegExp flags in literal regexes
1136- Generate class augmentations (`extend class/tag`) in tsc mode
1137- Use setAttribute for non-idl element attributes
1138
1139## 2.0.0-alpha.145
1140
1141- Fix bundler crash when parsing html entrypoints with doctype
1142- Fix regression where imba `-w` would not detect changes in unhashed outputs
1143
1144## 2.0.0-alpha.144
1145
1146- Experimental `<global>` slot to add global listeners from inside tags
1147- `@event.outside` modifier that works in conjunction with `<global>` slot
1148
1149## 2.0.0-alpha.143
1150
1151- Remove use of String#replaceAll (unsupported before node 15.0.0)
1152
1153## 2.0.0-alpha.142
1154
1155- Don't crash when loading tags with `@intersect` listener on server
1156- Fix svg parsing issue for large svg files (#543)
1157- Fix incorrect dehydration when creating custom element on client directly via document.createElement
1158- Inject asset imports in correct order relative to regular imports
1159- Add support for `.eot` font file reference in stylesheets
1160- Auto-generate combined stylesheet for server and client accessible via `<style src='*'>`
1161- Stop auto-injecting styles for referenced assets when rendering `<html>` on server
1162
1163## 2.0.0-alpha.141
1164
1165- Support webp,avif,apng,gif images in bundler
1166- Fixed missing first character in non-minified css output
1167- Expose imba.commit++ on globalThis
1168- Fix compilation issue with `if false` inside tag tree
1169- Respect custom palettes in imbaconfig.json when building
1170- Allow aliasing palettes in imbaconfig.json
1171- Support inlined svg elements on server
1172
1173## 2.0.0-alpha.140
1174
1175- Improve output from `imba create`
1176
1177## 2.0.0-alpha.139
1178
1179- Stop bundler from crashing when generating worker
1180
1181## 2.0.0-alpha.138
1182
1183- Fix incorrect sourcemap paths with esbuild 0.9.7
1184- Let server fail gracefully when accessing invalid asset urls
1185
1186## 2.0.0-alpha.137
1187
1188- Fix relative path for mac/linux
1189
1190## 2.0.0-alpha.136
1191
1192- Raise default browser-target from `edge16` to `edge18` due to esbuild warning
1193- Make `imba create` executable on mac (#550)
1194- Set default esbuild target to es2019 to transpile optional chaining++
1195- Avoid using `-ad` in generated class-names due to adblockers (#531)
1196
1197## 2.0.0-alpha.135
1198
1199- Minor improvements to sourcemapping
1200- Fixed `import type default` compilation
1201
1202## 2.0.0-alpha.133
1203
1204- Improved sourcemapping
1205- Improved support for type annotations
1206- Fixed crash in bundler
1207
1208## 2.0.0-alpha.132
1209
1210- Improve windows compatibility for bundler and `imba create`
1211
1212## 2.0.0-alpha.131
1213
1214- Serve hashed (cacheable) assets with `Cache-Control: max-age=31536000`
1215- Remove `?v=xxxxxx` suffix from asset references generated with `--no-hashing`
1216- Allow `"external":["builtins",...]` to externalize builtin node modules for other platforms than `node`
1217- Add `-H` alias for the `--no-hashing` option
1218
1219## 2.0.0-alpha.130
1220
1221- Upgraded esbuild to v0.9.2
1222- Automatically polyfill built-in node modules like buffer,stream,crypto etc when compiling for browser. Still experimental.
1223
1224## 2.0.0-alpha.129
1225
1226- Prevent `touchstart` event on iPad Pro in `@touch.prevent`
1227- Fixed text in svg `<text>` elements (#482)
1228
1229## 2.0.0-alpha.128
1230
1231- Fixed image asset urls in SSR
1232- Make bundler work with client entrypoint without any styles
1233- Dispatch bubbling `resized` event from ResizeObserver
1234
1235## 2.0.0-alpha.127
1236
1237- Overhauled `@touch` to work be more consistent on touch devices
1238- Add `@touch.round` event modifier
1239
1240## 2.0.0-alpha.126
1241
1242- Prevent `touchstart` event on iOS in `@touch.prevent`
1243
1244## 2.0.0-alpha.125
1245
1246- Make custom events cancelable by default
1247- Make `@-webkit-scrollbar-*` style selectors work
1248- Make core event modifiers work for `@touch` event
1249- Fix issue where text selection did not work after `@touch`
1250- Make `@touch.prevent` prevent scrolling via `touch-action:none`
1251- Add `@important` style modifier
1252
1253## 2.0.0-alpha.124
1254
1255- Update built-in colors to follow Tailwind 2.0
1256- Allow interpolating colors in runtime `<div[c:{mycolor}]>`
1257- Fix deep selector `>>>` with multiple nested children
1258
1259## 2.0.0-alpha.123
1260
1261- Fix router crashing when event-related runtime code is tree-shaken
1262
1263## 2.0.0-alpha.122
1264
1265- Fix issue with type inferencing tags in certain cases
1266- Add `suspend`, `unsuspend` component lifecycle methods
1267- Improved router interface & internals
1268
1269## 2.0.0-alpha.121
1270
1271- Added `imba.serve` to `index.d.ts`
1272- Fix serious regression in router causing crash
1273
1274## 2.0.0-alpha.120
1275
1276- Parse `fn await something` correctly
1277- Improved router internals
1278- Add internal `Node#attachToParent` and `Node#detachFromParent` methods
1279- Preserve signed zero in output (Fixes #497)
1280- Make hmr reloading work with raw html assets
1281- Make `--no-hashing` cli option actually work
1282- Build html entrypoints in correct dist folder
1283- Add `imba create` command for creating project from template
1284
1285## 2.0.0-alpha.119
1286
1287- Add support for object spread syntax `{a:1, ...obj}`
1288- Fix regression causing crash when generating css
1289
1290## 2.0.0-alpha.118
1291
1292- Only call imba.commit when events are actually handled
1293
1294## 2.0.0-alpha.117
1295
1296- Alias `tabindex` to `tabIndex` in tag attributes.
1297- Fix scoping issue with css in tag trees
1298- Add experimental router aliases/redirects support
1299- Include preflight.css at root level of package
1300
1301## 2.0.0-alpha.116
1302
1303- Convert durations (`1s`, `150ms`, `60fps` etc) to ms-based numbers on compile-time
1304
1305## 2.0.0-alpha.115
1306
1307- Add `debounce` event modifier
1308
1309## 2.0.0-alpha.114
1310
1311- Add `no-minify` option to cli
1312- Always compile `html` namespaced attributes to raw `setAttribute`
1313
1314## 2.0.0-alpha.113
1315
1316- Add `__realname` as an unaltered alias for `__filename`
1317- Add support for selectors in tag tree - see [#490](https://github.com/imba/imba/issues/490)
1318
1319## 2.0.0-alpha.112
1320
1321- Show full version (including alpha number) in cli `imba --version`
1322
1323## 2.0.0-alpha.110
1324
1325- Add experimental `<tag autorender=interval>` inteface
1326- Add `?v=hash` to asset urls when filename hashing is turned off
1327- Add experimental support for `.html` entrypoints to `imba serve` and `imba build`
1328- Add `abs` and `rel` shorthands for `position` style property
1329- Fix memory leak when using `imba --watch`
1330
1331## 2.0.0-alpha.109
1332
1333- Support extending native tags `tag Purchase < form`
1334- Allow defining global tags without dash in name
1335
1336## 2.0.0-alpha.108
1337
1338- Fix issue with `@nth-of-type`, `@nth-child` selectors
1339- Improve internals of intersect event handling
1340
1341## 2.0.0-alpha.107
1342
1343- Add `asset.body` property for accessing raw content of assets
1344
1345## 2.0.0-alpha.106
1346
1347- Allow passing `rootMargin` options to intersect event
1348- Fix issue in router related to hash links
1349
1350## 2.0.0-alpha.105
1351
1352- Fix issue with css property order
1353
1354## 2.0.0-alpha.102
1355
1356- changelog and docs coming soon. see imba.io
1357
1358## 2.0.0-alpha.60
1359
1360- Add `route-to.exact` modifier to router
1361
1362## 2.0.0-alpha.59
1363
1364- Add support for numeric separator `100_000`
1365- Fix multiline regex parsing issues
1366
1367## 2.0.0-alpha.58
1368
1369- Allow setting innerHTML in SSR
1370
1371## 2.0.0-alpha.57
1372
1373- Update instantiation syntax in tests++
1374
1375## 2.0.0-alpha.56
1376
1377- Add `new Foo` instantiation syntax
1378- Deprecate `Foo.new` instantiation syntax
1379
1380## 2.0.0-alpha.55
1381
1382- Allow local/exportable tags (uppercased tag declarations)
1383- Allow interpolated tags inside strings in tag trees
1384
1385## 2.0.0-alpha.54
1386
1387- Allow getters and setters in object literals
1388
1389## 2.0.0-alpha.53
1390
1391- Allow media breakpoints in style selectors
1392- Added max-width breakpoints
1393
1394## 2.0.0-alpha.52
1395
1396- Fix issue with nested `$reference` selectors
1397- Allow router to work for regular links
1398- Add route-to.replace modifier
1399- Add route-to.sticky modifier
1400
1401## 2.0.0-alpha.51
1402
1403- No longer inheriting from CustomEvent as it is not supported in Safari
1404- Fix input data binding issue
1405- Added `before` and `after` style property modifiers
1406- Added `prefix` as alias for `before.content`
1407- Added `suffix` as alias for `after.content`
1408
1409## 2.0.0-alpha.50
1410
1411- Fix nested selector bug
1412- Fix focus-within modifier
1413- Add `:local` pseudo-class for only styling local children of component
1414- Support `$reference` in selectors for targeting local referenced elements
1415- Change `display` style property to accept multiple layout aliases
1416- Add 1-digit color aliases (blue900 -> blue9 etc)
1417
1418## 2.0.0-alpha.49
1419
1420- Allow border and border-(top|right|bottom|left) to accept a single color value
1421- Accept rgb/hsl/hex colors in text and border properties
1422
1423## 2.0.0-alpha.48
1424
1425- 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
1426- Added shorthand style aliases for border-_ and flex-_
1427
1428## 2.0.0-alpha.47
1429
1430- Added x, y, z, rotate, scale, scale-x, scale-y, skew-x, skew-y custom style properties
1431- Extended transition property to accept colors, styles, sizes as properties and custom easings
1432
1433## 2.0.0-alpha.46
1434
1435- Added experimental syntax for css/styling. See [#334](https://github.com/imba/imba/pull/362)
1436- Broke scoped css comment blocks until further notice
1437
1438## 2.0.0-alpha.45
1439
1440- Fix conditional rendering bug (#334)
1441- Changed event syntax from `<div :click.stop.{method()}>` to `<div @click.stop=method()>`
1442- Allow comments inside multiline tags
1443- Include left/right event key modifiers
1444- Improve resize and intersect events
1445- Always bind data when using `<tag[my-data]>` syntax
1446
1447## 2.0.0-alpha.44
1448
1449- Improved lifecycle methods for components
1450- Fix sourcemapping for env-flags
1451
1452## 2.0.0-alpha.43
1453
1454- Add syntax for element references `<div$reference>`
1455- Fix problem with missing ResizeObserver in safari
1456
1457## 2.0.0-alpha.42
1458
1459- Fixed webpack imba/loader issues with scoped css
1460- Add event wrapper for ResizeObserver
1461- Add experimental router code
1462- Add basic support for setting dom classes outside of templates
1463- Allow calling imba.mount with a function
1464- Rename #context api to $context
1465- Rename parentContext to $parent
1466
1467## 2.0.0-alpha.40
1468
1469- Introduce decorators with `@decorator` syntax. See [#334](https://github.com/imba/imba/pull/334)
1470- Allow declaring tag attributes. See [#335](https://github.com/imba/imba/pull/335)
1471- Shorthand `!` for invoking parenless methods (`object.mymethod!`)
1472- Implicit self is back (for good)
1473
1474## 2.0.0-alpha.0
1475
1476See [#263](https://github.com/imba/imba/issues/263) for an overview of changes