diff --git a/src/components/snapshot/test/basic/app/app.component.ts b/src/components/snapshot/test/basic/app/app.component.ts
new file mode 100644
index 0000000000..20972dd584
--- /dev/null
+++ b/src/components/snapshot/test/basic/app/app.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+import {ComponentsPage} from '../pages/components/components';
+import {AssistiveTouchProvider} from "../providers/assistive-touch/assistive-touch";
+
+@Component({
+ template: `
+ `
+})
+export class AppComponent {
+ root = ComponentsPage;
+}
diff --git a/src/components/snapshot/test/basic/app/app.module.ts b/src/components/snapshot/test/basic/app/app.module.ts
new file mode 100644
index 0000000000..221ebd6038
--- /dev/null
+++ b/src/components/snapshot/test/basic/app/app.module.ts
@@ -0,0 +1,21 @@
+import { NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { IonicApp, IonicModule } from '../../../../../';
+
+import { AppComponent } from './app.component';
+import { ComponentsModule } from '../pages/components/components.module';
+import {AssistiveTouchComponentModule} from '../components/assistive-touch/assistive-touch.module';
+
+@NgModule({
+ declarations: [
+ AppComponent,
+ ],
+ imports: [
+ BrowserModule,
+ IonicModule.forRoot(AppComponent, {}),
+ ComponentsModule,
+ AssistiveTouchComponentModule
+ ],
+ bootstrap: [IonicApp]
+})
+export class AppModule {}
diff --git a/src/components/snapshot/test/basic/app/main.ts b/src/components/snapshot/test/basic/app/main.ts
new file mode 100644
index 0000000000..6af7a5b2ae
--- /dev/null
+++ b/src/components/snapshot/test/basic/app/main.ts
@@ -0,0 +1,5 @@
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+
+import { AppModule } from './app.module';
+
+platformBrowserDynamic().bootstrapModule(AppModule);
diff --git a/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.html b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.html
new file mode 100644
index 0000000000..1582ab01ea
--- /dev/null
+++ b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.module.ts b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.module.ts
new file mode 100644
index 0000000000..3e2a5f3a2c
--- /dev/null
+++ b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.module.ts
@@ -0,0 +1,21 @@
+import {NgModule} from '@angular/core';
+import {AssistiveTouchComponent} from './assistive-touch';
+import {IonicPageModule} from '../../../../../../module';
+import {AssistiveTouchProvider} from '../../providers/assistive-touch/assistive-touch';
+
+@NgModule({
+ declarations: [
+ AssistiveTouchComponent,
+ ],
+ imports: [
+ IonicPageModule.forChild(AssistiveTouchComponent),
+ ],
+ exports: [
+ AssistiveTouchComponent
+ ],
+ providers: [
+ AssistiveTouchProvider
+ ]
+})
+export class AssistiveTouchComponentModule {
+}
diff --git a/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.scss b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.scss
new file mode 100644
index 0000000000..496c65842b
--- /dev/null
+++ b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.scss
@@ -0,0 +1,24 @@
+.app-root {
+ contain: none !important;
+ position: initial !important;
+}
+
+assistive-touch {
+ @include padding(10px);
+ @include border-radius(15px);
+
+ z-index: 9999999;
+
+ position: absolute;
+
+ display: block;
+ contain: strict;
+
+ background-color: rgba(0, 0, 0, 0.7);
+ width: 60px;
+ height: 60px;
+
+ text-align: center;
+ font-size: 34px;
+ color: white;
+}
diff --git a/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.ts b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.ts
new file mode 100644
index 0000000000..b8380c35af
--- /dev/null
+++ b/src/components/snapshot/test/basic/components/assistive-touch/assistive-touch.ts
@@ -0,0 +1,84 @@
+import {AfterViewInit, Component, ElementRef, Renderer2} from '@angular/core';
+import {DomController} from '../../../../../../platform/dom-controller';
+import {AssistiveTouchProvider} from '../../providers/assistive-touch/assistive-touch';
+
+@Component({
+ selector: 'assistive-touch',
+ templateUrl: 'assistive-touch.html',
+ host: {
+ '(click)': 'openControl()'
+ }
+})
+export class AssistiveTouchComponent implements AfterViewInit {
+ private sideX = 'right';
+ private sideY = 'bottom';
+ private currentX: number = 2;
+ private currentY: number = 150;
+
+ private elemWidthOffset: number;
+ private elemHeightOffset: number;
+
+ constructor(private assistive: AssistiveTouchProvider, public element: ElementRef, public renderer: Renderer2, public domCtrl: DomController) {
+ }
+
+ ngAfterViewInit() {
+ const hammer = new ((window))['Hammer'](this.element.nativeElement);
+ hammer.get('pan').set({direction: ((window))['Hammer'].DIRECTION_ALL});
+
+ hammer.on('panmove', this.handlePan.bind(this));
+ hammer.on('panend', this.panEnd.bind(this));
+
+ const rect = this.element.nativeElement.getBoundingClientRect();
+ this.elemWidthOffset = rect.width / 2;
+ this.elemHeightOffset = rect.height / 2;
+
+ this.updatePosition();
+ }
+
+ private handlePan(ev: {center: {x: number, y: number}}) {
+ let newX = ev.center.x;
+ let newY = ev.center.y;
+
+ this.sideX = (newX < window.innerWidth / 2) ? 'left' : 'right';
+ this.sideY = (newY < window.innerHeight / 2) ? 'top' : 'bottom';
+
+ if (this.sideX === 'right')
+ newX = window.innerWidth - newX;
+ newX -= this.elemWidthOffset;
+
+ if (this.sideY === 'bottom')
+ newY = window.innerHeight - newY;
+ newY -= this.elemHeightOffset;
+
+ this.currentX = newX > 2 ? newX : 2;
+ this.currentY = newY > 2 ? newY : 2;
+
+ this.updatePosition();
+ }
+
+ private panEnd() {
+ if (this.currentX > this.currentY) {
+ this.currentY = 2;
+ } else {
+ this.currentX = 2;
+ }
+
+ this.updatePosition();
+ }
+
+ private updatePosition() {
+ this.domCtrl.write(() => {
+ this.renderer.setStyle(this.element.nativeElement, this.sideX === 'left' ? 'right' : 'left', 'auto');
+ this.renderer.setStyle(this.element.nativeElement, this.sideX, this.currentX + 'px');
+
+ this.renderer.setStyle(this.element.nativeElement, this.sideY === 'top' ? 'bottom' : 'top', 'auto');
+ this.renderer.setStyle(this.element.nativeElement, this.sideY, this.currentY + 'px');
+ });
+ }
+
+ openControl() {
+ // TODO when custom alerts are out, this should open a custom alert
+ // Allow setting direction, close, whatever
+ this.assistive.closeButton.emit();
+ }
+}
diff --git a/src/components/snapshot/test/basic/pages/components/components.html b/src/components/snapshot/test/basic/pages/components/components.html
new file mode 100644
index 0000000000..63b63a50da
--- /dev/null
+++ b/src/components/snapshot/test/basic/pages/components/components.html
@@ -0,0 +1,16 @@
+
+
+ Components
+
+
+
+
+
+
+ {{componentItem.name}}
+
+
+
+
diff --git a/src/components/snapshot/test/basic/pages/components/components.module.ts b/src/components/snapshot/test/basic/pages/components/components.module.ts
new file mode 100644
index 0000000000..c55f6d8c3e
--- /dev/null
+++ b/src/components/snapshot/test/basic/pages/components/components.module.ts
@@ -0,0 +1,417 @@
+import {NgModule} from '@angular/core';
+import {IonicPageModule} from '../../../../../../';
+
+import {ComponentsPage} from './components';
+
+import {AppModule as ActionSheetBasic} from '../../../../../action-sheet/test/basic/app/app.module';
+
+import {AppModule as AlertBasic} from '../../../../../alert/test/basic/app/app.module';
+import {AppModule as AlertDismiss} from '../../../../../alert/test/dismiss/app.module';
+
+import {AppModule as AppAnimations} from '../../../../../app/test/animations/app.module';
+import {AppModule as AppCordova} from '../../../../../app/test/cordova/app/app.module';
+import {AppModule as AppGestureCollision} from '../../../../../app/test/gesture-collision/app/app.module';
+import {AppModule as AppGestures} from '../../../../../app/test/gestures/app.module';
+import {AppModule as AppTypography} from '../../../../../app/test/typography/app/app.module';
+import {AppModule as AppUtilities} from '../../../../../app/test/utilities/app/app.module';
+
+import {AppModule as BadgeBasic} from '../../../../../badge/test/basic/app/app.module';
+
+import {AppModule as ButtonAnchors} from '../../../../../button/test/anchors/app/app.module';
+import {AppModule as ButtonAttributes} from '../../../../../button/test/attributes/app/app.module';
+import {AppModule as ButtonBasic} from '../../../../../button/test/basic/app/app.module';
+import {AppModule as ButtonBlock} from '../../../../../button/test/block/app/app.module';
+import {AppModule as ButtonClear} from '../../../../../button/test/clear/app/app.module';
+import {AppModule as ButtonDecorator} from '../../../../../button/test/decorator/app/app.module';
+import {AppModule as ButtonDynamic} from '../../../../../button/test/dynamic/app/app.module';
+import {AppModule as ButtonFull} from '../../../../../button/test/full/app/app.module';
+import {AppModule as ButtonIcons} from '../../../../../button/test/icons/app/app.module';
+import {AppModule as ButtonOutline} from '../../../../../button/test/outline/app/app.module';
+import {AppModule as ButtonRaised} from '../../../../../button/test/raised/app.module';
+import {AppModule as ButtonRound} from '../../../../../button/test/round/app/app.module';
+import {AppModule as ButtonSizes} from '../../../../../button/test/sizes/app/app.module';
+
+import {AppModule as CardAdvanced} from '../../../../../card/test/advanced/app/app.module';
+import {AppModule as CardBasic} from '../../../../../card/test/basic/app/app.module';
+import {AppModule as CardColors} from '../../../../../card/test/colors/app/app.module';
+import {AppModule as CardImages} from '../../../../../card/test/images/app/app.module';
+import {AppModule as CardList} from '../../../../../card/test/list/app/app.module';
+import {AppModule as CardMap} from '../../../../../card/test/map/app.module';
+import {AppModule as CardSocial} from '../../../../../card/test/social/app.module';
+
+import {AppModule as CheckboxBasic} from '../../../../../checkbox/test/basic/app/app.module';
+
+import {AppModule as ChipBasic} from '../../../../../chip/test/basic/app/app.module';
+
+import {AppModule as ContentBasic} from '../../../../../content/test/basic/app/app.module';
+import {AppModule as ContentFullscreen} from '../../../../../content/test/fullscreen/app/app.module';
+import {AppModule as ContentHeaderScroll} from '../../../../../content/test/header-scroll/app.module';
+import {AppModule as ContentNoBounce} from '../../../../../content/test/no-bounce/app/app.module';
+import {AppModule as ContentScrollDownOnLoad} from '../../../../../content/test/scroll-down-on-load/app/app.module';
+
+import {AppModule as DatetimeBasic} from '../../../../../datetime/test/basic/app/app.module';
+import {AppModule as DatetimeForm} from '../../../../../datetime/test/form/app.module';
+import {AppModule as DatetimeIssues} from '../../../../../datetime/test/issues/app/app.module';
+import {AppModule as DatetimeLabels} from '../../../../../datetime/test/labels/app/app.module';
+
+import {AppModule as FabBasic} from '../../../../../fab/test/basic/app/app.module';
+
+import {AppModule as GridAlignment} from '../../../../../grid/test/alignment/app.module';
+import {AppModule as GridBasic} from '../../../../../grid/test/basic/app/app.module';
+import {AppModule as GridCard} from '../../../../../grid/test/card/app.module';
+import {AppModule as GridFull} from '../../../../../grid/test/full/app.module';
+import {AppModule as GridResponsive} from '../../../../../grid/test/responsive/app.module';
+
+import {AppModule as IconBasic} from '../../../../../icon/test/basic/app/app.module';
+
+import {AppModule as ImgBasic} from '../../../../../img/test/basic/app/app.module';
+import {AppModule as ImgCards} from '../../../../../img/test/cards/app.module';
+import {AppModule as ImgLazyLoad} from '../../../../../img/test/lazy-load/app.module';
+import {AppModule as ImgList} from '../../../../../img/test/list/app.module';
+
+import {AppModule as InfiniteScrollBasic} from '../../../../../infinite-scroll/test/basic/app.module';
+import {AppModule as InfiniteScrollPositionTop} from '../../../../../infinite-scroll/test/position-top/app/app.module';
+import {AppModule as InfiniteScrollShortList} from '../../../../../infinite-scroll/test/short-list/app.module';
+
+import {AppModule as InputBasicForm} from '../../../../../input/test/basic-form/app/app.module';
+import {AppModule as InputClearAfterEdit} from '../../../../../input/test/clear-after-edit/app/app.module';
+import {AppModule as InputClearInput} from '../../../../../input/test/clear-input/app/app.module';
+import {AppModule as InputEvents} from '../../../../../input/test/events/app/app.module';
+import {AppModule as InputFixedInlineLabels} from '../../../../../input/test/fixed-inline-labels/app/app.module';
+import {AppModule as InputFloatingLabels} from '../../../../../input/test/floating-labels/app/app.module';
+import {AppModule as InputFooterInputs} from '../../../../../input/test/footer-inputs/app/app.module';
+import {AppModule as InputFormInputs} from '../../../../../input/test/form-inputs/app/app.module';
+import {AppModule as InputHighlight} from '../../../../../input/test/highlight/app/app.module';
+import {AppModule as InputInlineLabels} from '../../../../../input/test/inline-labels/app/app.module';
+import {AppModule as InputInputFocus} from '../../../../../input/test/input-focus/app/app.module';
+import {AppModule as InputInsetInputs} from '../../../../../input/test/inset-inputs/app/app.module';
+import {AppModule as InputPlaceholderLabels} from '../../../../../input/test/placeholder-labels/app/app.module';
+import {AppModule as InputStackedLabels} from '../../../../../input/test/stacked-labels/app/app.module';
+
+import {AppModule as ItemButtons} from '../../../../../item/test/buttons/app/app.module';
+import {AppModule as ItemColors} from '../../../../../item/test/colors/app/app.module';
+import {AppModule as ItemDividers} from '../../../../../item/test/dividers/app/app.module';
+import {AppModule as ItemGroups} from '../../../../../item/test/groups/app/app.module';
+import {AppModule as ItemIcons} from '../../../../../item/test/icons/app/app.module';
+import {AppModule as ItemImages} from '../../../../../item/test/images/app/app.module';
+import {AppModule as ItemInputs} from '../../../../../item/test/inputs/app/app.module';
+import {AppModule as ItemMedia} from '../../../../../item/test/media/app/app.module';
+import {AppModule as ItemReorder} from '../../../../../item/test/reorder/app/app.module';
+import {AppModule as ItemSliding} from '../../../../../item/test/sliding/app/app.module';
+import {AppModule as ItemText} from '../../../../../item/test/text/app/app.module';
+
+import {AppModule as ListChatList} from '../../../../../list/test/chat-list/app.module';
+import {AppModule as ListHeaderScenarios} from '../../../../../list/test/header-scenarios/app/app.module';
+import {AppModule as ListHeaders} from '../../../../../list/test/headers/app/app.module';
+import {AppModule as ListInset} from '../../../../../list/test/inset/app/app.module';
+import {AppModule as ListNoLines} from '../../../../../list/test/no-lines/app/app.module';
+import {AppModule as ListRepeatHeaders} from '../../../../../list/test/repeat-headers/app.module';
+import {AppModule as ListSticky} from '../../../../../list/test/sticky/app.module';
+
+import {AppModule as LoadingBasic} from '../../../../../loading/test/basic/app/app.module';
+import {AppModule as LoadingTabs} from '../../../../../tabs/test/basic/app/app.module';
+
+import {AppModule as MenuBasic} from '../../../../../menu/test/basic/app/app.module';
+// import {AppModule as MenuDisableSwipe} from '../../../../../menu/test/disable-swipe/app.module'; TODO
+// import {AppModule as MenuEnableDisable} from '../../../../../menu/test/enable-disable/app.module'; TODO
+import {AppModule as MenuMultiple} from '../../../../../menu/test/multiple/app/app.module';
+import {AppModule as MenuOverlay} from '../../../../../menu/test/overlay/app.module';
+import {AppModule as MenuPush} from '../../../../../menu/test/push/app.module';
+import {AppModule as MenuReveal} from '../../../../../menu/test/reveal/app.module';
+
+import {AppModule as ModalBasic} from '../../../../../modal/test/basic/app/app.module';
+
+import {AppModule as NavBasic} from '../../../../../nav/test/basic/app/app.module';
+import {AppModule as NavChildNavs} from '../../../../../nav/test/child-navs/app/app.module';
+import {AppModule as NavInitAsync} from '../../../../../nav/test/init-async/app.module';
+import {AppModule as NavInsertViews} from '../../../../../nav/test/insert-views/app.module';
+import {AppModule as NavMemory} from '../../../../../nav/test/memory/app.module';
+import {AppModule as NavNavPushPop} from '../../../../../nav/test/nav-push-pop/app.module';
+import {AppModule as NavWorstCase} from '../../../../../nav/test/worst-case/app.module';
+
+import {AppModule as PickerBasic} from '../../../../../picker/test/basic/app/app.module';
+
+import {AppModule as PopoverBasic} from '../../../../../popover/test/basic/app/app.module';
+
+import {AppModule as RadioBasic} from '../../../../../radio/test/basic/app/app.module';
+
+import {AppModule as RangeBasic} from '../../../../../range/test/basic/app/app.module';
+
+import {AppModule as RefresherBasic} from '../../../../../refresher/test/basic/app.module';
+// import {AppModule as RefresherNavigation} from '../../../../../refresher/test/navigation/app.module'; TODO
+
+import {AppModule as ScrollBasic} from '../../../../../scroll/test/basic/app.module';
+
+import {AppModule as SearchbarBasic} from '../../../../../searchbar/test/basic/app/app.module';
+import {AppModule as SearchbarNav} from '../../../../../searchbar/test/nav/app/app.module';
+import {AppModule as SearchbarToolbar} from '../../../../../searchbar/test/toolbar/app/app.module';
+
+import {AppModule as SegmentBasic} from '../../../../../segment/test/basic/app/app.module';
+import {AppModule as SegmentNav} from '../../../../../segment/test/nav/app/app.module';
+import {AppModule as SegmentSwipe} from '../../../../../segment/test/swipe/app/app.module';
+
+import {AppModule as SelectMultipleValue} from '../../../../../select/test/multiple-value/app/app.module';
+import {AppModule as SelectSingleValue} from '../../../../../select/test/single-value/app/app.module';
+
+import {AppModule as ShowHideWhenBasic} from '../../../../../show-hide-when/test/basic/app.module';
+
+import {AppModule as SlidesBasic} from '../../../../../slides/test/basic/app.module';
+import {AppModule as SlidesControl} from '../../../../../slides/test/control/app.module';
+import {AppModule as SlidesController} from '../../../../../slides/test/controller/app.module';
+import {AppModule as SlidesImages} from '../../../../../slides/test/images/app.module';
+import {AppModule as SlidesIntro} from '../../../../../slides/test/intro/app.module';
+import {AppModule as SlidesLoop} from '../../../../../slides/test/loop/app.module';
+import {AppModule as SlidesOptions} from '../../../../../slides/test/options/app.module';
+import {AppModule as SlidesRTL} from '../../../../../slides/test/rtl/app.module';
+import {AppModule as SlidesScroll} from '../../../../../slides/test/scroll/app.module';
+
+import {AppModule as SpinnerBasic} from '../../../../../spinner/test/basic/app.module';
+import {AppModule as SpinnerColors} from '../../../../../spinner/test/colors/app.module';
+
+import {AppModule as SplitPaneBasic} from '../../../../../split-pane/test/basic/app/app.module';
+import {AppModule as SplitPaneMenus} from '../../../../../split-pane/test/menus/app/app.module';
+import {AppModule as SplitPaneNested} from '../../../../../split-pane/test/nested/app/app.module';
+import {AppModule as SplitPaneTabs} from '../../../../../split-pane/test/tabs/app/app.module';
+
+import {AppModule as TabsAdvanced} from '../../../../../tabs/test/advanced/app/app.module';
+import {AppModule as TabsBadges} from '../../../../../tabs/test/badges/app/app.module';
+import {AppModule as TabsBasic} from '../../../../../tabs/test/basic/app/app.module';
+import {AppModule as TabsColors} from '../../../../../tabs/test/colors/app/app.module';
+import {AppModule as TabsEvents} from '../../../../../tabs/test/events/app.module';
+import {AppModule as TabsGhost} from '../../../../../tabs/test/ghost/app.module';
+import {AppModule as TabsLifecycle} from '../../../../../tabs/test/lifecyles/app.module';
+import {AppModule as TabsTabBarScenarios} from '../../../../../tabs/test/tab-bar-scenarios/app/app.module';
+import {AppModule as TabsTop} from '../../../../../tabs/test/top/app.module';
+
+import {AppModule as ToastBasic} from '../../../../../toast/test/basic/app/app.module';
+
+import {AppModule as ToggleBasic} from '../../../../../toggle/test/basic/app/app.module';
+
+import {AppModule as ToolbarBasic} from '../../../../../toolbar/test/basic/app/app.module';
+import {AppModule as ToolbarColors} from '../../../../../toolbar/test/colors/app/app.module';
+import {AppModule as ToolbarScenarios} from '../../../../../toolbar/test/scenarios/app/app.module';
+
+import {AppModule as TypographyBasic} from '../../../../../typography/test/basic/app/app.module';
+
+import {AppModule as VirtualScrollBasic} from '../../../../../virtual-scroll/test/basic/app.module';
+import {AppModule as VirtualScrollCards} from '../../../../../virtual-scroll/test/cards/app.module';
+import {AppModule as VirtualScrollImageGallery} from '../../../../../virtual-scroll/test/image-gallery/app.module';
+import {AppModule as VirtualScrollInfiniteScroll} from '../../../../../virtual-scroll/test/infinite-scroll/app.module';
+import {AppModule as VirtualScrollList} from '../../../../../virtual-scroll/test/list/app.module';
+import {AppModule as VirtualScrollMedia} from '../../../../../virtual-scroll/test/media/app/app.module';
+import {AppModule as VirtualScrollSlidingItem} from '../../../../../virtual-scroll/test/sliding-item/app.module';
+import {AppModule as VirtualScrollVariableSize} from '../../../../../virtual-scroll/test/variable-size/app.module';
+
+
+@NgModule({
+ declarations: [
+ ComponentsPage
+ ],
+ imports: [
+ IonicPageModule.forChild(ComponentsPage),
+
+ ActionSheetBasic,
+
+ AlertBasic,
+ AlertDismiss,
+
+ AppAnimations,
+ AppCordova,
+ AppGestureCollision,
+ AppGestures,
+ AppTypography,
+ AppUtilities,
+
+ BadgeBasic,
+
+ ButtonAnchors,
+ ButtonAttributes,
+ ButtonBasic,
+ ButtonBlock,
+ ButtonClear,
+ ButtonDecorator,
+ ButtonDynamic,
+ ButtonFull,
+ ButtonIcons,
+ ButtonOutline,
+ ButtonRaised,
+ ButtonRound,
+ ButtonSizes,
+
+ CardAdvanced,
+ CardBasic,
+ CardColors,
+ CardImages,
+ CardList,
+ CardMap,
+ CardSocial,
+
+ CheckboxBasic,
+
+ ChipBasic,
+
+ ContentBasic,
+ ContentFullscreen,
+ ContentHeaderScroll,
+ ContentNoBounce,
+ ContentScrollDownOnLoad,
+
+ DatetimeBasic,
+ DatetimeForm,
+ DatetimeIssues,
+ DatetimeLabels,
+
+ FabBasic,
+
+ GridAlignment,
+ GridBasic,
+ GridCard,
+ GridFull,
+ GridResponsive,
+
+ IconBasic,
+
+ ImgBasic,
+ ImgCards,
+ ImgLazyLoad,
+ ImgList,
+
+ InfiniteScrollBasic,
+ InfiniteScrollPositionTop,
+ InfiniteScrollShortList,
+
+ InputBasicForm,
+ InputClearAfterEdit,
+ InputClearInput,
+ InputEvents,
+ InputFixedInlineLabels,
+ InputFloatingLabels,
+ InputFooterInputs,
+ InputFormInputs,
+ InputHighlight,
+ InputInlineLabels,
+ InputInputFocus,
+ InputInsetInputs,
+ InputPlaceholderLabels,
+ InputStackedLabels,
+
+ ItemButtons,
+ ItemColors,
+ ItemDividers,
+ ItemGroups,
+ ItemIcons,
+ ItemImages,
+ ItemInputs,
+ ItemMedia,
+ ItemReorder,
+ ItemSliding,
+ ItemText,
+
+ ListChatList,
+ ListHeaderScenarios,
+ ListHeaders,
+ ListInset,
+ ListNoLines,
+ ListRepeatHeaders,
+ ListSticky,
+
+ LoadingBasic,
+ LoadingTabs,
+
+ MenuBasic,
+ // MenuDisableSwipe, TODO
+ // MenuEnableDisable, TODO
+ MenuMultiple,
+ MenuOverlay,
+ MenuPush,
+ MenuReveal,
+
+ ModalBasic,
+
+ NavBasic,
+ NavChildNavs,
+ NavInitAsync,
+ NavInsertViews,
+ NavMemory,
+ NavNavPushPop,
+ NavWorstCase,
+
+ PickerBasic,
+
+ PopoverBasic,
+
+ RadioBasic,
+
+ RangeBasic,
+
+ RefresherBasic,
+ // RefresherNavigation, TODO
+
+ ScrollBasic,
+
+ SearchbarBasic,
+ SearchbarNav,
+ SearchbarToolbar,
+
+ SegmentBasic,
+ SegmentNav,
+ SegmentSwipe,
+
+ SelectMultipleValue,
+ SelectSingleValue,
+
+ ShowHideWhenBasic,
+
+ SlidesBasic,
+ SlidesControl,
+ SlidesController,
+ SlidesImages,
+ SlidesIntro,
+ SlidesLoop,
+ SlidesOptions,
+ SlidesRTL,
+ SlidesScroll,
+
+ SpinnerBasic,
+ SpinnerColors,
+
+ SplitPaneBasic,
+ SplitPaneMenus,
+ SplitPaneNested,
+ SplitPaneTabs,
+
+ TabsAdvanced,
+ TabsBadges,
+ TabsBasic,
+ TabsColors,
+ TabsEvents,
+ TabsGhost,
+ TabsLifecycle,
+ TabsTabBarScenarios,
+ TabsTop,
+
+ ToastBasic,
+
+ ToggleBasic,
+
+ ToolbarBasic,
+ ToolbarColors,
+ ToolbarScenarios,
+
+ TypographyBasic,
+
+ VirtualScrollBasic,
+ VirtualScrollCards,
+ VirtualScrollImageGallery,
+ VirtualScrollInfiniteScroll,
+ VirtualScrollList,
+ VirtualScrollMedia,
+ VirtualScrollSlidingItem,
+ VirtualScrollVariableSize,
+ ],
+ entryComponents: [
+ ComponentsPage
+ ]
+})
+export class ComponentsModule {
+}
diff --git a/src/components/snapshot/test/basic/pages/components/components.ts b/src/components/snapshot/test/basic/pages/components/components.ts
new file mode 100644
index 0000000000..4389e6960b
--- /dev/null
+++ b/src/components/snapshot/test/basic/pages/components/components.ts
@@ -0,0 +1,574 @@
+import {Component} from '@angular/core';
+import {IonicPage} from '../../../../../../';
+
+import {AssistiveTouchProvider} from '../../providers/assistive-touch/assistive-touch';
+import {NavController} from '../../../../../../navigation/nav-controller';
+
+import {AppComponent as ActionSheetBasic} from '../../../../../action-sheet/test/basic/app/app.component';
+
+import {AppComponent as AlertBasic} from '../../../../../alert/test/basic/app/app.component';
+import {AppComponent as AlertDismiss} from '../../../../../alert/test/dismiss/app.module';
+
+import {AppComponent as AppAnimations} from '../../../../../app/test/animations/app.module';
+import {AppComponent as AppCordova} from '../../../../../app/test/cordova/app/app.component';
+import {AppComponent as AppGestureCollision} from '../../../../../app/test/gesture-collision/app/app.component';
+import {AppComponent as AppGestures} from '../../../../../app/test/gestures/app.module';
+import {AppComponent as AppTypography} from '../../../../../app/test/typography/app/app.component';
+import {AppComponent as AppUtilities} from '../../../../../app/test/utilities/app/app.component';
+
+import {AppComponent as BadgeBasic} from '../../../../../badge/test/basic/app/app.component';
+
+import {AppComponent as ButtonAnchors} from '../../../../../button/test/anchors/app/app.component';
+import {AppComponent as ButtonAttributes} from '../../../../../button/test/attributes/app/app.component';
+import {AppComponent as ButtonBasic} from '../../../../../button/test/basic/app/app.component';
+import {AppComponent as ButtonBlock} from '../../../../../button/test/block/app/app.component';
+import {AppComponent as ButtonClear} from '../../../../../button/test/clear/app/app.component';
+import {AppComponent as ButtonDecorator} from '../../../../../button/test/decorator/app/app.component';
+import {AppComponent as ButtonDynamic} from '../../../../../button/test/dynamic/app/app.component';
+import {AppComponent as ButtonFull} from '../../../../../button/test/full/app/app.component';
+import {AppComponent as ButtonIcons} from '../../../../../button/test/icons/app/app.component';
+import {AppComponent as ButtonOutline} from '../../../../../button/test/outline/app/app.component';
+import {AppComponent as ButtonRaised} from '../../../../../button/test/raised/app.module';
+import {AppComponent as ButtonRound} from '../../../../../button/test/round/app/app.component';
+import {AppComponent as ButtonSizes} from '../../../../../button/test/sizes/app/app.component';
+
+import {AppComponent as CardAdvanced} from '../../../../../card/test/advanced/app/app.component';
+import {AppComponent as CardBasic} from '../../../../../card/test/basic/app/app.component';
+import {AppComponent as CardColors} from '../../../../../card/test/colors/app/app.component';
+import {AppComponent as CardImages} from '../../../../../card/test/images/app/app.component';
+import {AppComponent as CardList} from '../../../../../card/test/list/app/app.component';
+import {AppComponent as CardMap} from '../../../../../card/test/map/app.module';
+import {AppComponent as CardSocial} from '../../../../../card/test/social/app.module';
+
+import {AppComponent as CheckboxBasic} from '../../../../../checkbox/test/basic/app/app.component';
+
+import {AppComponent as ChipBasic} from '../../../../../chip/test/basic/app/app.component';
+
+import {AppComponent as ContentBasic} from '../../../../../content/test/basic/app/app.component';
+import {AppComponent as ContentFullscreen} from '../../../../../content/test/fullscreen/app/app.component';
+import {AppComponent as ContentHeaderScroll} from '../../../../../content/test/header-scroll/app.module';
+import {AppComponent as ContentNoBounce} from '../../../../../content/test/no-bounce/app/app.component';
+import {AppComponent as ContentScrollDownOnLoad} from '../../../../../content/test/scroll-down-on-load/app/app.component';
+
+import {AppComponent as DatetimeBasic} from '../../../../../datetime/test/basic/app/app.component';
+import {AppComponent as DatetimeForm} from '../../../../../datetime/test/form/app.module';
+import {AppComponent as DatetimeIssues} from '../../../../../datetime/test/issues/app/app.component';
+import {AppComponent as DatetimeLabels} from '../../../../../datetime/test/labels/app/app.component';
+
+import {AppComponent as FabBasic} from '../../../../../fab/test/basic/app/app.component';
+
+import {AppComponent as GridAlignment} from '../../../../../grid/test/alignment/app.module';
+import {AppComponent as GridBasic} from '../../../../../grid/test/basic/app/app.component';
+import {AppComponent as GridCard} from '../../../../../grid/test/card/app.module';
+import {AppComponent as GridFull} from '../../../../../grid/test/full/app.module';
+import {AppComponent as GridResponsive} from '../../../../../grid/test/responsive/app.module';
+
+import {AppComponent as IconBasic} from '../../../../../icon/test/basic/app/app.component';
+
+import {AppComponent as ImgBasic} from '../../../../../img/test/basic/app/app.component';
+import {AppComponent as ImgCards} from '../../../../../img/test/cards/app.module';
+import {AppComponent as ImgLazyLoad} from '../../../../../img/test/lazy-load/app.module';
+import {AppComponent as ImgList} from '../../../../../img/test/list/app.module';
+
+import {AppComponent as InfiniteScrollBasic} from '../../../../../infinite-scroll/test/basic/app.module';
+import {AppComponent as InfiniteScrollPositionTop} from '../../../../../infinite-scroll/test/position-top/app/app.component';
+import {AppComponent as InfiniteScrollShortList} from '../../../../../infinite-scroll/test/short-list/app.module';
+
+import {AppComponent as InputBasicForm} from '../../../../../input/test/basic-form/app/app.component';
+import {AppComponent as InputClearAfterEdit} from '../../../../../input/test/clear-after-edit/app/app.component';
+import {AppComponent as InputClearInput} from '../../../../../input/test/clear-input/app/app.component';
+import {AppComponent as InputEvents} from '../../../../../input/test/events/app/app.component';
+import {AppComponent as InputFixedInlineLabels} from '../../../../../input/test/fixed-inline-labels/app/app.component';
+import {AppComponent as InputFloatingLabels} from '../../../../../input/test/floating-labels/app/app.component';
+import {AppComponent as InputFooterInputs} from '../../../../../input/test/footer-inputs/app/app.component';
+import {AppComponent as InputFormInputs} from '../../../../../input/test/form-inputs/app/app.component';
+import {AppComponent as InputHighlight} from '../../../../../input/test/highlight/app/app.component';
+import {AppComponent as InputInlineLabels} from '../../../../../input/test/inline-labels/app/app.component';
+import {AppComponent as InputInputFocus} from '../../../../../input/test/input-focus/app/app.module';
+import {AppComponent as InputInsetInputs} from '../../../../../input/test/inset-inputs/app/app.component';
+import {AppComponent as InputPlaceholderLabels} from '../../../../../input/test/placeholder-labels/app/app.component';
+import {AppComponent as InputStackedLabels} from '../../../../../input/test/stacked-labels/app/app.component';
+
+import {AppComponent as ItemButtons} from '../../../../../item/test/buttons/app/app.component';
+import {AppComponent as ItemColors} from '../../../../../item/test/colors/app/app.component';
+import {AppComponent as ItemDividers} from '../../../../../item/test/dividers/app/app.component';
+import {AppComponent as ItemGroups} from '../../../../../item/test/groups/app/app.component';
+import {AppComponent as ItemIcons} from '../../../../../item/test/icons/app/app.component';
+import {AppComponent as ItemImages} from '../../../../../item/test/images/app/app.component';
+import {AppComponent as ItemInputs} from '../../../../../item/test/inputs/app/app.component';
+import {AppComponent as ItemMedia} from '../../../../../item/test/media/app/app.component';
+import {AppComponent as ItemReorder} from '../../../../../item/test/reorder/app/app.module';
+import {AppComponent as ItemSliding} from '../../../../../item/test/sliding/app/app.component';
+import {AppComponent as ItemText} from '../../../../../item/test/text/app/app.component';
+
+import {AppComponent as ListChatList} from '../../../../../list/test/chat-list/app.module';
+import {AppComponent as ListHeaderScenarios} from '../../../../../list/test/header-scenarios/app/app.component';
+import {AppComponent as ListHeaders} from '../../../../../list/test/headers/app/app.component';
+import {AppComponent as ListInset} from '../../../../../list/test/inset/app/app.component';
+import {AppComponent as ListNoLines} from '../../../../../list/test/no-lines/app/app.component';
+import {AppComponent as ListRepeatHeaders} from '../../../../../list/test/repeat-headers/app.module';
+import {AppComponent as ListSticky} from '../../../../../list/test/sticky/app.module';
+
+import {AppComponent as LoadingBasic} from '../../../../../loading/test/basic/app/app.component';
+import {AppComponent as LoadingTabs} from '../../../../../tabs/test/basic/app/app.component';
+
+import {AppComponent as MenuBasic} from '../../../../../menu/test/basic/app/app.component';
+// import {AppComponent as MenuDisableSwipe} from '../../../../../menu/test/disable-swipe/app.module';
+// import {AppComponent as MenuEnableDisable} from '../../../../../menu/test/enable-disable/app.module';
+import {AppComponent as MenuMultiple} from '../../../../../menu/test/multiple/app/app.component';
+import {AppComponent as MenuOverlay} from '../../../../../menu/test/overlay/app.module';
+import {AppComponent as MenuPush} from '../../../../../menu/test/push/app.module';
+import {AppComponent as MenuReveal} from '../../../../../menu/test/reveal/app.module';
+
+import {AppComponent as ModalBasic} from '../../../../../modal/test/basic/app/app.component';
+
+import {AppComponent as NavBasic} from '../../../../../nav/test/basic/app/app.component';
+import {AppComponent as NavChildNavs} from '../../../../../nav/test/child-navs/app/app.component';
+import {AppComponent as NavInitAsync} from '../../../../../nav/test/init-async/app.module';
+import {AppComponent as NavInsertViews} from '../../../../../nav/test/insert-views/app.module';
+import {AppComponent as NavMemory} from '../../../../../nav/test/memory/app.module';
+import {AppComponent as NavNavPushPop} from '../../../../../nav/test/nav-push-pop/app.module';
+import {AppComponent as NavWorstCase} from '../../../../../nav/test/worst-case/app.module';
+
+import {AppComponent as PickerBasic} from '../../../../../picker/test/basic/app/app.component';
+
+import {AppComponent as PopoverBasic} from '../../../../../popover/test/basic/app/app.component';
+
+import {AppComponent as RadioBasic} from '../../../../../radio/test/basic/app/app.component';
+
+import {AppComponent as RangeBasic} from '../../../../../range/test/basic/app/app.component';
+
+import {AppComponent as RefresherBasic} from '../../../../../refresher/test/basic/app.module';
+// import {AppComponent as RefresherNavigation} from '../../../../../refresher/test/navigation/app.module';
+
+import {AppComponent as ScrollBasic} from '../../../../../scroll/test/basic/app.module';
+
+import {AppComponent as SearchbarBasic} from '../../../../../searchbar/test/basic/app/app.component';
+import {AppComponent as SearchbarNav} from '../../../../../searchbar/test/nav/app/app.component';
+import {AppComponent as SearchbarToolbar} from '../../../../../searchbar/test/toolbar/app/app.component';
+
+import {AppComponent as SegmentBasic} from '../../../../../segment/test/basic/app/app.component';
+import {AppComponent as SegmentNav} from '../../../../../segment/test/nav/app/app.component';
+import {AppComponent as SegmentSwipe} from '../../../../../segment/test/swipe/app/app.component';
+
+import {AppComponent as SelectMultipleValue} from '../../../../../select/test/multiple-value/app/app.component';
+import {AppComponent as SelectSingleValue} from '../../../../../select/test/single-value/app/app.component';
+
+import {AppComponent as ShowHideWhenBasic} from '../../../../../show-hide-when/test/basic/app.module';
+
+import {AppComponent as SlidesBasic} from '../../../../../slides/test/basic/app.module';
+import {AppComponent as SlidesControl} from '../../../../../slides/test/control/app.module';
+import {AppComponent as SlidesController} from '../../../../../slides/test/controller/app.module';
+import {AppComponent as SlidesImages} from '../../../../../slides/test/images/app.module';
+import {AppComponent as SlidesIntro} from '../../../../../slides/test/intro/app.module';
+import {AppComponent as SlidesLoop} from '../../../../../slides/test/loop/app.module';
+import {AppComponent as SlidesOptions} from '../../../../../slides/test/options/app.module';
+import {E2EApp as SlidesRTL} from '../../../../../slides/test/rtl/app.module';
+import {AppComponent as SlidesScroll} from '../../../../../slides/test/scroll/app.module';
+
+import {AppComponent as SpinnerBasic} from '../../../../../spinner/test/basic/app.module';
+import {AppComponent as SpinnerColors} from '../../../../../spinner/test/colors/app.module';
+
+import {AppComponent as SplitPaneBasic} from '../../../../../split-pane/test/basic/app/app.component';
+import {AppComponent as SplitPaneMenus} from '../../../../../split-pane/test/menus/app/app.component';
+import {AppComponent as SplitPaneNested} from '../../../../../split-pane/test/nested/app/app.component';
+import {AppComponent as SplitPaneTabs} from '../../../../../split-pane/test/tabs/app/app.component';
+
+import {AppComponent as TabsAdvanced} from '../../../../../tabs/test/advanced/app/app.component';
+import {AppComponent as TabsBadges} from '../../../../../tabs/test/badges/app/app.component';
+import {AppComponent as TabsBasic} from '../../../../../tabs/test/basic/app/app.component';
+import {AppComponent as TabsColors} from '../../../../../tabs/test/colors/app/app.component';
+import {AppComponent as TabsEvents} from '../../../../../tabs/test/events/app.module';
+import {TabsPage as TabsGhost} from '../../../../../tabs/test/ghost/app.module';
+import {AppComponent as TabsLifecycle} from '../../../../../tabs/test/lifecyles/app.module';
+import {AppComponent as TabsTabBarScenarios} from '../../../../../tabs/test/tab-bar-scenarios/app/app.component';
+import {AppComponent as TabsTop} from '../../../../../tabs/test/top/app.module';
+
+import {AppComponent as ToastBasic} from '../../../../../toast/test/basic/app/app.component';
+
+import {AppComponent as ToggleBasic} from '../../../../../toggle/test/basic/app/app.component';
+
+import {AppComponent as ToolbarBasic} from '../../../../../toolbar/test/basic/app/app.component';
+import {AppComponent as ToolbarColors} from '../../../../../toolbar/test/colors/app/app.component';
+import {AppComponent as ToolbarScenarios} from '../../../../../toolbar/test/scenarios/app/app.component';
+
+import {AppComponent as TypographyBasic} from '../../../../../typography/test/basic/app/app.component';
+
+import {AppComponent as VirtualScrollBasic} from '../../../../../virtual-scroll/test/basic/app.module';
+import {AppComponent as VirtualScrollCards} from '../../../../../virtual-scroll/test/cards/app.module';
+import {AppComponent as VirtualScrollImageGallery} from '../../../../../virtual-scroll/test/image-gallery/app.module';
+import {E2EApp as VirtualScrollInfiniteScroll} from '../../../../../virtual-scroll/test/infinite-scroll/app.module';
+import {AppComponent as VirtualScrollList} from '../../../../../virtual-scroll/test/list/app.module';
+import {AppComponent as VirtualScrollMedia} from '../../../../../virtual-scroll/test/media/app/app.component';
+import {AppComponent as VirtualScrollSlidingItem} from '../../../../../virtual-scroll/test/sliding-item/app.module';
+import {AppComponent as VirtualScrollVariableSize} from '../../../../../virtual-scroll/test/variable-size/app.module';
+
+
+export type ComponentsGroup = { name: string, components: Array<{ name: string, component: any }> };
+
+@IonicPage()
+@Component({
+ templateUrl: 'components.html'
+})
+export class ComponentsPage {
+ components: Array = [
+ {
+ name: 'Action Sheet',
+ components: [
+ {name: 'basic', component: ActionSheetBasic}
+ ]
+ }, {
+ name: 'Alert',
+ components: [
+ {name: 'basic', component: AlertBasic},
+ {name: 'dismiss', component: AlertDismiss}
+ ]
+ }, {
+ name: 'App',
+ components: [
+ {name: 'animations', component: AppAnimations},
+ {name: 'cordova', component: AppCordova},
+ {name: 'gesture-collision', component: AppGestureCollision},
+ {name: 'gestures', component: AppGestures},
+ {name: 'typography', component: AppTypography},
+ {name: 'utilities', component: AppUtilities}
+ ]
+ }, {
+ name: 'Avatar',
+ components: []
+ }, {
+ name: 'Backdrop',
+ components: []
+ }, {
+ name: 'Badge',
+ components: [
+ {name: 'basic', component: BadgeBasic}
+ ]
+ }, {
+ name: 'Button',
+ components: [
+ {name: 'anchors', component: ButtonAnchors},
+ {name: 'attributes', component: ButtonAttributes},
+ {name: 'basic', component: ButtonBasic},
+ {name: 'block', component: ButtonBlock},
+ {name: 'clear', component: ButtonClear},
+ {name: 'decorator', component: ButtonDecorator},
+ {name: 'dynamic', component: ButtonDynamic},
+ {name: 'full', component: ButtonFull},
+ {name: 'icons', component: ButtonIcons},
+ {name: 'outline', component: ButtonOutline},
+ {name: 'raised', component: ButtonRaised},
+ {name: 'round', component: ButtonRound},
+ {name: 'sizes', component: ButtonSizes}
+ ]
+ }, {
+ name: 'Card',
+ components: [
+ {name: 'advanced', component: CardAdvanced},
+ {name: 'basic', component: CardBasic},
+ {name: 'colors', component: CardColors},
+ {name: 'images', component: CardImages},
+ {name: 'list', component: CardList},
+ {name: 'map', component: CardMap},
+ {name: 'social', component: CardSocial}
+ ]
+ }, {
+ name: 'Checkbox',
+ components: [
+ {name: 'basic', component: CheckboxBasic}
+ ]
+ }, {
+ name: 'Chip',
+ components: [
+ {name: 'basic', component: ChipBasic}
+ ]
+ }, {
+ name: 'Content',
+ components: [
+ {name: 'basic', component: ContentBasic},
+ {name: 'fullscreen', component: ContentFullscreen},
+ {name: 'header-scroll', component: ContentHeaderScroll},
+ {name: 'no-bounce', component: ContentNoBounce},
+ {name: 'scroll-down-on-load', component: ContentScrollDownOnLoad}
+ ]
+ }, {
+ name: 'Datetime',
+ components: [
+ {name: 'basic', component: DatetimeBasic},
+ {name: 'form', component: DatetimeForm},
+ {name: 'issues', component: DatetimeIssues},
+ {name: 'labels', component: DatetimeLabels}
+ ]
+ }, {
+ name: 'Fab',
+ components: [
+ {name: 'basic', component: FabBasic}
+ ]
+ }, {
+ name: 'Grid',
+ components: [
+ {name: 'alignment', component: GridAlignment},
+ {name: 'basic', component: GridBasic},
+ {name: 'card', component: GridCard},
+ {name: 'full', component: GridFull},
+ {name: 'responsive', component: GridResponsive}
+ ]
+ }, {
+ name: 'Icon',
+ components: [
+ {name: 'basic', component: IconBasic}
+ ]
+ }, {
+ name: 'Img',
+ components: [
+ {name: 'basic', component: ImgBasic},
+ {name: 'cards', component: ImgCards},
+ {name: 'lazy-load', component: ImgLazyLoad},
+ {name: 'list', component: ImgList}
+ ]
+ }, {
+ name: 'Infinite Scroll',
+ components: [
+ {name: 'basic', component: InfiniteScrollBasic},
+ {name: 'position-top', component: InfiniteScrollPositionTop},
+ {name: 'short-list', component: InfiniteScrollShortList}
+ ]
+ }, {
+ name: 'Inputs',
+ components: [
+ {name: 'basic-form', component: InputBasicForm},
+ {name: 'clear-after-edit', component: InputClearAfterEdit},
+ {name: 'clear-input', component: InputClearInput},
+ {name: 'events', component: InputEvents},
+ {name: 'fixed-inline-labels', component: InputFixedInlineLabels},
+ {name: 'floating-labels', component: InputFloatingLabels},
+ {name: 'footer-inputs', component: InputFooterInputs},
+ {name: 'form-inputs', component: InputFormInputs},
+ {name: 'highlight', component: InputHighlight},
+ {name: 'inline-labels', component: InputInlineLabels},
+ {name: 'input-focus', component: InputInputFocus},
+ {name: 'inset-inputs', component: InputInsetInputs},
+ {name: 'placeholder-labels', component: InputPlaceholderLabels},
+ {name: 'stacked-labels', component: InputStackedLabels}
+ ]
+ }, {
+ name: 'Item',
+ components: [
+ {name: 'buttons', component: ItemButtons},
+ {name: 'colors', component: ItemColors},
+ {name: 'dividers', component: ItemDividers},
+ {name: 'groups', component: ItemGroups},
+ {name: 'icons', component: ItemIcons},
+ {name: 'images', component: ItemImages},
+ {name: 'inputs', component: ItemInputs},
+ {name: 'media', component: ItemMedia},
+ {name: 'reorder', component: ItemReorder},
+ {name: 'sliding', component: ItemSliding},
+ {name: 'text', component: ItemText}
+ ]
+ }, {
+ name: 'Label',
+ components: []
+ }, {
+ name: 'List',
+ components: [
+ {name: 'chat-list', component: ListChatList},
+ {name: 'header-scenarios', component: ListHeaderScenarios},
+ {name: 'headers', component: ListHeaders},
+ {name: 'inset', component: ListInset},
+ {name: 'no-lines', component: ListNoLines},
+ {name: 'repeat-headers', component: ListRepeatHeaders},
+ {name: 'sticky', component: ListSticky},
+ ]
+ }, {
+ name: 'Loading',
+ components: [
+ {name: 'basic', component: LoadingBasic},
+ {name: 'tabs', component: LoadingTabs}
+ ]
+ }, {
+ name: 'Menu',
+ components: [
+ {name: 'basic', component: MenuBasic},
+ // {name: 'disable-swipe', component: MenuDisableSwipe},
+ // {name: 'enable-disable', component: MenuEnableDisable},
+ {name: 'multiple', component: MenuMultiple},
+ {name: 'overlay', component: MenuOverlay},
+ {name: 'push', component: MenuPush},
+ {name: 'reveal', component: MenuReveal},
+ ]
+ }, {
+ name: 'Modal',
+ components: [
+ {name: 'basic', component: ModalBasic}
+ ]
+ }, {
+ name: 'Nav',
+ components: [
+ {name: 'basic', component: NavBasic},
+ {name: 'child-navs', component: NavChildNavs},
+ {name: 'init-async', component: NavInitAsync},
+ {name: 'insert-views', component: NavInsertViews},
+ {name: 'memory', component: NavMemory},
+ {name: 'nav-push-pop', component: NavNavPushPop},
+ {name: 'worst-case', component: NavWorstCase}
+ ]
+ }, {
+ name: 'Note',
+ components: []
+ }, {
+ name: 'Option',
+ components: []
+ }, {
+ name: 'Picker',
+ components: [
+ {name: 'basic', component: PickerBasic}
+ ]
+ }, {
+ name: 'Popover',
+ components: [
+ {name: 'basic', component: PopoverBasic}
+ ]
+ }, {
+ name: 'Radio',
+ components: [
+ {name: 'basic', component: RadioBasic}
+ ]
+ }, {
+ name: 'Range',
+ components: [
+ {name: 'basic', component: RangeBasic}
+ ]
+ }, {
+ name: 'Refresher',
+ components: [
+ {name: 'basic', component: RefresherBasic},
+ // {name: 'navigation', component: RefresherNavigation}
+ ]
+ }, {
+ name: 'Scroll',
+ components: [
+ {name: 'basic', component: ScrollBasic}
+ ]
+ }, {
+ name: 'Searchbar',
+ components: [
+ {name: 'basic', component: SearchbarBasic},
+ {name: 'nav', component: SearchbarNav},
+ {name: 'toolbar', component: SearchbarToolbar},
+ ]
+ }, {
+ name: 'Segment',
+ components: [
+ {name: 'basic', component: SegmentBasic},
+ {name: 'nav', component: SegmentNav},
+ {name: 'swipe', component: SegmentSwipe},
+ ]
+ }, {
+ name: 'Select',
+ components: [
+ {name: 'multiple-value', component: SelectMultipleValue},
+ {name: 'single-value', component: SelectSingleValue}
+ ]
+ }, {
+ name: 'Show-hide-when',
+ components: [
+ {name: 'basic', component: ShowHideWhenBasic}
+ ]
+ }, {
+ name: 'Show-hide-when',
+ components: [
+ {name: 'basic', component: SlidesBasic},
+ {name: 'control', component: SlidesControl},
+ {name: 'controller', component: SlidesController},
+ {name: 'images', component: SlidesImages},
+ {name: 'intro', component: SlidesIntro},
+ {name: 'loop', component: SlidesLoop},
+ {name: 'options', component: SlidesOptions},
+ {name: 'rtl', component: SlidesRTL},
+ {name: 'scroll', component: SlidesScroll},
+ ]
+ }, {
+ name: 'Spinner',
+ components: [
+ {name: 'basic', component: SpinnerBasic},
+ {name: 'colors', component: SpinnerColors}
+ ]
+ }, {
+ name: 'Split-pane',
+ components: [
+ {name: 'basic', component: SplitPaneBasic},
+ {name: 'menus', component: SplitPaneMenus},
+ {name: 'nested', component: SplitPaneNested},
+ {name: 'tabs', component: SplitPaneTabs}
+ ]
+ }, {
+ name: 'Tabs',
+ components: [
+ {name: 'advanced', component: TabsAdvanced},
+ {name: 'badges', component: TabsBadges},
+ {name: 'basic', component: TabsBasic},
+ {name: 'colors', component: TabsColors},
+ {name: 'events', component: TabsEvents},
+ {name: 'ghost', component: TabsGhost},
+ {name: 'lifecyles', component: TabsLifecycle},
+ {name: 'tab-bar-scenarios', component: TabsTabBarScenarios},
+ {name: 'top', component: TabsTop}
+ ]
+ }, {
+ name: 'Thumbnail',
+ components: []
+ }, {
+ name: 'Toast',
+ components: [
+ {name: 'basic', component: ToastBasic}
+ ]
+ }, {
+ name: 'Toggle',
+ components: [
+ {name: 'basic', component: ToastBasic}
+ ]
+ }, {
+ name: 'Toggle',
+ components: [
+ {name: 'basic', component: ToggleBasic}
+ ]
+ }, {
+ name: 'Toolbar',
+ components: [
+ {name: 'basic', component: ToolbarBasic},
+ {name: 'colors', component: ToolbarColors},
+ {name: 'scenarios', component: ToolbarScenarios}
+ ]
+ }, {
+ name: 'Typography',
+ components: [
+ {name: 'basic', component: TypographyBasic}
+ ]
+ }, {
+ name: 'Virtual-scroll',
+ components: [
+ {name: 'basic', component: VirtualScrollBasic},
+ {name: 'cards', component: VirtualScrollCards},
+ {name: 'image-gallery', component: VirtualScrollImageGallery},
+ {name: 'infinite-scroll', component: VirtualScrollInfiniteScroll},
+ {name: 'list', component: VirtualScrollList},
+ {name: 'media', component: VirtualScrollMedia},
+ {name: 'sliding-item', component: VirtualScrollSlidingItem},
+ {name: 'variable-size', component: VirtualScrollVariableSize},
+ ]
+ }
+ ];
+
+ constructor(private navCtrl: NavController, private assistive: AssistiveTouchProvider) {
+ assistive.closeButton.subscribe(this.close.bind(this));
+ }
+
+ open(component: any) {
+ this.navCtrl.push(component);
+ }
+
+ close() {
+ this.navCtrl.popToRoot();
+ }
+}
diff --git a/src/components/snapshot/test/basic/providers/assistive-touch/assistive-touch.ts b/src/components/snapshot/test/basic/providers/assistive-touch/assistive-touch.ts
new file mode 100644
index 0000000000..cb5afde693
--- /dev/null
+++ b/src/components/snapshot/test/basic/providers/assistive-touch/assistive-touch.ts
@@ -0,0 +1,6 @@
+import {EventEmitter, Injectable} from '@angular/core';
+
+@Injectable()
+export class AssistiveTouchProvider {
+ public closeButton: EventEmitter = new EventEmitter();
+}