2.0.0-alpha.11 polyester-golem (2016-12-08)
NOTE: Be sure to delete your previous install of @angular/material
and install it fresh, as
npm
sometimes doesn't see that there is a more recent alpha release.
- a11y: improved accessibility in high contrast mode (#1941) (5cf7d17), closes #421 #1769
- button: ensure icons are aligned vertically. (#1736) (d3a50b3), closes #1093
- button: improved tap responsiveness on mobile (#1792) (4183fbc), closes #1316
- button: remove
disabled
attribute when disabled value is false for MdAnchor (#1789) (716372b) - checkbox: fix native checked not being checked when MdCheckbox initial checked value is true (#2055) (3fd3117)
- checkbox, input, radio, slide-toggle: implement setDisabledState from ControlValueAccessor (#1750) (77a960c), closes #1171
- dialog: add border radius (#1872) (6aa7e22), closes #1868
- dialog: avoid subpixel rendering issues and refactor GlobalPositionStrategy (#1962) (1ea6d34), closes #932
- dialog: backdrop not being removed if it doesn't have transitions (#1716) (accab20), closes #1607
- elevation: change elevations to match spec (#1857) (c2597b6)
- interactivity-checker: improve robustness of isTabbable (#1950) (4b7e52d)
- list: prevent list item wrapper elements from collapsing (#2075) (27f9c99), closes #2012
- list-key-manager: prevent the default keyboard actions (#2009) (a8355e4)
- menu: reposition menu if it would open off screen (#1761) (7572e34)
- overlay: prevent blurry connected overlays (#1784) (303dd69)
- overlay-directives: update offsets if they change after overlay creation (#1981) (b36db15)
- radio: fix radio group behavior on change (#1735) (bbc5f6a)
- ripple: Always remove ripple after a certain period (#1915) (62cc830)
- ripple: don't create background div until ripple becomes enabled (#1849) (d7a54ef)
- ripple: Fix the ripple position when page is scrolled (#1907) (dd508ea)
- sidenav: resolve promise as false rather than (#1930) (7816752)
- slider: emit change event after updating value accessor (#1901) (8caf9a6)
- slider: support for RTL and invert (#1794) (5ac29dd)
- spinner: animation not being cleaned up when used with AoT (#1838) (83de14f), closes #1283
- tab-link: avoid potential memory leak (#1877) (e332f15)
- tabs: tabs should update when tabs are added or removed (#2014) (dfc580d)
- tooltip: check tooltip disposed on animation hidden (#1816) (9c0d82a)
- tooltip: don't show tooltip if message is empty or not present (#2081) (2701aae), closes #2078
- tooltip: throw a better error when an invalid position is passed (#1986) (539e44e)
- select initial version of md-select (too many commits to list)
- textarea: add md-autosize directive (this will be more useful once the md-input refactoring is complete) (#1846) (9ec17c0)
- tabs: paginate tab header when exceeds width (#2084) (92e26d7)
- tabs: add ripples to the tab group and nav bar links (#1700) (b9fe75a)
- tabs: animate tab change, include optional dynamic height (#1788) (f6944e4)
- tabs: md-stretch-tabs (#1909) (78464a2), closes #1353
- button-toggle: add option for vertical toggle groups (#1936) (cb0d6fc), closes #1892
- dialog: add configurable width, height and position (#1848) (bc6cf6e), closes #1698
- dialog: add the ability to close all dialogs (#1965) (b2999c9)
- focus-trap: add the ability to specify a focus target (#1752) (72ac7a0), closes #1468
- icon: added color attribute to md-icon for icon theming (#1896) (da5febc)
- overlay: emit position change event (#1832) (b79c953)
- overlay: support min width and min height (#2063) (a695574)
- overlay-directives: attach and detach events (#1972) (a5eab75)
- overlay-directives: support fallback positions (#1865) (aa472a0)
- sidenav: emit event when backdrop is clicked (#1638) (93807ed), closes #1427
- sidenav: focus capturing (#1695) (b9c3304)
- slider: keyboard support (#1759) (13b7dd0)
- slider: vertical mode (#1878) (deb940f)
- snackbar: add onAction to snackbar ref (#1826) (a40cae9)
- snackbar: add timeout for snackbar (#1856) (6ce6396)
- tooltip: show tooltip on longpress; remove delay on mouseleave (#1819) (1552d70)
- a11y: add wrap mode to key manager (#1796) (3d4abac)
2.0.0-alpha.10 mithril-hoverboard (2016-11-10)
-
MdSnackbarConfig
no longer takes aViewContainerRef
as a contructor argument because theViewContainerRef
is now optional. -
Tabs no longer use an
md-tab-content
directive. Instead, the non-label content of the tab is used as its content. Labels can also be specified via attribute, so the tabs can now be given as:<md-tab-group> <md-tab label="Overview"> This is the overview tab </md-tab> <md-tab label="Details"> This is the details tab </md-tab> </md-tab-group>
You can still use
md-tab-label
to provide a label template.
- tab-nav-bar: new component! Provides a tab-bar for use with a router-outlet (#1589) (572b36e)
- a11y: manager for list keyboard events (#1599) (95b2a34)
- checkbox: add color attribute. (#1463) (333b11e)
- checkbox: add ripple (#1611) (ef4c3c9)
- dialog: add disableClose option (#1678) (93f8e04), closes #1419
- dialog: allow for an object literal to be passed on init (#1679) (f525db1)
- dialog: don't require a ViewContainerRef (#1704) (f59030e)
- menu: add animations (#1685) (7fcf511)
- menu: allow menu-trigger to take a menu interface. (#1564) (96d196a), closes #1560
- menu: support icons (#1702) (982cdaa)
- overlay: add custom classes for backdrop (#1532) (0b54668)
- overlay: set overlay size (#1583) (ffbc295)
- overlay: support all overlay config properties (#1591) (6f322cf)
- overlay: support custom offsets (#1660) (1738d24)
- overlay: support rtl in overlays (#1593) (b56f520)
- radio: add ripple (#1553) (d83b3e0)
- slider: fire change event (#1618) (780a654)
- slider: implement ControlValueAccessor setDisabledState (#1603) (437ec8e)
- snack bar: add enter and exit animations. (#1320) (6df29dc)
- snackbar: don't require a ViewContainerRef (#1783) (9115538)
- tabs: simplify api (#1645) (ea6c817)
- textarea: initial md-textarea. Does not yet support auto-size. (#1562) (aff22e5)
- tooltip: add tooltip animations (#1644) (52582f4)
- aot: export dialog/snackbar containers through index (#1378) (bb61928)
- aot: fix aot error w/ live announcer (#1355) (276d07d)
- button: Changed button corner radius from 3px to 2px (#1441) (ec48b34)
- button: set vertical alignment for md-button and md-raised-button (#1565) (f10ac7c)
- button-toggle: add exportAs (#1528) (d2c288d)
- button-toggle: disable user-select in button-toggle (#1720) (83f6efc)
- checkbox: disable for all non-false values (#1631) (80491a9)
- checkbox: prevent checkbox being squished (#1713) (6601949)
- checkbox: vertically align for when there's no text (#1721) (7fd0fcd)
- gestures: don't clobber native drag events (#1458) (b09465c) (#1744) (4af3cd3), closes #1025
- input: correctly position md-hint in IE11 when position start (#1674) (ecefb89)
- input: remove invalid aria-target attribute (#1513) (601c036), closes #929
- input: set line-height to normal (#1734) (f1f660e)
- list: ensure multi-line lists expand to fill space (#1466) (e7b872a)
- list: prevent default black border from applying (#1548) (4086b32), closes #1336
- list: set flex-shrink for avatar (#1464) (5a528aa), closes #1403
- menu: improve a11y for screenreaders (#1715) (267e323)
- menu: make menu open idempotent (#1478) (a5b3296)
- menu: properly handle spacebar events (#1533) (cfe3e98), closes #1175
- menu: update menu to use overlay rtl (#1687) (2b913de)
- menu: update to use overlay backdrop (#1534) (add0d23)
- overlay: ensure container covers entire screen (#1634) (af39236)
- overlay: fix connected position calculation while scrolled (#1732) (2de461e)
- overlay: not taking up entire viewport if body is scrollable (#1661) (16cbbab), closes #1633
- overlay: raise z-index for overlay-container (#1614) (8f50c35)
- portal: cleanup PortalHost on directive destroy (#1703) (7e08468)
- progress-bar: bar being thrown off by parent's text-align (#1717) (309d54c), closes #1165
- progress-circle: allow value to be set to 0 (#1536) (25c7fd5)
- progress-spinner: animation expanding parent element (#1742) (4203d09), closes #1259
- radio: only call change callback with user input (#1521) (920c875)
- radio: only emit change event on user interaction (#1680) (0d552f5)
- radio: only fire group change if there is a group (#1622) (065469a)
- radio: Uncheck radio group if uncheck radio button programmatically (#1561) (c108607), closes #609
- ripple: disable pointer events on ripple (#1623) (f91ea21) (#1684) (7336b90)
- ripple: prevent color flicker on radio/checkbox (#1705) (8ce65ca)
- sidenav: resolve the promise when sidenav is initialized opened. (#1666) (a0d85d8), closes #1382
- slide-toggle: disabled theme not working and dragging works if disabled (#1268) (8908366)
- slide-toggle: emit change event after drag end (#1405) (0b5b6f2)
- slide-toggle: remove view encapsulation (#1446) (cbecbce), closes #1343
- slide-toggle: thumb spacing at end for rtl (#1659) (ad3100e)
- slide-toggle: update colors to match spec (#1612) (596d994)
- slider: clamp thumb between min and max (#1617) (783dbb3), closes #1557
- slider: correctly detect when sidenav align changes. (#1758) (5ffdea6)
- slider: update thumb pos & ticks when min/max change (#1598) (ff84842)
- slider: update thumb position when value changes. Closes #1386 (#1610) (8e7f80d)
- slider: use percent values for the track (#1663) (8815846), closes #1389 #1304 #1234
- snackbar: add explicit box-sizing (#1413) (580da74), closes #1412
- snackbar: always clear ref when dismissing (#1773) (3c5b632)
- snackbar: remove even if still animating open (#1797) (523a48e)
- snackbar: snackbars sometimes don't get removed (#1795) (fcd29c8)
- tabs: make @Output not private (#1636) (04e2201)
- tabs: set correct min-width on mobile devices (#1351) (e270e50), closes #1350
- tooltip: remove tooltip component after its parent destroyed (#1470) (92ac392), closes #1111
- correct EventEmitter generic type across lib (#1620) (0174fa9)
- disable ripples when parent component is disabled (#1778) (6b9e11c)
2.0.0-alpha.9 cobalt-kraken (2016-09-26)
Angular Material has changed from @angular2-material/...
packages to a single package under
@angular/material
. Along with this change, there is a new NgModule, MaterialModule
, that
contains all of the components. Build tools such as rollup.js
can perform
tree-shaking to eliminate the code for components that you aren't using.
The addition of theming as also changed the directory structure for bringing the core css into your application. See the new theming guide for more information.
- theming: add initial version for theming (#1239) (e0726e1)
- dialog: initial version of dialog (#1041) (7ecda22, #1321) (74dc5b2, #1330) (23143b9)
- snack-bar: initial version of MdSnackBar. (#1296) (a732e88)
- packaging: move packaging to a single "@angular/material" (#1286) (b5c8c63)
- a11y: add basic focus-trap directive (#1311) (3e8b9d9)
- a11y: initial interactivity checker (#1288) (8a4b69d)
- card: add md-card-footer (#1178) (1c2a3f1)
- aot: change @Inputs to not be private (#1289) (b284dd4)
- checkbox, slide-toggle: forward required attribute to input. (#1137) (0e9383a), closes #1133
- gestures: add hammer types by default (#1309) (1a824d2)
- grid-list: darken grid footer (#1310) (f9116f3)
- grid-list: hide overflow on tiles (#1299) (06a6076)
- input: input should not be treated as empty if it is a date field. (#846) (fe2b493), closes #845 #845 #845
- sidenav: align text at start (#1297) (0e0ff0e)
- sidenav: fix dark theme (#1319) (332a4a2)
- sidenav: fix Promise type to match (#1188) (3d5ceab)
- theming: set input default color to currentColor in input theme (#1260) (#1262) (fa78f72)
2.0.0-alpha.8 ectoplasm-helicopter (2016-09-01)
- all: we've updated our packaging to match angular/angular's packaging. If you're using SystemJS in your project, you will probably want to switch to using our UMD bundles. Example config:
'@angular2-material/core': {
format: 'cjs',
main: 'core.umd.js'
}
You can see a more detailed example in our demo app's system config.
In addition to this, each component now has an index.js
file, so you should now have imports like
import {MdButtonModule} from '@angular2-material/button'
Instead of
import {MdButtonModule} from '@angular2-material/button/button'
- all: material modules must be included with
forRoot()
when bootstrapping. See the ngModules guide for more information.
@NgModule({
imports: [
MdCoreModule.forRoot(),
MdRadioModule.forRoot(),
MdIconModule.forRoot()
]
...
});
-
all: material now depends on TypeScript 2.0
-
input:
md-input
attributes now match the casing of native attributes. Previously they were camel-cased; now they are all lowercase. Example:autoComplete
is nowautocomplete
. See #1066 for a full list. -
overlay: overlays are now synchronous. This means actions like creating an overlay no longer return a promise.
- button: hover styles no longer applied to disabled buttons (#909) (21e419d), closes #866
- button: stop using
Type
from @angular (#991) (97d3ed3) - button-toggle: toggle group should not emit an initial change event. (#1144) (e5830d1)
- card: remove unnecessary intermediate div (#1068) (b5e1e33)
- checkbox: export TransitionCheckState enum (#1147) (cda90f3)
- input: make attributes match native ones (#1066) (f3a7b91), closes #1065
- ngc: _onDragStart/End are called with one param (#1113) (6e5d260), closes #1112
- ngc: don't emit HTMLElement in JS files (#1061) (32eacd2)
- rc6: add directives for custom elements that are part of the APIs. (#1121) (2c0dfcb)
- sidenav: turn off view encapsulation and refactor css (#1114) (97fe211)
- tabs: change missed md-active to md-tab-active (#1044) (87b6193)
- menu: add keyboard events and improve accessibility (#1132) (3669f06)
- modules: add
forRoot()
to material modules with providers (#1122) (9ff6196) - modules: add
forRoot()
to all modules (#1166) (21dc44a) - overlay: make overlays synchronous (#1079) (cdad90b)
- slider: add thumb-label (#976) (22d70ae)
- slider: support ngModel (#1029) (8828358)
- tabs: support for
disabled
tabs (#934) (9d51deb), closes #880
2.0.0-alpha.7 wax-umpire (2016-08-09)
- checkbox: wrong cursor when disabled (#908) (5251c27), closes #907
- checkbox, slide-toggle: only emit change event if native input emitted one. (#820) (d52e6e0), closes #575
- gestures: custom recognizers should not inherit twice. (#902) (c68efbd)
- gestures: ensure drag and pan are recognized with slide (#901) (3179fec)
- input: ensure all of label displays on safari (#871) (c8303b4), closes #795
- overlay: lazily create container (#894) (1efbbb9)
- progress-circle: correct elapsed time calculation (#927) (0b17cd3), closes #926
- progress-circle: remove performance.now to support non browser envs (#857) (14c1765)
- progress-circle: remove references to window (#838) (66ddd3a), closes #837
- radio: only emit change event if native input does. (#911) (23a61ab), closes #791
- slide-toggle: fix runtime exception for incorrect mousedown binding. (#828) (bbbc87f), closes #828
- fix type mismatches when offline compiling. (#835) (4bb7790)
Note that NgModules are now the supported way of including the Material components in your app. The MD_XXX_DIRECTIVES constants are now deprecated and will be removed in alpha.8.
- tooltip: initial tooltip implementation (#799) (f5e2a81)
- md-slider: initial version for md-slider (#779) (8354750)
- md-menu initial version for md-menu (more features coming in alpha.8) (#893) (16eb6be) (#855) (e324e47) (#867) (9a32489)
- ripple: initial mdInkRipple implementation (#681) (47448cb)
- button: add ripple to md-button (32aa461)
- input: support autocapitalize and autocorrect attributes (#858) (b2471f2)
- slide-toggle: add drag functionality to thumb (#750) (25b4f21)
- dialog: add styles and ability to close. (#862) (758b851)
- dialog: initial framework for md-dialog (#761) (9552ed5)
- radio: radio-button will no longer emit change event on de-select.
2.0.0-alpha.6 carbonfiber-discotheque (2016-06-30)
MdRadioDispatcher
is nowMdUniqueSelectionDispatcher
and is imported fromcore
- Form controls use the new
@angular/forms
package. To make migration easier, you can alternatively install alpha.5-3, which is the same as alpha.6 without the new forms package. Please see the docs for the new forms module.
- button: add the focus() method to buttons. (#643) (a6e74ce), closes #510
- button: focus state matches spec (#467) (b24d321)
- checkbox: checkbox animation works in Safari (#594) (0a9fb83)
- checkbox: prevent double click events (#672) (afed818), closes #671
- core: resolve compilation errors for latest Typescript 1.9 (#624) (e366fa0), closes #624
- demo-app: resolve mapping paths in relative. (#566) (421828a), closes #566
- forms: update components to new forms module (#745) (653fcee)
- grid-list: account for gutter in total list height (#545) (b47097d)
- input: Fix floating label width (#689) (cf2703c), closes #689 #688
- input: placeholder text is hidden by parent visibility (#680) (b407278), closes #670
- overlay: add a z-index. (#615) (89ab2f5)
- progress-bar: determinate state reflects value (#542) (6b86df0), closes #519
- radio: fix the baseline of radio buttons (#642) (31f0c7f), closes #642
- radio: model should update before change event is fired (#456) (c923f56), closes #448
- radio: support aria-label(ledby) on md-radio (#586) (#596) (8ccc49b)
- release: make resource-inlining regex non-greedy (#653) (e808452)
- sidenav: md-content now fills height (#703) (e10172c), closes #606
- sidenav: resolve compilation errors for latest Typescript 1.9 (#627) (f7f0b4a), closes #627
- slide-toggle: apply typography styles to slide-toggle (#634) (bbd96e8), closes #633
- slide-toggle: stop change event firing upon init (#713) (f21b2f4), closes #709
- spinner: omit min/max/value for indeterminate and correctly set mode (#640) (a5944da)
- tabs: adds support for async tabs (#639) (231467d), closes #574
- tabs: removes minimum height (#641) (750a8e3), closes #570
- theme: fix card and list colors for dark themes (#667) (ce27341), closes #667 #350
- toolbar: disable view encapsulation. (#678) (5c4dc04), closes #676
- add event object for slide-toggle and checkbox. (#554) (55cc197), closes #552
- include scss sources in packages (#536) (fd02b10)
- remove @internal where it would make tsc fail (#538) (efd1be2)
- remove circular deps and ci check (#608) (fda5617)
- remove duplicated typing. TS stdlib provides enough for e2e tests (#637) (a68597e)
- resolve errors w/ Closure Compiler. (#659) (fbdb35b), closes #659
- visually hidden inputs should not bubble change event (#551) (d037ed3), closes #544
- grid-list: add header and footer support (43806f6)
- overlay: add connected overlay directive (#496) (3b527e8)
- tabs: adds focus/select events (#649) (497a3c1), closes #569
- tabs: adds support for two-way bindings on selectedIndex (#702) (8df3246), closes #687
2.0.0-alpha.5 granite-gouda (2016-05-25)
- checkbox: change event should now fire on first change(7a9df1e), closes #481
- gestures: ensure default gestures are not overwritten by custom gestures(523929c)
- gestures: export gesture config as part of core (#488)(0d04e01)
- input: adds blur and focus event support (#449)(f6f5af3), closes #337
- input: adds support for name property for input element (#452)(f53ffdb), closes #446
- input: input element should have a different id from outer element (#450)(be5e93a), closes #320
- input: inputs now work in IE11 (#469)(de2a9f2), closes #336
- input: make native input background transparent (#468)(d2c6cb8), closes #277
- input: undo firefox invalid style, fix maxlength in IE (#393)(dfe683b), closes #393 #342 #388
- input: use the right ID for the label. (#515)(06aa3f1), closes #512
- list: adds focus state for nav-list items (#502)(34b210c), closes #323
- list: removes outline from focus state (#511)(91ad1c8)
- progress-circle: support IE11 (#375)(f22fa86), closes #295
- radio: refactor tests and fix ngModel (#443)(a25a8da), closes #443
- radio: remove event global so radio works in node(c32b06d), closes #425
- radio: unsetting the model will deselect all radio buttons (#441)(8af16e8), closes #327
- sidenav: add scrolling style to enable momentum scroll(c566242)
- sidenav: fixes sidenav RTL listening for side mode (#465)(4e1d85e), closes #465 #411
- sidenav: removes margin transitions (#460)(4b488e1), closes #404
- sidenav: switches to
translate3d()
for content positioning (#484)(357ee4c) - sidenav: treat
opened
as boolean attribute. (#444)(e977984), closes #300 - misc: adds directive constants to all components (#514)(fb89d4f), closes #513
- misc: correct access-level on many APIs (#437)(358af3b)
- misc: ensure custom error messages are set(4a25b7f)
- tabs: adds the
md-tab-group
component (#376)(ada285c) - grid-list: add grid-list component(0f89b8d)
- slide-toggle add slide-toggle component. (#362)(e09a5bf)
- checkbox: drive component with native checkbox (#415)(10ac2be), closes #250
- input: add focus function on host element (#407)(0323844)
- input: add support for more input attributes (#447)(911bfae)
- overlay: add connected position strategy (#335)(7f3b1bd)
2.0.0-alpha.4 mahogany-tambourine (2016-05-04)
- button: cleaned up button theming(0672356)
- checkbox: fix horizontal spacing between checkboxes and radio buttons(f4a7266)
- sidenav: add min width for empty navs(dbe3cc5)
- sidenav: prevent content from scrolling when sidenav is open(fea5923)
- theme: new, more delightful default theme(2f3e9db)
- update to @angular 2.0.0-rc.0 (#384)(04c8a1f)
- icon: initial md-icon implementation (#281)(a094a33)
- card: add alignment shortcuts for md-card-actions(77be2df)
- grid-list: basic scaffold for grid list (unreleased)(a9e1fa5)
- list: add icon support(7b3698c)
- sidenav: add fullscreen mode(aa6c740)
2.0.0-alpha.3 cotton-candelabrum (2016-04-21)
- button: remove ref to Event global (for node) (76e4f56)
- input: convert values entered based on the type input (e7611ce)
- progress-circle: actually render on Firefox & Edge (#283) (d24a5b3)
- sidenav: do not throw when there's no sidenav. (#270) (cc2b223), closes #269
- progress-bar: initial progress-bar impl. (#130) (c640f0c), closes #40
- gestures: add basic gesture demos (d4a3cde)
- input: add support for spellcheck attribute (#316) (dfee018)
- list: add nav list styles (22c1ea3)
- list: syntactic sugar for simple nav lists (c21c336)
- a11y: live-announcer supports using a provided live element (#273) (1a33a5b), closes #267
2.0.0-alpha.2 diamond-haircut (2016-04-06)
- button: apply color classes correctly. (62265cc), closes #75 #89 #195
- checkbox: Cancel spacebar keydown events when component focused (6db3511), closes #162 #181
- checkbox: Ensure consistent mixedmark rendering across browsers (666cdba), closes #174 #190
- checkbox: Handle transition when unset checkbox is interacted with (dde9359), closes #183 #227
- checkbox: Reduce $md-checkbox-transition-duration to 90ms (87e3a32), closes #226 #230
- checkbox: Remove GPU layer promotion for mark elements (82a22a7)
- sidenav: Remove deprecated @View (a61e2e9), closes #213
- radio: export the dispatcher in radio.ts (64cc406)
- input: add new input component (74d9bc0)
- input: README.md improvements and autofill support. (b711c2b)
- list: add list component (fb71eb1)
- list: add dividers to lists (915dd9b)
- list: support subheaders in lists (0a9c169)
- elevation: Add elevation core styles (3e34f7a), closes #222
- button: add md-icon-button styling. (208cd65), closes #188 #206
- overlay: add basic core of overlay (f0e1273)
- overlay: add global position strategy (c8f87a4)
- overlay: add overlay container & styles (74e3edf)
- portal: add DomPortalHost (358d923)
- radio: support ngModel on md-radio-group (6aff4cc), closes #209
- a11y: add aria live announcer (e99da66), closes #106
2.0.0-alpha.1 nylon-hyperdrive (2016-03-16)
2.0.0-alpha.0 titanium-octopus (2016-03-15)
This inaugural release includes 6 components:
- md-button (buttons and anchors)
- md-card
- md-toolbar
- md-sidenav
- md-checkbox
- md-progress-circle and md-spinner
As the alpha process continues, these components will continue to evolve. There will be breaking changes between alpha releases; the alpha releases are here for people that want an early look or who like to live on the edge and are very tolerant of breaking API and behavior changes.