diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts
index 9335a45882..8ce9194f20 100644
--- a/packages/core/src/components.d.ts
+++ b/packages/core/src/components.d.ts
@@ -2737,8 +2737,6 @@ declare global {
enabled?: boolean;
icon?: string;
path?: string;
- root?: string;
- rootParams?: any;
selected?: boolean;
show?: boolean;
tabsHideOnSubPages?: boolean;
diff --git a/packages/core/src/components/app/app.scss b/packages/core/src/components/app/app.scss
index 3791e72377..d6e71692ce 100644
--- a/packages/core/src/components/app/app.scss
+++ b/packages/core/src/components/app/app.scss
@@ -148,22 +148,8 @@ sub {
}
-// Nav Container Structure
-// --------------------------------------------------
-
-ion-app,
-ion-nav,
-ion-tabs,
-.ion-page {
- @include position(0, null, null, 0);
-
- position: absolute;
- z-index: $z-index-page-container;
-
- width: 100%;
- height: 100%;
-
- contain: layout size style;
+ion-app {
+ @extend .ion-page
}
// Page Container Structure
diff --git a/packages/core/src/components/app/app.tsx b/packages/core/src/components/app/app.tsx
index de7bc47c69..f0f759b402 100644
--- a/packages/core/src/components/app/app.tsx
+++ b/packages/core/src/components/app/app.tsx
@@ -95,7 +95,7 @@ export class App {
render() {
const dom = [];
if (this.useRouter) {
- dom.push();
+ // dom.push();
}
return dom;
}
diff --git a/packages/core/src/components/nav/nav.scss b/packages/core/src/components/nav/nav.scss
new file mode 100644
index 0000000000..c0fe7d406f
--- /dev/null
+++ b/packages/core/src/components/nav/nav.scss
@@ -0,0 +1,7 @@
+// Util
+// --------------------------------------------------
+@import "../../themes/util";
+
+ion-nav {
+ @extend .ion-page
+}
\ No newline at end of file
diff --git a/packages/core/src/components/nav/nav.tsx b/packages/core/src/components/nav/nav.tsx
index 14a2cf5e43..33e8368a68 100644
--- a/packages/core/src/components/nav/nav.tsx
+++ b/packages/core/src/components/nav/nav.tsx
@@ -58,6 +58,7 @@ const queueMap = new Map();
/* it is very important to keep this class in sync with ./nav-interface interface */
@Component({
tag: 'ion-nav',
+ styleUrl: 'nav.scss'
})
export class Nav implements PublicNav {
diff --git a/packages/core/src/components/page/page.scss b/packages/core/src/components/page/page.scss
new file mode 100644
index 0000000000..8c4babdc97
--- /dev/null
+++ b/packages/core/src/components/page/page.scss
@@ -0,0 +1,8 @@
+// Util
+// --------------------------------------------------
+@import "../../themes/util";
+
+ion-page {
+ @extend .ion-page
+}
+
diff --git a/packages/core/src/components/page/page.tsx b/packages/core/src/components/page/page.tsx
index a16198e15e..b29c2413d6 100644
--- a/packages/core/src/components/page/page.tsx
+++ b/packages/core/src/components/page/page.tsx
@@ -3,6 +3,7 @@ import { Component } from '@stencil/core';
@Component({
tag: 'ion-page',
+ styleUrl: 'page.scss'
})
export class Page {
diff --git a/packages/core/src/components/tab-button/tab-button.tsx b/packages/core/src/components/tab-button/tab-button.tsx
index 79f06ce7d9..e16f75ceeb 100644
--- a/packages/core/src/components/tab-button/tab-button.tsx
+++ b/packages/core/src/components/tab-button/tab-button.tsx
@@ -11,16 +11,16 @@ export class TabButton {
@Prop() selected = false;
@Prop() tab: HTMLIonTabElement;
- @Event() ionTabbarClick: EventEmitter;
- @Event() ionTabButtonDidLoad: EventEmitter;
- @Event() ionTabButtonDidUnload: EventEmitter;
+ @Event() ionTabbarClick: EventEmitter;
+ @Event() ionTabButtonDidLoad: EventEmitter;
+ @Event() ionTabButtonDidUnload: EventEmitter;
componentDidLoad() {
- this.ionTabButtonDidLoad.emit({ button: this });
+ this.ionTabButtonDidLoad.emit();
}
componentDidUnload() {
- this.ionTabButtonDidUnload.emit({ button: this });
+ this.ionTabButtonDidUnload.emit();
}
@Listen('click')
@@ -72,3 +72,11 @@ export class TabButton {
return items;
}
}
+
+export interface TabButtonEvent extends CustomEvent {
+ detail: TabButtonEventDetail;
+}
+
+export interface TabButtonEventDetail extends HTMLIonTabElement {
+
+}
diff --git a/packages/core/src/components/tab/readme.md b/packages/core/src/components/tab/readme.md
index a09d38a3d4..164cad5a3d 100644
--- a/packages/core/src/components/tab/readme.md
+++ b/packages/core/src/components/tab/readme.md
@@ -80,16 +80,6 @@ string
string
-#### root
-
-string
-
-
-#### rootParams
-
-any
-
-
#### selected
boolean
@@ -142,16 +132,6 @@ string
string
-#### root
-
-string
-
-
-#### rootParams
-
-any
-
-
#### selected
boolean
@@ -179,19 +159,10 @@ string
## Methods
-#### _setActive()
-
-
-#### getActive()
-
-
-#### getNav()
-
-
#### getPath()
-#### goToRoot()
+#### setActive()
diff --git a/packages/core/src/components/tab/tab.tsx b/packages/core/src/components/tab/tab.tsx
index e0a4e91972..92e1d5a0e2 100644
--- a/packages/core/src/components/tab/tab.tsx
+++ b/packages/core/src/components/tab/tab.tsx
@@ -1,5 +1,4 @@
import { Component, Element, Event, EventEmitter, Method, Prop, PropDidChange, State } from '@stencil/core';
-import { PublicViewController, StencilElement } from '../../index';
@Component({
@@ -7,24 +6,11 @@ import { PublicViewController, StencilElement } from '../../index';
})
export class Tab {
- private nav: Promise;
- private resolveNav: (el: HTMLIonNavElement) => void;
-
@Element() el: HTMLElement;
@State() init = false;
@State() active = false;
- /**
- * @input {Page} Set the root page for this tab.
- */
- @Prop() root: string;
-
- /**
- * @input {object} Any nav-params to pass to the root page of this tab.
- */
- @Prop() rootParams: any;
-
/**
* @input {string} Set the root page for this tab.
*/
@@ -73,51 +59,24 @@ export class Tab {
*/
@Prop() tabsHideOnSubPages = false;
- constructor() {
- this.nav = new Promise((resolve) => this.resolveNav = resolve);
- }
@Prop({ mutable: true }) selected = false;
@PropDidChange('selected')
selectedChanged(selected: boolean) {
if (selected) {
- this.ionSelect.emit(this.el);
+ this.ionSelect.emit();
}
}
/**
* @output {Tab} Emitted when the current tab is selected.
*/
- @Event() ionSelect: EventEmitter;
-
- protected componentDidUpdate() {
- if (this.init && this.resolveNav) {
- const nav = this.el.querySelector('ion-nav') as any as StencilElement;
- nav.componentOnReady(this.resolveNav);
- this.resolveNav = null;
- }
- }
+ @Event() ionSelect: EventEmitter;
@Method()
- _setActive(shouldActive: boolean): Promise {
- if (this.active === shouldActive) {
- return Promise.resolve();
- }
- this.active = shouldActive;
- this.selected = shouldActive;
-
- const needsLifecycle = this.init;
- if (shouldActive) {
- this.init = true;
- }
- if (needsLifecycle) {
- if (shouldActive) {
- // lifecycle didEnter
- } else {
- // lifecycle didLeave
- }
- }
- return this.nav;
+ setActive(active: boolean): Promise {
+ this.active = active;
+ return Promise.resolve();
}
@Method()
@@ -131,21 +90,6 @@ export class Tab {
return '';
}
- @Method()
- goToRoot(opts: any = {}) {
- return this.nav.then(nav => nav && nav.setRoot(nav.root, null, opts));
- }
-
- @Method()
- getActive(): Promise {
- return this.nav.then(nav => nav && nav.getActive());
- }
-
- @Method()
- getNav(): Promise {
- return this.nav;
- }
-
hostData() {
const visible = this.active && this.selected;
return {
@@ -159,9 +103,14 @@ export class Tab {
}
render() {
- if (this.init) {
- return ;
- }
- return null;
+ return ;
}
}
+
+export interface TabEvent extends CustomEvent {
+ detail: TabEventDetail;
+}
+
+export interface TabEventDetail {
+
+}
diff --git a/packages/core/src/components/tabs/readme.md b/packages/core/src/components/tabs/readme.md
index cc65d97de2..35cc2abfc0 100644
--- a/packages/core/src/components/tabs/readme.md
+++ b/packages/core/src/components/tabs/readme.md
@@ -167,9 +167,6 @@ boolean
#### ionChange
-#### ionNavChanged
-
-
## Methods
#### getByIndex()
@@ -178,24 +175,15 @@ boolean
#### getIndex()
-#### getRoutes()
-
-
#### getSelected()
-#### getState()
-
-
#### getTabs()
#### select()
-#### setRouteId()
-
-
----------------------------------------------
diff --git a/packages/core/src/components/tabs/tabs.scss b/packages/core/src/components/tabs/tabs.scss
index a9239112c2..665d65c46d 100644
--- a/packages/core/src/components/tabs/tabs.scss
+++ b/packages/core/src/components/tabs/tabs.scss
@@ -1,5 +1,9 @@
@import "../../themes/ionic.globals";
+// Util
+// --------------------------------------------------
+@import "../../themes/util";
+
// Tabs
// --------------------------------------------------
@@ -215,3 +219,8 @@ ion-tabbar.scrollable .scroll-inner {
ion-tabbar.scrollable ion-button.inactive {
visibility: hidden;
}
+
+
+ion-tabs {
+ @extend .ion-page
+}
diff --git a/packages/core/src/components/tabs/tabs.tsx b/packages/core/src/components/tabs/tabs.tsx
index ef9a6008d5..d1821efc0d 100644
--- a/packages/core/src/components/tabs/tabs.tsx
+++ b/packages/core/src/components/tabs/tabs.tsx
@@ -1,7 +1,5 @@
import { Component, Element, Event, EventEmitter, Listen, Method, Prop, State } from '@stencil/core';
-import { Config, NavState, RouterEntries } from '../../index';
-
-export interface NavOptions { }
+import { Config } from '../../index';
@Component({
@@ -61,7 +59,6 @@ export class Tabs {
* @output {any} Emitted when the tab changes.
*/
@Event() ionChange: EventEmitter;
- @Event() ionNavChanged: EventEmitter;
componentDidLoad() {
this.loadConfig('tabsPlacement', 'bottom');
@@ -69,10 +66,7 @@ export class Tabs {
this.loadConfig('tabsHighlight', true);
this.initTabs();
- const useRouter = this.config.getBoolean('useRouter', false);
- if (!useRouter) {
- this.initSelect();
- }
+ this.initSelect();
}
componentDidUnload() {
@@ -106,21 +100,21 @@ export class Tabs {
// The same selected was selected
// we need to set root in the nested ion-nav if it exist
- if (this.selectedTab === selectedTab) {
+ /*if (this.selectedTab === selectedTab) {
return selectedTab.goToRoot();
}
+ */
const leavingTab = this.selectedTab;
this.selectedTab = selectedTab;
- let promise = selectedTab._setActive(true);
+ let promise = selectedTab.setActive(true);
if (leavingTab) {
- promise = promise.then(() => leavingTab._setActive(false));
+ promise = promise.then(() => leavingTab.setActive(false));
}
return promise.then(() => {
this.ionChange.emit(selectedTab);
- this.ionNavChanged.emit({ isPop: false });
});
}
@@ -152,7 +146,7 @@ export class Tabs {
return this.tabs;
}
- @Method()
+ /*@Method()
getState(): NavState {
const selectedTab = this.getSelected();
if (!selectedTab) {
@@ -175,6 +169,7 @@ export class Tabs {
return a;
}
+
@Method()
setRouteId(id: any, _: any = {}): Promise {
if (this.selectedTab === id) {
@@ -182,10 +177,11 @@ export class Tabs {
}
return this.select(id);
}
+ */
private initTabs() {
const tabs = this.tabs = Array.from(this.el.querySelectorAll('ion-tab'));
- for (let tab of tabs) {
+ for (const tab of tabs) {
const id = `t-${this.tabsId}-${++this.ids}`;
tab.btnId = 'tab-' + id;
tab.id = 'tabpanel-' + id;
@@ -194,18 +190,16 @@ export class Tabs {
private initSelect() {
// find pre-selected tabs
- let selectedTab = this.tabs.find(t => t.selected);
+ const selectedTab = this.tabs.find(t => t.selected) || this.tabs.find(t => t.show && t.enabled);
// reset all tabs none is selected
- for (let tab of this.tabs) {
- tab.selected = false;
+ for (const tab of this.tabs) {
+ if (tab !== selectedTab) {
+ tab.selected = false;
+ }
}
- // find a tab candidate in case, the selected in null
- if (!selectedTab) {
- selectedTab = this.tabs.find(t => t.show && t.enabled);
- }
- selectedTab._setActive(true);
+ selectedTab.setActive(true);
this.selectedTab = selectedTab;
}
@@ -241,3 +235,5 @@ export class Tabs {
}
let tabIds = -1;
+
+
diff --git a/packages/core/src/components/tabs/test/basic/index.html b/packages/core/src/components/tabs/test/basic/index.html
index 5879202c2a..e53daae581 100644
--- a/packages/core/src/components/tabs/test/basic/index.html
+++ b/packages/core/src/components/tabs/test/basic/index.html
@@ -14,68 +14,57 @@
-
+
+
+
+ Tab One
+
+
+
+ Tab One
+
+
-
-
+
+
+
+ Tab Two
+
+
+
+ Tab Two
+
+
-
+
+
+
+ Tab Three
+
+
+
+ Tab Three
+
+
-
-
+
+
+
+ Tab Four
+
+
+
+ Tab Four
+
+
-
-
-
-