UNPKG

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