UNPKG

39.1 kBMarkdownView Raw
1# Changelog
2
3## 2.0.0-alpha.207
4
5* Don't try to implicitly return debugger statement
6
7* Improve compilation of `extend` statements for tooling
8
9## 2.0.0-alpha.206
10
11* Disallow iterating over falsy values using `for in`
12
13* Compile literal bigints correctly
14
15* Minor improvements to type definitions
16
17## 2.0.0-alpha.205
18
19* Support `for await ... of` syntax
20
21* Support tagged templates
22
23 Works like in plain js, but `{}` is still used for interpolation instead of `${}`.
24
25 ```imba
26 import md from 'tag-markdown'
27 const html = md`## Welcome to {name}`
28 ```
29
30* Add internal `#__patch__(props)` method for class instances to update fields
31
32* Stop shimming top-level await (delegates responsibility to esbuild)
33
34
35## 2.0.0-alpha.204
36
37* Fixed operator precedence for ternary expressions
38
39* Revert automatic `calc` wrapping for css values introduced in alpha 200
40
41 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.
42
43## 2.0.0-alpha.203
44
45* Fixed regression with negated breakpoint modifiers like `display@!600:none`
46
47## 2.0.0-alpha.202
48
49* Fixed performance regression for tag trees introduced in alpha 191
50
51* Fixed compilation of css properties wrapped in parenthesis
52
53* Make unresolved decorators resolve to `imba.@decorator`
54
55 ```imba
56 class Order
57 @lazy get lines
58 ...
59 ```
60
61 If `@lazy` is not found in the file above, the compiler will essentially include
62 `import {@lazy} from 'imba` when compiling.
63
64* Introduced experimental state management decorators
65
66 A minimal set of decorators heavily inspired by MobX that allows you to mark classes
67 and objects as observable, and run code upon changes. This feature will be kept under
68 wraps until it has been battle-tested.
69
70## 2.0.0-alpha.201
71
72* Fixed regression where css colors `rgb(0 0 0 / alpha)` would compile incorrectly
73
74## 2.0.0-alpha.200
75
76* Allow `@hotkey('*')` to listen to all hotkey events
77
78 This is perfect for disabling all other hotkeys in certain contexts.
79
80 ```imba
81 tag ConfirmDialog
82 # when this dialog is mounted - all hotkey handlers preceding
83 # it in the dom tree will be blocked by the `*` listener
84 <self @hotkey('*').global>
85 <button @hotkey('esc')> "Cancel"
86 <button @hotkey('enter')> "Ok"
87 ```
88
89* Automatically wrap style expressions in `calc()`
90
91 ```imba
92 css div width: calc(100vw - 40px)
93 # can now be written as
94 css div width: 100vw - 40px
95 ```
96
97* Make bind=data.property work for textarea when value is `undefined`
98
99* Allow nested parentheticals in css calc
100
101* Fixed issue where removing class names using `el.flags.remove` would not work
102
103* Made `@touch.flag` support selector in second argument to match `@event.flag`
104
105* Allow second argument to `el.flags.incr(flag, dur = 0)`
106
107 With this argument you can automatically decrement the flag after a certain duration.
108
109* Allow negated style modifiers
110
111 ```imba
112 css div
113 @!hover o:0.5 # div:not(:hover) { opacity: 0.5 }
114 @!md d:none # @media (max-width: 767px) { div { display:none } }
115 # also works for classes
116 css div
117 @.!disabled o:0.5 # div:not(.disabled){ opacity:0.5 }
118 ```
119
120## 2.0.0-alpha.199
121
122* Fix regression where content of `<teleport>` and `<global>` was not rendered (#643)
123
124## 2.0.0-alpha.198
125
126* Change how css specificity is forced in generated selectors
127
128 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.
129
130* Change css specificity for component rules
131
132 Selectors inside tag declarations are now compiled with a higher specificity than global selectors.
133
134 ```imba
135 tag App
136 # scoped selectors have higher precedence than global styles
137 css .selector d:block
138 ```
139
140* Fixed case where a generated class-name is added multiple times on elements
141
142## 2.0.0-alpha.197
143
144* Fixed issue with bracketless multiline object and certain operators
145
146 ```imba
147 let x = null
148 x ||=
149 one: 1
150 two: 2
151 # would previously compile incorrectly to x ||= {one: 1}
152 ```
153
154## 2.0.0-alpha.196
155
156* Introduced `@event.closest(sel)` modifier
157
158 Works like `@event.sel(selector)`, but checks for `target.closest(...)` instead of `target.matches(...)`.
159 In the cases where you want to just handle clicks that do _not_ match a selector you can negate the modifier using `.!closest(...)`.
160
161 ```imba
162 tag App
163 <self>
164 # all clicks outside of button tags
165 <div @click.!closest('button')>
166 <button> <span> "Click"
167 <p> "blabla"
168 ```
169
170## 2.0.0-alpha.195
171
172* Fixed compilation issue for functional tags without arguments
173
174* Throw error when trying to use bind on functional tags
175
176## 2.0.0-alpha.194
177
178* Improved syntax for functional tags
179
180 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.
181
182 ```imba
183 def List items
184 return if items.length == 0
185
186 <section>
187 <slot>
188 <ul> for item in items
189 <li> item.title
190
191 tag App
192 def head
193 <header> <slot> <h2> "Welcome"
194
195 <self>
196 <head()>
197 <List(data.newest)> <h2> "Newest posts"
198 <List(data.all).large> <h2> "All posts"
199 ```
200
201## 2.0.0-alpha.193
202
203* Fix issue where parts of runtime was incorrectly tree-shaked
204
205* Always resolve `node:*` imports as external
206
207* Include changelog.md in npm package
208
209## 2.0.0-alpha.191
210
211There 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;
212
213* Rename $key to key
214
215 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`.
216
217* Allow using any object as `<element key=...>` value
218
219 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.
220
221 ```imba
222 const items = [{title: "One"},{title: "Two"}]
223
224 tag App
225 <self> for item in items
226 # objects themselves can be used as keys now
227 <AppItem key=item data=item>
228 ```
229
230* New (improved) syntax for rendering functional components / tag trees
231
232 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)>`.
233
234 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.
235
236 ```imba
237 tag App
238 get body
239 <div> "This is body"
240
241 def list title, items
242 <section>
243 <h2> title
244 <ul> for item in items
245 <li> item.title
246
247 <self>
248 <( body )>
249 <( list 'Top', data.popular ).large [mt:2]>
250 <( list 'New', data.posts.slice(0,10) )>
251 ```
252
253* Log warnings to console when building/running without minification
254
255 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.
256
257* Allow instantiating elements w/o memoization using `new`
258
259 Imba will automagically allow any element (literal tag) in any method to be memoized.
260
261 ```imba
262 def wrap text
263 let div = <div.item> text
264 return div
265
266 imba.mount do <section>
267 <( wrap "One" )>
268 <( wrap "Two" )>
269 ```
270
271 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.
272
273 ```imba
274 def wrap text
275 let div = new <div.item> text
276 return div
277 ```
278
279* Allow non-global tag types in dynamic tag names
280
281 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.
282
283 ```imba
284 import {PostView,ArticleView} from './views'
285
286 const items = [
287 { type: Post, title: "My post"}
288 { type: Article, title: "My article"}
289 ]
290
291 tag App
292 <self>
293 for item in items
294 <{item.type} data=item>
295 ```
296
297* Only allow named elements inside `<self>`
298
299 Using named elements (`<div$myname>`) outside of self would previously introduce subtle bugs and conflicts. They are now only allowed inside of `<self>`.
300
301* Changed css specificity
302
303 Styles declared in tag declaration body now has lower specificity than class selectors.
304
305 ```imba
306 css .warn hue:red
307 css .large p:4 fs:lg
308
309 tag Button
310 css p:2 fs:sm hue:blue
311
312 # styles from classes take precedence
313 <Button.warn.large>
314 ```
315
316* Scoped selectors no longer applies to self
317
318 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.
319
320 ```imba
321 tag Button
322 css bg:blue2
323 css .warn bg:red2
324 css &.large fs:lg
325
326 <self.warn.large> "Still blue bg - but large"
327 ```
328
329* Add `declare` keyword for declaring fields (with type annotations) without generating any code for that field
330
331 ```imba
332 class Foo
333 declare a\number
334 ```
335
336* Allow multiline conditionals when lines start with `and`,`or`,`||`, or `&&`
337
338 This is a temporary solution for a larger challenge. It simply ignores new-lines whenever your line starts with these operators.
339
340 ```imba
341 if condition
342 and test
343 or force
344 return ...
345 ```
346
347* Allow third argument in `for in` loops referencing length
348
349 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`.
350
351 ```imba
352 for member,index,len in list
353 # len refers to the length of the iterable list
354 if index == len - 1
355 yes # this is the last element
356 ```
357
358* Exposed `imba.hotkeys.humanize` for converting hotkey combos to readable shortcuts
359
360* Exposed `imba.hotkeys.htmlify` for converting hotkey combos to readable shortcuts as html
361
362
363## 2.0.0-alpha.190
364
365* Fixed regression related to implicit parenthesis in tag trees
366
367* Renamed `@hotkey.capture` to `@hotkey.force`
368
369## 2.0.0-alpha.189
370
371* Introduced `@hotkey.repeat` modifier
372
373 When a user presses a key and then keeps holding it, keydown/keypress
374 events will be generated every n milliseconds. For hotkeys you usually
375 only want to trigger once when the user press the combination.
376
377 If you want the handler to keep firing while user holds down the keys
378 you can now use the `.repeat` modifier:
379
380 ```imba
381 # will only toggle when pressing space, no matter how long you
382 # keep it pressed.
383 <div @hotkey('space')=togglePlayback>
384 # holding the right arrow will call fastForward repeatedly
385 <div @hotkey('right').repeat=fastForward>
386 ```
387
388* Changed rules for implicit parenthes / calling in tag trees
389
390 Indented code under a tag-tree will no longer be compiled as an invocation.
391
392 ```imba
393 <div> data.name
394 "something"
395 if data.name
396 "something"
397 ```
398
399 The code above would previously compile to div `data.name("something")`. Now
400 indentation in tag trees will behave like they do in statements like if/for/while etc.
401 This fixes #630, so you can now add css blocks like this:
402
403 ```imba
404 <div> data.name
405 css d:block # style for the div
406 ```
407
408* Added `@first-child` and `@last-child` css modifiers
409
410 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.
411
412* Fixed issue with nested loops in tag trees
413
414 It is now possible to use nested loops without wrapping the inner loops in a fragment.
415
416 ```imba
417 <div>
418 for item in data.items
419 for label in item.labels
420 <div> label
421 ```
422
423* Allow declaring variables and global tags with the same name
424
425 Global web components should not be registered as regular variables.
426 Previously the compiler would throw an error if `tag app` and `let app = ...`
427 were declared in the same file.
428
429* Allow optional chaining with dynamic keys - #638
430
431 ```imba
432 user..[key]
433 ```
434
435* Mark imported SVGs as @__PURE__
436
437 This allows efficient tree-shaking so that one can include all icons from a collection
438 and only bundle the ones that are used.
439
440 ```imba
441 import * as icons from 'imba-codicons'
442
443 <svg src=icons.volume-up>
444 # you get completions and previews for all icons, but only volume-up
445 # will be bundled in your code now
446 ```
447
448* Don't round x,y in `@touch.reframe` and `@touch.fit` by default (#639)
449
450## 2.0.0-alpha.187
451
452* Call `dehydrate` on compononents when rendering components from the server.
453
454* Updated type declarations.
455
456## 2.0.0-alpha.186
457
458* Don't add html class name for named elements
459
460 Previously when naming an element like `<div$title> ...`, imba would automatically
461 add a `title` class name to the element. This can lead to confusing issues. If you
462 have used this undocumented behaviour previously you just need to add the class
463 yourself, like `<div$title.title>`.
464
465* Introduced `@mouse.mod` modifier
466
467 Since Mac and Windows/Linux use different keyboard modifiers for most standard actions
468 (ctrl+c,ctrl+s,ctrl+click) vs (⌘c,⌘s,⌘+click) etc, it makes sense to have an event
469 modifier that takes care of checking the platform. `@mouse.mod` will return true of
470 ⌘ is pressed on mac, and Ctrl is pressed on all other platforms.
471
472 ```imba
473 <div @click.mod.stop=openInNewWindow @click=openHere>
474 ```
475
476* Fixed bug in `@event.throttle` modifier
477
478## 2.0.0-alpha.183
479
480- Remove unneeded class names on tags when building
481
482## 2.0.0-alpha.182
483
484- Fixed issues with using event modifiers with external imba library
485
486## 2.0.0-alpha.177
487
488- Added type declarations into typings/
489
490## 2.0.0-alpha.176
491
492- Deprecated `@touch.moved-dir`
493
494 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.
495
496 ```imba
497 <div @touch.moved-left(4px)> # before
498 <div @touch.moved(4px,'left')> # after
499 ```
500
501- Renamed style property `tint` to `hue`
502
503 Hue is a better name for the newly introduced `tint` style property.
504
505 ```imba
506 # hue can be set to any named color from the imba color palette
507 <div[hue:orange]>
508 <h1[color:hue7]> # refer to a shade/tint of the aliased color
509 ```
510
511- Refactored event modifiers
512
513 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:
514
515 ```imba
516 extend class KeyboardEvent
517
518 def @f1
519 return keyCode == 112
520 ```
521
522- Changed behavior of `@event.throttle` modifier
523
524 `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.
525
526 ```imba
527 # handler will be called immediately upon scrolling and keep emitting
528 # every 100ms until there are no more scroll events.
529 <div @scroll.throttle(100ms)=handler>
530
531 # So, clicking this button twice will trigger once immediately,
532 # and then again after 1 second. Previously the second click would
533 # never trigger.
534 <div @click.throttle(1s)=handler>
535 ```
536
537- Introduced `@event.cooldown` modifier
538
539 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`.
540
541 ```imba
542 # So, clicking this button twice will trigger once immediately, and
543 # the next click will be ignored as long as it happens less than a second later
544 <div @click.cooldown(1s)=handler>
545 ```
546
547- Allow negated event modifiers
548
549 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.
550
551 Ie. `<div @click.!shift=...>` would only trigger if shiftKey is _not_ pressed.
552
553 ```imba
554 # Only call handler if shiftKey is NOT pressed
555 <div @click.!shift=handler>
556
557 # Only call handler if target does NOT match the selector
558 <div @click.!sel('.active')=handler>
559 ```
560
561- Introduced `@mouse.left`, `@mouse.middle`, and `@mouse.right` modifiers
562
563 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.
564
565 ```imba
566 # Only call handler if the middle mouse button was pressed
567 <div @click.middle=handler>
568
569 # Only start touch handling if the right mouse button was pressed
570 <div @touch.right=handler>
571 ```
572
573- Introduced `@intersect.flag` modifier
574
575 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.
576
577 ```imba
578 # the html class showing will be present on div
579 # whenever it is intersecting with the viewport
580 <div @intersect.flag('showing')>
581 ```
582
583- Introduced `@touch.end` modifier
584
585 The `end` guard breaks unless the touch is in its ending state.
586
587 ```imba
588 # handler is only called at the end of the touch
589 <div @touch.end=handler>
590 # handler is only called at the end of the touch if pointer moved
591 <div @touch.moved.end=handler>
592 ```
593
594- Introduced `@touch.hold(dur=1000ms)` modifier
595
596 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.
597
598 ```imba
599 # handler is only called once the touch has been held for 1000ms
600 <div @touch.hold=handler>
601 # handler only called if ctrl was pressed and touch held for 250ms
602 <div @touch.ctrl.hold(250ms)=handler>
603 ```
604
605
606- Introduced `@touch.apply(target,xprop='x',yprop='y')` modifier
607
608 Like `@touch.sync` but just setting the x,y values on an object directly instead of adding to the previous values.
609
610 ```imba
611 const obj = {}
612 # apply is essentially shorthand for setting properties:
613 <div @touch.apply(obj)>
614 <div @touch=(obj.x = e.x, obj.y = e.y)>
615 ```
616
617
618- Added `@event.key(keyOrCode)` modifier for keyboard events
619
620 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.
621
622 ```imba
623 # Only trigger if F1 is pressed (event.keyCode==112)
624 <div @keydown.key(112)=handler>
625 ```
626
627 If you supply a string it will compare it against KeyboardEvent.key.
628
629 ```imba
630 # Only trigger if PrintScreen is pressed (event.key=='PrintScreen')
631 <div @keydown.key('PrintScreen')=handler>
632 ```
633
634- Changed behavior of `@touch.moved` modifier
635
636 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.
637
638 ```imba
639 # If user moves more than 10px up/down before left/right
640 # the touch will not be handled
641 <div @touch.moved-x(10px)=draghandle>
642 ```
643
644- Improved behaviour of `@touch` and `@click` events
645
646 `@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.
647
648 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.
649
650 ```imba
651 # button click is triggered onless touch is held more than 500ms
652 <li @touch.hold(500ms)=draghandle> <button @click=handle>
653 ```
654
655- Improved behaviour of `@touch` and scrolling on touch devices
656 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.
657
658 Scrolling is disabled by the `prevent` modifier, an activated `moved` modifier or activated `hold` modifier.
659
660 ```imba
661 # Scrolling will now work fine when touching the div and flicking up/down.
662 # Only if the user holds still on the element for 500ms will scrolling and
663 # default behavior be prevented.
664 <div @touch.hold(500ms)=draghandler>
665 ```
666
667- Add support for additional file extensions in bundler (webm, weba, avi, mp3, mp4, m4a, mpeg, wav, ogg, ogv, oga, opus, bmp)
668
669## 2.0.0-alpha.175
670- Fix: `@in` transitions for nested elements works
671- Experimental support for tweening from/to implicit width/height in transitions
672- Experimental `@resize.css` modifier to automatically enable size units
673- Allow variables in color opacity like `color:blue4/$alpha`
674- Experimental support for `tint:colorname` and using `tint0-9` colors in styles
675
676## 2.0.0-alpha.174
677- Named elements (`<div$myname>`) exist immediately in components
678- Fix: Spread operator works for any expression in objects
679- Fix: Make sure ::before/after comes last in selectors with other pseudo-classes>
680- Fix: Allow symbol keys in `prop/attr #my-sym-key`
681
682## 2.0.0-alpha.173
683
684- Fix: Allow binding tag properties to symbol identifiers
685- Report correct location for "Cannot redeclare variable" error (#114)
686- Experimental support for `@hotkey` events
687- Fix: Don't run `imba.commit` on unhandled events>
688- Added `@trusted` event guard
689- Added `@trap` event modifier
690
691## 2.0.0-alpha.172
692
693- Fix: Rendering list inside conditional
694- Support css blocks inside conditionals in tag trees
695- Warn about interpolated style values outside of tag trees
696- Improved specificity for nested css rules
697
698## 2.0.0-alpha.171
699
700- Fix: Make `<global @resize>` work correctly
701- Fix: Variable resolution for `let item = do ... item()`
702- Fix: Allow ternary in tag trees
703- Fix: Allow `condition && <tag>` in tag trees
704- Fix: Ternary parsing `cond ? <div> "a" : "b"`
705
706## 2.0.0-alpha.170
707
708- Added `@in` style modifier for specifying in-only transitions
709- Renamed transition hooks to `transition-(in|out)-(end|cancel)`
710- Using `<button bind=prop>` without a value acts like `<button bind=prop value=yes>`
711
712## 2.0.0-alpha.169
713
714- Fix: Various dom regressions in SSR
715- Updated default ease duration to 300ms
716
717## 2.0.0-alpha.168
718
719- Use setAttribute('class') under the hood for svg elements
720- Added `#afterVisit`, `#beforeReconcile`, `#afterReconcile` hooks
721- Added experimental easing via `<my-element ease>`, with element hooks
722 `#ease-enter`, `#ease-entered`, `#ease-enter-cancel`, and
723 `#ease-exit`, `#ease-exited`, `#ease-exit-cancel`
724- Added `ease/e`,`ease-opacity/eo`,`ease-transform/et` and `ease-colors/ec`
725 style properties for experimental easing feature
726- Fix: Passing slots into child components (#607)
727- Allow using setters on `#context`
728
729## 2.0.0-alpha.167
730
731- Add support for generic media selectors via `@media(some-media) ...`
732- Fix: Interpolated numeric value for `rotate:{val}` works i FF
733- Add @all and @speech style modifiers (for @media all/speech)
734- Fix: Allow empty css selectors
735- Fix: Rebuilt prebuilt imba.mjs for web
736
737## 2.0.0-alpha.166
738
739- Add experimental support for class decorators
740- Fix: Apply display:block to global tags without dashed name
741- Change: `inset:*` style shorthand sets `position:absolute`
742- Added `<teleport to=(sel/element)>` component (#606) by @haikyuu
743
744## 2.0.0-alpha.165
745
746- Reorganize prebuilt files for jspm support
747
748## 2.0.0-alpha.157
749
750- Add jspm configuration in package.json
751
752## 2.0.0-alpha.156
753
754- Add #**inited** hook for class instance initialization
755- All custom components defaults to display:block
756- Fix: Don't inject hmr.js script into html assets when building
757- Fix: Generate html files in public directory
758
759## 2.0.0-alpha.155
760
761- Allow `$envvar$` as first argument of implicit calls (#571)
762- Allow `super` in `extend class/tag`
763- Add experimental support for `extend someObject`
764- Variable / parameter named `self` used for implicit self in scope
765- Throw error for non-self tags in tag declaration body
766- Allow accessing array elements from end with literal numbers like `array[-1]`
767
768## 2.0.0-alpha.154
769
770- Include precompiled browser-version of library to make it work with jspm
771- Fix issue with html parser
772- Fix issue with `<input value=...>` not working in certain cases
773- Add optional static file serving for `imba serve`
774
775## 2.0.0-alpha.153
776
777- Fix issue with prop watchers not compiling correctly
778
779## 2.0.0-alpha.152
780
781- Correctly parse comments inside multi-line tag literals
782- Readable names for generated (internal) variables
783- Tag literals act as block scopes for variable declarations
784
785## 2.0.0-alpha.151
786
787- Fix interpolated style values in tag-tree selectors
788
789## 2.0.0-alpha.150
790
791- Remove charset:utf8 option from esbuild
792
793## 2.0.0-alpha.149
794
795- Fix regression with font-size presets (#569)
796
797## 2.0.0-alpha.148
798
799- Allow declaring return type via `def method\returntype arg1, ...`
800- Fix crash when inlining sourcemaps on node 16+ (#567)
801- Overhaul `extend class` code generation for better tooling support
802- BREAKING: Compile predicate identifiers `name?` to unicode `nameΦ` and
803 dashed identifiers `one-two-three` to `oneΞtwoΞthree` to avoid potential
804 naming collisions and improve tooling support. If you previously relied on
805 dashed identifiers converting to camelCase while interacting with an
806 external library - this will no longer work. Ie `window.add-event-listener`
807 will not work since `window` does not have an `addΞeventΞlistener` property.
808 See [#568](https://github.com/imba/imba/pull/568) for more info.
809
810## 2.0.0-alpha.147
811
812- Fix regression resulting in nested assets being rebuilt in incorrect folder
813
814## 2.0.0-alpha.146
815
816- Added `--asset-names` and `--html-names` build options for controlling the generated paths
817- Tweaked format of generated manifest
818- Fixed issue with generated stylesheets being blank
819- Automatically include Link preload headers when serving through imba
820- Allow all valid RegExp flags in literal regexes
821- Generate class augmentations (`extend class/tag`) in tsc mode
822- Use setAttribute for non-idl element attributes
823
824## 2.0.0-alpha.145
825
826- Fix bundler crash when parsing html entrypoints with doctype
827- Fix regression where imba `-w` would not detect changes in unhashed outputs
828
829## 2.0.0-alpha.144
830
831- Experimental `<global>` slot to add global listeners from inside tags
832- `@event.outside` modifier that works in conjunction with `<global>` slot
833
834## 2.0.0-alpha.143
835
836- Remove use of String#replaceAll (unsupported before node 15.0.0)
837
838## 2.0.0-alpha.142
839
840- Don't crash when loading tags with `@intersect` listener on server
841- Fix svg parsing issue for large svg files (#543)
842- Fix incorrect dehydration when creating custom element on client directly via document.createElement
843- Inject asset imports in correct order relative to regular imports
844- Add support for `.eot` font file reference in stylesheets
845- Auto-generate combined stylesheet for server and client accessible via `<style src='*'>`
846- Stop auto-injecting styles for referenced assets when rendering `<html>` on server
847
848## 2.0.0-alpha.141
849
850- Support webp,avif,apng,gif images in bundler
851- Fixed missing first character in non-minified css output
852- Expose imba.commit++ on globalThis
853- Fix compilation issue with `if false` inside tag tree
854- Respect custom palettes in imbaconfig.json when building
855- Allow aliasing palettes in imbaconfig.json
856- Support inlined svg elements on server
857
858## 2.0.0-alpha.140
859
860- Improve output from `imba create`
861
862## 2.0.0-alpha.139
863
864- Stop bundler from crashing when generating worker
865
866## 2.0.0-alpha.138
867
868- Fix incorrect sourcemap paths with esbuild 0.9.7
869- Let server fail gracefully when accessing invalid asset urls
870
871## 2.0.0-alpha.137
872
873- Fix relative path for mac/linux
874
875## 2.0.0-alpha.136
876
877- Raise default browser-target from `edge16` to `edge18` due to esbuild warning
878- Make `imba create` executable on mac (#550)
879- Set default esbuild target to es2019 to transpile optional chaining++
880- Avoid using `-ad` in generated class-names due to adblockers (#531)
881
882## 2.0.0-alpha.135
883
884- Minor improvements to sourcemapping
885- Fixed `import type default` compilation
886
887## 2.0.0-alpha.133
888
889- Improved sourcemapping
890- Improved support for type annotations
891- Fixed crash in bundler
892
893## 2.0.0-alpha.132
894
895- Improve windows compatibility for bundler and `imba create`
896
897## 2.0.0-alpha.131
898
899- Serve hashed (cacheable) assets with `Cache-Control: max-age=31536000`
900- Remove `?v=xxxxxx` suffix from asset references generated with `--no-hashing`
901- Allow `"external":["builtins",...]` to externalize builtin node modules for other platforms than `node`
902- Add `-H` alias for the `--no-hashing` option
903
904## 2.0.0-alpha.130
905
906- Upgraded esbuild to v0.9.2
907- Automatically polyfill built-in node modules like buffer,stream,crypto etc when compiling for browser. Still experimental.
908
909## 2.0.0-alpha.129
910
911- Prevent `touchstart` event on iPad Pro in `@touch.prevent`
912- Fixed text in svg `<text>` elements (#482)
913
914## 2.0.0-alpha.128
915
916- Fixed image asset urls in SSR
917- Make bundler work with client entrypoint without any styles
918- Dispatch bubbling `resized` event from ResizeObserver
919
920## 2.0.0-alpha.127
921
922- Overhauled `@touch` to work be more consistent on touch devices
923- Add `@touch.round` event modifier
924
925## 2.0.0-alpha.126
926
927- Prevent `touchstart` event on iOS in `@touch.prevent`
928
929## 2.0.0-alpha.125
930
931- Make custom events cancelable by default
932- Make `@-webkit-scrollbar-*` style selectors work
933- Make core event modifiers work for `@touch` event
934- Fix issue where text selection did not work after `@touch`
935- Make `@touch.prevent` prevent scrolling via `touch-action:none`
936- Add `@important` style modifier
937
938## 2.0.0-alpha.124
939
940- Update built-in colors to follow Tailwind 2.0
941- Allow interpolating colors in runtime `<div[c:{mycolor}]>`
942- Fix deep selector `>>>` with multiple nested children
943
944## 2.0.0-alpha.123
945
946- Fix router crashing when event-related runtime code is tree-shaken
947
948## 2.0.0-alpha.122
949
950- Fix issue with type inferencing tags in certain cases
951- Add `suspend`, `unsuspend` component lifecycle methods
952- Improved router interface & internals
953
954## 2.0.0-alpha.121
955
956- Added `imba.serve` to `index.d.ts`
957- Fix serious regression in router causing crash
958
959## 2.0.0-alpha.120
960
961- Parse `fn await something` correctly
962- Improved router internals
963- Add internal `Node#attachToParent` and `Node#detachFromParent` methods
964- Preserve signed zero in output (Fixes #497)
965- Make hmr reloading work with raw html assets
966- Make `--no-hashing` cli option actually work
967- Build html entrypoints in correct dist folder
968- Add `imba create` command for creating project from template
969
970## 2.0.0-alpha.119
971
972- Add support for object spread syntax `{a:1, ...obj}`
973- Fix regression causing crash when generating css
974
975## 2.0.0-alpha.118
976
977- Only call imba.commit when events are actually handled
978
979## 2.0.0-alpha.117
980
981- Alias `tabindex` to `tabIndex` in tag attributes.
982- Fix scoping issue with css in tag trees
983- Add experimental router aliases/redirects support
984- Include preflight.css at root level of package
985
986## 2.0.0-alpha.116
987
988- Convert durations (`1s`, `150ms`, `60fps` etc) to ms-based numbers on compile-time
989
990## 2.0.0-alpha.115
991
992- Add `debounce` event modifier
993
994## 2.0.0-alpha.114
995
996- Add `no-minify` option to cli
997- Always compile `html` namespaced attributes to raw `setAttribute`
998
999## 2.0.0-alpha.113
1000
1001- Add `__realname` as an unaltered alias for `__filename`
1002- Add support for selectors in tag tree - see [#490](https://github.com/imba/imba/issues/490)
1003
1004## 2.0.0-alpha.112
1005
1006- Show full version (including alpha number) in cli `imba --version`
1007
1008## 2.0.0-alpha.110
1009
1010- Add experimental `<tag autorender=interval>` inteface
1011- Add `?v=hash` to asset urls when filename hashing is turned off
1012- Add experimental support for `.html` entrypoints to `imba serve` and `imba build`
1013- Add `abs` and `rel` shorthands for `position` style property
1014- Fix memory leak when using `imba --watch`
1015
1016## 2.0.0-alpha.109
1017
1018- Support extending native tags `tag Purchase < form`
1019- Allow defining global tags without dash in name
1020
1021## 2.0.0-alpha.108
1022
1023- Fix issue with `@nth-of-type`, `@nth-child` selectors
1024- Improve internals of intersect event handling
1025
1026## 2.0.0-alpha.107
1027
1028- Add `asset.body` property for accessing raw content of assets
1029
1030## 2.0.0-alpha.106
1031
1032- Allow passing `rootMargin` options to intersect event
1033- Fix issue in router related to hash links
1034
1035## 2.0.0-alpha.105
1036
1037- Fix issue with css property order
1038
1039## 2.0.0-alpha.102
1040
1041- changelog and docs coming soon. see imba.io
1042
1043## 2.0.0-alpha.60
1044
1045- Add `route-to.exact` modifier to router
1046
1047## 2.0.0-alpha.59
1048
1049- Add support for numeric separator `100_000`
1050- Fix multiline regex parsing issues
1051
1052## 2.0.0-alpha.58
1053
1054- Allow setting innerHTML in SSR
1055
1056## 2.0.0-alpha.57
1057
1058- Update instantiation syntax in tests++
1059
1060## 2.0.0-alpha.56
1061
1062- Add `new Foo` instantiation syntax
1063- Deprecate `Foo.new` instantiation syntax
1064
1065## 2.0.0-alpha.55
1066
1067- Allow local/exportable tags (uppercased tag declarations)
1068- Allow interpolated tags inside strings in tag trees
1069
1070## 2.0.0-alpha.54
1071
1072- Allow getters and setters in object literals
1073
1074## 2.0.0-alpha.53
1075
1076- Allow media breakpoints in style selectors
1077- Added max-width breakpoints
1078
1079## 2.0.0-alpha.52
1080
1081- Fix issue with nested `$reference` selectors
1082- Allow router to work for regular links
1083- Add route-to.replace modifier
1084- Add route-to.sticky modifier
1085
1086## 2.0.0-alpha.51
1087
1088- No longer inheriting from CustomEvent as it is not supported in Safari
1089- Fix input data binding issue
1090- Added `before` and `after` style property modifiers
1091- Added `prefix` as alias for `before.content`
1092- Added `suffix` as alias for `after.content`
1093
1094## 2.0.0-alpha.50
1095
1096- Fix nested selector bug
1097- Fix focus-within modifier
1098- Add `:local` pseudo-class for only styling local children of component
1099- Support `$reference` in selectors for targeting local referenced elements
1100- Change `display` style property to accept multiple layout aliases
1101- Add 1-digit color aliases (blue900 -> blue9 etc)
1102
1103## 2.0.0-alpha.49
1104
1105- Allow border and border-(top|right|bottom|left) to accept a single color value
1106- Accept rgb/hsl/hex colors in text and border properties
1107
1108## 2.0.0-alpha.48
1109
1110- 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
1111- Added shorthand style aliases for border-_ and flex-_
1112
1113## 2.0.0-alpha.47
1114
1115- Added x, y, z, rotate, scale, scale-x, scale-y, skew-x, skew-y custom style properties
1116- Extended transition property to accept colors, styles, sizes as properties and custom easings
1117
1118## 2.0.0-alpha.46
1119
1120- Added experimental syntax for css/styling. See [#334](https://github.com/imba/imba/pull/362)
1121- Broke scoped css comment blocks until further notice
1122
1123## 2.0.0-alpha.45
1124
1125- Fix conditional rendering bug (#334)
1126- Changed event syntax from `<div :click.stop.{method()}>` to `<div @click.stop=method()>`
1127- Allow comments inside multiline tags
1128- Include left/right event key modifiers
1129- Improve resize and intersect events
1130- Always bind data when using `<tag[my-data]>` syntax
1131
1132## 2.0.0-alpha.44
1133
1134- Improved lifecycle methods for components
1135- Fix sourcemapping for env-flags
1136
1137## 2.0.0-alpha.43
1138
1139- Add syntax for element references `<div$reference>`
1140- Fix problem with missing ResizeObserver in safari
1141
1142## 2.0.0-alpha.42
1143
1144- Fixed webpack imba/loader issues with scoped css
1145- Add event wrapper for ResizeObserver
1146- Add experimental router code
1147- Add basic support for setting dom classes outside of templates
1148- Allow calling imba.mount with a function
1149- Rename #context api to $context
1150- Rename parentContext to $parent
1151
1152## 2.0.0-alpha.40
1153
1154- Introduce decorators with `@decorator` syntax. See [#334](https://github.com/imba/imba/pull/334)
1155- Allow declaring tag attributes. See [#335](https://github.com/imba/imba/pull/335)
1156- Shorthand `!` for invoking parenless methods (`object.mymethod!`)
1157- Implicit self is back (for good)
1158
1159## 2.0.0-alpha.0
1160
1161See [#263](https://github.com/imba/imba/issues/263) for an overview of changes