diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9db9661b12..443ffb30e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,45 @@
+
+# [2.3.0](https://github.com/driftyco/ionic/compare/v2.2.0...v2.3.0) (2017-03-22)
+
+
+### Bug Fixes
+
+* **alert:** pass id to alert inputs ([46fe1ff](https://github.com/driftyco/ionic/commit/46fe1ff)), closes [#10603](https://github.com/driftyco/ionic/issues/10603)
+* **datetime:** don't always disable day values when dayValues is set ([eff420f](https://github.com/driftyco/ionic/commit/eff420f))
+* **datetime:** move the call to picker.refresh() in generate ([58beea3](https://github.com/driftyco/ionic/commit/58beea3))
+* **datetime:** respect time limits in hours and minutes ([afd99ba](https://github.com/driftyco/ionic/commit/afd99ba)), closes [#6850](https://github.com/driftyco/ionic/issues/6850)
+* **datetime:** update selectedIndex according to ngModel value ([74191c3](https://github.com/driftyco/ionic/commit/74191c3))
+* **infinite-scroll:** add event.timeStamp polyfill for firefox ([#10752](https://github.com/driftyco/ionic/issues/10752)) ([53feb3f](https://github.com/driftyco/ionic/commit/53feb3f))
+* **picker:** initialize the selectionIndex ([ba35306](https://github.com/driftyco/ionic/commit/ba35306))
+* **range:** update the bar width correctly ([b541832](https://github.com/driftyco/ionic/commit/b541832)), closes [#10150](https://github.com/driftyco/ionic/issues/10150)
+* **range:** only activate knob B if range is dual ([d538245](https://github.com/driftyco/ionic/commit/d538245))
+* **scroll-view:** do not set initialized until it is enabled ([#10817](https://github.com/driftyco/ionic/issues/10817)) ([56364a0](https://github.com/driftyco/ionic/commit/56364a0))
+* **searchbar:** add IE support ([05859db](https://github.com/driftyco/ionic/commit/05859db))
+* **select:** make floating labels work for ion-select ([8c483f2](https://github.com/driftyco/ionic/commit/8c483f2)), closes [#10751](https://github.com/driftyco/ionic/issues/10751)
+* **slides:** fix rtl support ([e90d692](https://github.com/driftyco/ionic/commit/e90d692))
+* **slides:** simulate touch events for query params ([#10579](https://github.com/driftyco/ionic/issues/10579)) ([e191321](https://github.com/driftyco/ionic/commit/e191321)), closes [#10577](https://github.com/driftyco/ionic/issues/10577)
+* **toggle/checkbox:** trigger ui update when using virtalScroll with Angular Reactive Forms ([30980b6](https://github.com/driftyco/ionic/commit/30980b6))
+* **virtual-list:** make virtual-scroll work with infinite-scroll ([999efac](https://github.com/driftyco/ionic/commit/999efac)), closes [#9350](https://github.com/driftyco/ionic/issues/9350) [#9722](https://github.com/driftyco/ionic/issues/9722) [#9247](https://github.com/driftyco/ionic/issues/9247) [#10778](https://github.com/driftyco/ionic/issues/10778)
+* **virtualscroll:** populate the nodes at the correct height ([51c398d](https://github.com/driftyco/ionic/commit/51c398d))
+
+
+### Features
+
+* **alert:** add attributes min & max to alert inputs ([d666e8b](https://github.com/driftyco/ionic/commit/d666e8b))
+* **alert:** add attributes min & max to alert inputs of type number ([b53219a](https://github.com/driftyco/ionic/commit/b53219a))
+* **infinite:** add scroll in opposite direction ([#8099](https://github.com/driftyco/ionic/issues/8099)) ([6918275](https://github.com/driftyco/ionic/commit/6918275))
+* **infinite-scroll:** add `waitFor` method to InfiniteScroll ([84e25a1](https://github.com/driftyco/ionic/commit/84e25a1))
+* **overlay:** add method chaining pattern to configure overlays ([bee75f7](https://github.com/driftyco/ionic/commit/bee75f7))
+* **range:** add ionFocus and ionBlur events ([#10761](https://github.com/driftyco/ionic/issues/10761)) ([8f310eb](https://github.com/driftyco/ionic/commit/8f310eb))
+* **split-pane:** support for side=right ([963cdcb](https://github.com/driftyco/ionic/commit/963cdcb))
+
+
+### Performance Improvements
+
+* **content:** scrollview magic activated on demand ([7e9bad5](https://github.com/driftyco/ionic/commit/7e9bad5))
+
+
+
# [2.2.0](https://github.com/driftyco/ionic/compare/v2.1.0...v2.2.0) (2017-03-08)
diff --git a/package.json b/package.json
index f0a0940e80..0e57a2e4c7 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "ionic2",
- "version": "2.2.0",
+ "version": "2.3.0",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular 2",
"keywords": [
"ionic",
diff --git a/src/components/alert/alert-component.ts b/src/components/alert/alert-component.ts
index 1d70af5a91..9ed1869143 100644
--- a/src/components/alert/alert-component.ts
+++ b/src/components/alert/alert-component.ts
@@ -72,6 +72,7 @@ import { AlertInputOptions, AlertOptions, AlertButton } from './alert-options';
encapsulation: ViewEncapsulation.None,
})
export class AlertCmp {
+
activeId: string;
descId: string;
d: AlertOptions;
diff --git a/src/components/alert/alert-options.ts b/src/components/alert/alert-options.ts
index 74c9804ba5..39cd2e8030 100644
--- a/src/components/alert/alert-options.ts
+++ b/src/components/alert/alert-options.ts
@@ -27,5 +27,6 @@ export interface AlertInputOptions {
export interface AlertButton {
text?: string;
role?: string;
+ cssClass?: string;
handler?: Function;
};
diff --git a/src/components/alert/test/basic/pages/page-one/page-one.ts b/src/components/alert/test/basic/pages/page-one/page-one.ts
index 6e2ef20125..815b8328de 100644
--- a/src/components/alert/test/basic/pages/page-one/page-one.ts
+++ b/src/components/alert/test/basic/pages/page-one/page-one.ts
@@ -33,6 +33,7 @@ export class PageOne {
alert.addButton({
text: 'Cancel',
role: 'cancel',
+ cssClass: 'secondary',
handler: () => {
console.log('Confirm Cancel');
this.testConfirmResult = 'Cancel';
diff --git a/src/components/img/test/basic/app.module.ts b/src/components/img/test/basic/app.module.ts
new file mode 100644
index 0000000000..df95cc9886
--- /dev/null
+++ b/src/components/img/test/basic/app.module.ts
@@ -0,0 +1,63 @@
+import { Component, Input, NgModule } from '@angular/core';
+import { IonicApp, IonicModule } from '../../../../../ionic-angular';
+
+
+@Component({
+ selector: '',
+ template: ''
+})
+export class MyImg {
+ @Input() width: any;
+ @Input() height: any;
+ @Input() src: any;
+}
+
+@Component({
+ templateUrl: 'main.html'
+})
+export class E2EPage {
+ images = [
+ {
+ width: '100',
+ height: '44',
+ src: '../img/batmobile.jpg'
+ },
+ {
+ width: '100',
+ height: '75',
+ src: '../img/knight-rider.jpg'
+ },
+ {
+ width: '100',
+ height: '68',
+ src: '../img/general-lee.jpg'
+ }
+ ];
+
+}
+
+
+@Component({
+ template: ''
+})
+export class E2EApp {
+ root = E2EPage;
+}
+
+
+@NgModule({
+ declarations: [
+ E2EApp,
+ E2EPage,
+ MyImg
+ ],
+ imports: [
+ IonicModule.forRoot(E2EApp)
+ ],
+ bootstrap: [IonicApp],
+ entryComponents: [
+ E2EApp,
+ E2EPage
+ ]
+})
+export class AppModule {}
diff --git a/src/components/infinite-scroll/infinite-scroll.ts b/src/components/infinite-scroll/infinite-scroll.ts
index 56048cf878..1479fa8a36 100644
--- a/src/components/infinite-scroll/infinite-scroll.ts
+++ b/src/components/infinite-scroll/infinite-scroll.ts
@@ -256,7 +256,7 @@ export class InfiniteScroll {
let distanceFromInfinite: number;
if (this._position === POSITION_BOTTOM) {
- distanceFromInfinite = ((d.scrollHeight - infiniteHeight) - d.scrollTop) - height - threshold;
+ distanceFromInfinite = d.scrollHeight - infiniteHeight - d.scrollTop - height - threshold;
} else {
assert(this._position === POSITION_TOP, '_position should be top');
distanceFromInfinite = d.scrollTop - infiniteHeight - threshold;
@@ -289,6 +289,10 @@ export class InfiniteScroll {
* to `enabled`.
*/
complete() {
+ if (this.state !== STATE_LOADING) {
+ return;
+ }
+
if (this._position === POSITION_BOTTOM) {
this.state = STATE_ENABLED;
return;