diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts
index d7323bc9bf..82a7abe0ec 100644
--- a/packages/core/src/components.d.ts
+++ b/packages/core/src/components.d.ts
@@ -754,7 +754,7 @@ declare global {
import {
FabContainer as IonFab
-} from './components/fab/fab-container';
+} from './components/fab-container/fab-container';
declare global {
interface HTMLIonFabElement extends IonFab, HTMLElement {
@@ -784,7 +784,7 @@ declare global {
import {
FabList as IonFabList
-} from './components/fab/fab-list';
+} from './components/fab-list/fab-list';
declare global {
interface HTMLIonFabListElement extends IonFabList, HTMLElement {
diff --git a/packages/core/src/components/fab-container/fab-container.tsx b/packages/core/src/components/fab-container/fab-container.tsx
new file mode 100644
index 0000000000..39dba7829c
--- /dev/null
+++ b/packages/core/src/components/fab-container/fab-container.tsx
@@ -0,0 +1,39 @@
+import { Component, Element, Method, State } from '@stencil/core';
+
+
+@Component({
+ tag: 'ion-fab',
+})
+export class FabContainer {
+ @Element() private el: HTMLElement;
+
+ @State() activated = false;
+
+ /**
+ * Close an active FAB list container
+ */
+ @Method()
+ close() {
+ this.activated = false;
+ }
+
+ toggleActive = () => {
+ this.activated = !this.activated;
+ }
+
+ render() {
+ const fab: any = this.el.querySelector('ion-fab-button');
+ fab.toggleActive = this.toggleActive;
+ fab.activated = this.activated;
+
+ const lists = this.el.querySelectorAll('ion-fab-list');
+ for (let i = 0, length = lists.length; i < length; i += 1) {
+ lists[i].activated = this.activated;
+ }
+
+ return (
+
+ );
+ }
+
+}
diff --git a/packages/core/src/components/fab-container/readme.md b/packages/core/src/components/fab-container/readme.md
new file mode 100644
index 0000000000..44ba95656b
--- /dev/null
+++ b/packages/core/src/components/fab-container/readme.md
@@ -0,0 +1,91 @@
+# ion-fab
+
+`` is not a FAB button by itself but a container that assist the fab button (`