diff --git a/packages/core/package.json b/packages/core/package.json index 5ef8857165..5ccb2687b1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -24,6 +24,7 @@ }, "scripts": { "build": "stencil build", + "tsc": "tsc -p .", "dev": "sd concurrent \"stencil build --dev --watch\" \"stencil-dev-server\"", "e2e": "node ./scripts/run-e2e.js", "snapshot": "node ./scripts/e2e.js --snapshot", diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts index b06fe7a0ec..219a43393a 100644 --- a/packages/core/src/components.d.ts +++ b/packages/core/src/components.d.ts @@ -12,6 +12,7 @@ import { import { AnimationBuilder, PickerOptions, + FrameworkDelegate, PickerColumn, } from './index'; import { @@ -26,9 +27,6 @@ import { GestureCallback, GestureDetail, } from './components/gesture/gesture.js'; -import { - FrameworkDelegate, -} from './navigation/nav-interfaces'; import { PickerButton, PickerColumn as PickerColumn2, @@ -212,7 +210,7 @@ declare global { import { - IonApp as IonApp + App as IonApp } from './components/app/app'; declare global { @@ -961,7 +959,7 @@ declare global { import { - Col as IonCol + Column as IonCol } from './components/grid/col'; declare global { @@ -1408,7 +1406,7 @@ declare global { import { - IonKeyboardController as IonKeyboardController + KeyboardController as IonKeyboardController } from './components/keyboard-controller/keyboard-controller'; declare global { @@ -1604,7 +1602,7 @@ declare global { import { MenuController as IonMenuController -} from './components/menu/menu-controller'; +} from './components/menu-controller/menu-controller'; declare global { interface HTMLIonMenuControllerElement extends IonMenuController, HTMLElement { @@ -1741,7 +1739,7 @@ declare global { import { - NavControllerImpl as IonNavController + NavController as IonNavController } from './components/nav-controller/nav-controller'; declare global { @@ -1802,7 +1800,7 @@ declare global { import { - IonNav as IonNav + Nav as IonNav } from './components/nav/nav'; declare global { diff --git a/packages/core/src/components/action-sheet/action-sheet.tsx b/packages/core/src/components/action-sheet/action-sheet.tsx index 7c900904bf..19cd17f8fc 100644 --- a/packages/core/src/components/action-sheet/action-sheet.tsx +++ b/packages/core/src/components/action-sheet/action-sheet.tsx @@ -274,3 +274,5 @@ export interface ActionSheetEvent extends Event { actionSheet: ActionSheet; }; } + +export { iOSEnterAnimation, iOSLeaveAnimation }; diff --git a/packages/core/src/components/alert/alert.tsx b/packages/core/src/components/alert/alert.tsx index aea6c8f709..8e5570ef50 100644 --- a/packages/core/src/components/alert/alert.tsx +++ b/packages/core/src/components/alert/alert.tsx @@ -475,3 +475,5 @@ export interface AlertEvent extends Event { alert: Alert; }; } + +export { iOSEnterAnimation, iOSLeaveAnimation }; diff --git a/packages/core/src/components/app/app-interfaces.ts b/packages/core/src/components/app/app-interfaces.ts deleted file mode 100644 index cd72485fb0..0000000000 --- a/packages/core/src/components/app/app-interfaces.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Config } from '../..'; -export interface App { - element?: HTMLElement; - config?: Config; -} diff --git a/packages/core/src/components/app/app.tsx b/packages/core/src/components/app/app.tsx index 4786801c27..3b61d3e239 100644 --- a/packages/core/src/components/app/app.tsx +++ b/packages/core/src/components/app/app.tsx @@ -1,7 +1,5 @@ import { Component, Element, Listen, Prop } from '@stencil/core'; -import { Nav, NavContainer } from '../../navigation/nav-interfaces'; -import { Config } from '../..'; -import { App } from './app-interfaces'; +import { Config, Nav, NavContainer } from '../../index'; import { isReady } from '../../utils/helpers'; const rootNavs = new Map(); @@ -16,14 +14,14 @@ const rootNavs = new Map(); theme: 'app' } }) -export class IonApp implements App { +export class App { @Element() element: HTMLElement; @Prop({ context: 'config' }) config: Config; @Listen('body:navInit') registerRootNav(event: CustomEvent) { - rootNavs.set((event.detail as Nav).id, (event.detail as Nav)); + rootNavs.set((event.detail as Nav).navId, (event.detail as Nav)); } @@ -32,7 +30,7 @@ export class IonApp implements App { componentDidLoadImpl(this); } - getActiveNavs(rootNavId?: number): Nav[] { + getActiveNavs(rootNavId?: number): NavContainer[] { /*const portal = portals.get(PORTAL_MODAL); if (portal && portal.views && portal.views.length) { return findTopNavs(portal); @@ -49,7 +47,7 @@ export class IonApp implements App { return findTopNavs(rootNavs.values().next().value); } // fallback to just using all root navs - let activeNavs: Nav[] = []; + let activeNavs: NavContainer[] = []; rootNavs.forEach(nav => { activeNavs = activeNavs.concat(findTopNavs(nav)); }); diff --git a/packages/core/src/components/datetime/datetime-util.ts b/packages/core/src/components/datetime/datetime-util.ts index 05c5ce4dfc..c2720d7b83 100644 --- a/packages/core/src/components/datetime/datetime-util.ts +++ b/packages/core/src/components/datetime/datetime-util.ts @@ -270,7 +270,7 @@ export function updateDate(existingData: DatetimeData, newData: any): boolean { } else { // blank data, clear everything out - for (var k in existingData) { + for (let k in existingData) { delete (existingData)[k]; } } diff --git a/packages/core/src/components/datetime/datetime.tsx b/packages/core/src/components/datetime/datetime.tsx index c36a69e09f..e8d5dd1f58 100644 --- a/packages/core/src/components/datetime/datetime.tsx +++ b/packages/core/src/components/datetime/datetime.tsx @@ -1,6 +1,22 @@ import { Component, CssClassMap, Event, EventEmitter, Prop, PropDidChange, State } from '@stencil/core'; -import { DatetimeData, LocaleData, convertFormatToKey, convertToArrayOfNumbers, convertToArrayOfStrings, dateDataSortValue, dateSortValue, dateValueRange, daysInMonth, getValueFromFormat, parseDate, parseTemplate, renderDatetime, renderTextFormat, updateDate } from './datetime-util'; +import { + DatetimeData, + LocaleData, + convertFormatToKey, + convertToArrayOfNumbers, + convertToArrayOfStrings, + dateDataSortValue, + dateSortValue, + dateValueRange, + daysInMonth, + getValueFromFormat, + parseDate, + parseTemplate, + renderDatetime, + renderTextFormat, + updateDate +} from './datetime-util'; import { clamp, isBlank, isObject } from '../../utils/helpers'; diff --git a/packages/core/src/components/grid/col.tsx b/packages/core/src/components/grid/col.tsx index 1d744be31e..8aed98ad68 100644 --- a/packages/core/src/components/grid/col.tsx +++ b/packages/core/src/components/grid/col.tsx @@ -26,6 +26,6 @@ import { Component } from '@stencil/core'; @Component({ tag: 'ion-col' }) -export class Col { +export class Column { } diff --git a/packages/core/src/components/keyboard-controller/keyboard-controller.tsx b/packages/core/src/components/keyboard-controller/keyboard-controller.tsx index 631d6a0be2..2691f6e463 100644 --- a/packages/core/src/components/keyboard-controller/keyboard-controller.tsx +++ b/packages/core/src/components/keyboard-controller/keyboard-controller.tsx @@ -14,10 +14,9 @@ let timeoutValue: number = null; @Component({ tag: 'ion-keyboard-controller' }) -export class IonKeyboardController { +export class KeyboardController { @Prop({context: 'config'}) config: Config; - @Prop({context: 'dom'}) domController: any; /** * @output {Event} Emitted before the keyboard has shown. @@ -53,7 +52,7 @@ export class IonKeyboardController { } } -export function onCloseImpl(keyboardController: IonKeyboardController, callback: Function, pollingInterval: number, maxPollingChecks: number): Promise { +export function onCloseImpl(keyboardController: KeyboardController, callback: Function, pollingInterval: number, maxPollingChecks: number): Promise { let numChecks = 0; const promise: Promise = callback ? null : new Promise((resolve) => { @@ -75,7 +74,7 @@ export function onCloseImpl(keyboardController: IonKeyboardController, callback: return promise; } -export function componentDidLoadImpl(keyboardController: IonKeyboardController) { +export function componentDidLoadImpl(keyboardController: KeyboardController) { focusOutline(getDocument(), keyboardController.config.get('focusOutline')); if (keyboardController.config.getBoolean('keyboardResizes', false)) { listenV2(getWindow(), keyboardController); @@ -84,7 +83,7 @@ export function componentDidLoadImpl(keyboardController: IonKeyboardController) } } -export function listenV2(win: Window, keyboardController: IonKeyboardController) { +export function listenV2(win: Window, keyboardController: KeyboardController) { v2KeyboardWillShowHandler = () => { keyboardController.keyboardWillShow.emit(); }; @@ -106,7 +105,7 @@ export function listenV2(win: Window, keyboardController: IonKeyboardController) win.addEventListener('keyboardDidHide', v2KeyboardDidHideHandler); } -export function listenV1(win: Window, keyboardController: IonKeyboardController) { +export function listenV1(win: Window, keyboardController: KeyboardController) { v1keyboardHide = () => { blurActiveInput(true, keyboardController); }; @@ -118,7 +117,7 @@ export function listenV1(win: Window, keyboardController: IonKeyboardController) win.addEventListener('native.keyboardshow', v1keyboardShow); } -export function blurActiveInput(shouldBlur: boolean, keyboardController: IonKeyboardController) { +export function blurActiveInput(shouldBlur: boolean, keyboardController: KeyboardController) { clearTimeout(timeoutValue); if (shouldBlur) { timeoutValue = setTimeout(() => { diff --git a/packages/core/src/components/loading/loading.tsx b/packages/core/src/components/loading/loading.tsx index 21b52363c9..b09a6cea9f 100644 --- a/packages/core/src/components/loading/loading.tsx +++ b/packages/core/src/components/loading/loading.tsx @@ -4,7 +4,6 @@ import { Component, Element, Event, EventEmitter, Listen, Prop, State } from '@s import iOSEnterAnimation from './animations/ios.enter'; import iOSLeaveAnimation from './animations/ios.leave'; - @Component({ tag: 'ion-loading', styleUrls: { @@ -239,3 +238,5 @@ export interface LoadingEvent extends Event { loading: Loading; }; } + +export { iOSEnterAnimation, iOSLeaveAnimation } diff --git a/packages/core/src/components/menu/animations/base.ts b/packages/core/src/components/menu-controller/animations/base.ts similarity index 100% rename from packages/core/src/components/menu/animations/base.ts rename to packages/core/src/components/menu-controller/animations/base.ts diff --git a/packages/core/src/components/menu/animations/overlay.ts b/packages/core/src/components/menu-controller/animations/overlay.ts similarity index 100% rename from packages/core/src/components/menu/animations/overlay.ts rename to packages/core/src/components/menu-controller/animations/overlay.ts diff --git a/packages/core/src/components/menu/animations/push.ts b/packages/core/src/components/menu-controller/animations/push.ts similarity index 100% rename from packages/core/src/components/menu/animations/push.ts rename to packages/core/src/components/menu-controller/animations/push.ts diff --git a/packages/core/src/components/menu/animations/reveal.ts b/packages/core/src/components/menu-controller/animations/reveal.ts similarity index 100% rename from packages/core/src/components/menu/animations/reveal.ts rename to packages/core/src/components/menu-controller/animations/reveal.ts diff --git a/packages/core/src/components/menu/menu-controller.ts b/packages/core/src/components/menu-controller/menu-controller.ts similarity index 99% rename from packages/core/src/components/menu/menu-controller.ts rename to packages/core/src/components/menu-controller/menu-controller.ts index dc89dd53da..88265388d2 100644 --- a/packages/core/src/components/menu/menu-controller.ts +++ b/packages/core/src/components/menu-controller/menu-controller.ts @@ -2,8 +2,8 @@ import { Animation, AnimationBuilder, AnimationController, Menu } from '../../in import { Component, Method, Prop } from '@stencil/core'; import MenuOverlayAnimation from './animations/overlay'; -import MenuRevealAnimation from './animations/reveal'; import MenuPushAnimation from './animations/push'; +import MenuRevealAnimation from './animations/reveal'; @Component({ tag: 'ion-menu-controller' @@ -260,3 +260,5 @@ export class MenuController { } } + +export { MenuOverlayAnimation, MenuPushAnimation, MenuRevealAnimation } \ No newline at end of file diff --git a/packages/core/src/components/modal/modal.tsx b/packages/core/src/components/modal/modal.tsx index 0dc0c6f487..45a66d7317 100644 --- a/packages/core/src/components/modal/modal.tsx +++ b/packages/core/src/components/modal/modal.tsx @@ -5,7 +5,6 @@ import { createThemedClasses } from '../../utils/theme'; import iOSEnterAnimation from './animations/ios.enter'; import iOSLeaveAnimation from './animations/ios.leave'; - @Component({ tag: 'ion-modal', styleUrls: { @@ -211,3 +210,5 @@ export interface ModalEvent extends Event { modal: Modal; }; } + +export { iOSEnterAnimation, iOSLeaveAnimation }; diff --git a/packages/core/src/components/nav-controller/nav-controller.tsx b/packages/core/src/components/nav-controller/nav-controller.tsx index 928e60a954..09aa4ca5e0 100644 --- a/packages/core/src/components/nav-controller/nav-controller.tsx +++ b/packages/core/src/components/nav-controller/nav-controller.tsx @@ -1,6 +1,6 @@ import { Component, Element, Method, Prop } from '@stencil/core'; -import { Animation, AnimationController } from '../..'; -import { ComponentDataPair, FrameworkDelegate, Nav, NavController, NavOptions, ViewController } from '../../navigation/nav-interfaces'; + +import { Animation, AnimationController, ComponentDataPair, FrameworkDelegate, Nav, NavOptions, ViewController } from '../../index'; import { isReady } from '../../utils/helpers'; @@ -22,7 +22,7 @@ let defaultDelegate: FrameworkDelegate = null; @Component({ tag: 'ion-nav-controller', }) -export class NavControllerImpl implements NavController { +export class NavController { @Element() element: HTMLElement; @Prop() delegate: FrameworkDelegate; diff --git a/packages/core/src/components/nav-controller/stencil-nav-delegate.tsx b/packages/core/src/components/nav-controller/stencil-nav-delegate.tsx index 0d2eff25fe..438f960cba 100644 --- a/packages/core/src/components/nav-controller/stencil-nav-delegate.tsx +++ b/packages/core/src/components/nav-controller/stencil-nav-delegate.tsx @@ -1,7 +1,5 @@ import { Component, Method } from '@stencil/core'; - -import { StencilElement } from '../..'; -import { FrameworkDelegate, Nav, ViewController } from '../../navigation/nav-interfaces'; +import { FrameworkDelegate, Nav, ViewController } from '../../index'; @Component({ tag: 'stencil-ion-nav-delegate' diff --git a/packages/core/src/components/nav/nav.tsx b/packages/core/src/components/nav/nav.tsx index 241a1caa08..0a6d640295 100644 --- a/packages/core/src/components/nav/nav.tsx +++ b/packages/core/src/components/nav/nav.tsx @@ -1,19 +1,17 @@ import { Component, Element, Event, EventEmitter, Listen, Method, Prop } from '@stencil/core'; -import { Config } from '../..'; -import { ComponentDataPair, FrameworkDelegate, Nav, NavController, NavOptions, ViewController } from '../../navigation/nav-interfaces'; - +import { ComponentDataPair, Config, FrameworkDelegate, NavController, NavOptions, ViewController } from '../../index'; import { getActiveImpl, getFirstView, getPreviousImpl, getViews, init } from '../../navigation/nav-utils'; import { isReady } from '../../utils/helpers'; @Component({ tag: 'ion-nav', }) -export class IonNav implements Nav { - // private navId: number; +export class Nav { @Element() element: HTMLElement; @Event() navInit: EventEmitter; + navId: number; parent: Nav; views: ViewController[]; transitioning?: boolean; diff --git a/packages/core/src/components/picker/picker.tsx b/packages/core/src/components/picker/picker.tsx index 6d6878573d..4a8a916f51 100644 --- a/packages/core/src/components/picker/picker.tsx +++ b/packages/core/src/components/picker/picker.tsx @@ -4,7 +4,6 @@ import { Component, CssClassMap, Element, Event, EventEmitter, Listen, Method, P import iOSEnterAnimation from './animations/ios.enter'; import iOSLeaveAnimation from './animations/ios.leave'; - @Component({ tag: 'ion-picker', styleUrls: { @@ -425,60 +424,4 @@ export interface PickerEvent extends Event { }; } - -// @ViewChildren(PickerColumnCmp) _cols: QueryList; -// d: PickerOptions; -// enabled: boolean; -// id: number; -// mode: string; -// _gestureBlocker: BlockerDelegate; - -// constructor() { -// this.id = (++pickerIds); -// } - -// _colChange(selectedOption: PickerColumnOption) { -// // one of the columns has changed its selected index -// var picker = this._viewCtrl; -// picker.ionChange.emit(this.getSelected()); -// } - -// @HostListener('body:keyup', ['$event']) -// _keyUp(ev: KeyboardEvent) { -// if (this.enabled && this._viewCtrl.isLast()) { -// if (ev.keyCode === KEY_ENTER) { -// if (this.lastClick + 1000 < Date.now()) { -// // do not fire this click if there recently was already a click -// // this can happen when the button has focus and used the enter -// // key to click the button. However, both the click handler and -// // this keyup event will fire, so only allow one of them to go. -// console.debug('picker, enter button'); -// let button = this.d.buttons[this.d.buttons.length - 1]; -// this.btnClick(button); -// } - -// } else if (ev.keyCode === KEY_ESCAPE) { -// console.debug('picker, escape button'); -// this.bdClick(); -// } -// } -// } - -// ionViewDidEnter() { -// this._plt.focusOutActiveElement(); - -// let focusableEle = this._elementRef.nativeElement.querySelector('button'); -// if (focusableEle) { -// focusableEle.focus(); -// } -// this.enabled = true; -// } - -// ngOnDestroy() { -// assert(this._gestureBlocker.blocked === false, 'gesture blocker must be already unblocked'); -// this._gestureBlocker.destroy(); - -// } -// } - -// let pickerIds = -1; +export { iOSEnterAnimation, iOSLeaveAnimation }; diff --git a/packages/core/src/components/popover/popover.tsx b/packages/core/src/components/popover/popover.tsx index f5e04d9ead..03f781750a 100644 --- a/packages/core/src/components/popover/popover.tsx +++ b/packages/core/src/components/popover/popover.tsx @@ -346,3 +346,5 @@ export const POPOVER_POSITION_PROPERTIES: any = { centerTarget: false } }; + +export { iOSEnterAnimation, iOSLeaveAnimation }; \ No newline at end of file diff --git a/packages/core/src/components/segment/segment.tsx b/packages/core/src/components/segment/segment.tsx index c9e77662b2..9b9ce0aea9 100644 --- a/packages/core/src/components/segment/segment.tsx +++ b/packages/core/src/components/segment/segment.tsx @@ -162,5 +162,5 @@ export class Segment { export interface SegmentEvent extends Event { detail: { segment: Segment; - } + }; } diff --git a/packages/core/src/components/tabs/tab.tsx b/packages/core/src/components/tabs/tab.tsx index 50e91ffac4..ce8cae05cd 100644 --- a/packages/core/src/components/tabs/tab.tsx +++ b/packages/core/src/components/tabs/tab.tsx @@ -1,6 +1,5 @@ import { Component, Element, Event, EventEmitter, Method, Prop, PropDidChange, State } from '@stencil/core'; -import { StencilElement } from '../../index'; -import { ViewController } from '../../navigation/nav-interfaces'; +import { StencilElement, ViewController } from '../../index'; /** * @name Tab @@ -209,7 +208,8 @@ export class Tab { protected componentDidUpdate() { if (this.init && this.resolveNav) { const nav = this.el.querySelector('ion-nav') as any as StencilElement; - nav.componentOnReady(this.resolveNav); + // TODO - fix existing typings issue + nav.componentOnReady(this.resolveNav as any); this.resolveNav = null; } } diff --git a/packages/core/src/components/toast/toast.tsx b/packages/core/src/components/toast/toast.tsx index 588b972a87..8ddf3eefe3 100644 --- a/packages/core/src/components/toast/toast.tsx +++ b/packages/core/src/components/toast/toast.tsx @@ -207,3 +207,5 @@ export interface ToastEvent { toast: Toast; }; } + +export { iOSEnterAnimation, iOSLeaveAnimation }; diff --git a/packages/core/src/index.d.ts b/packages/core/src/index.d.ts index b5bcdeb365..f0c489bfd6 100644 --- a/packages/core/src/index.d.ts +++ b/packages/core/src/index.d.ts @@ -1,49 +1,170 @@ -import { Animation, AnimationBuilder, AnimationController, AnimationOptions } from './components/animation-controller/animation-interface'; -import { ActionSheet, ActionSheetButton, ActionSheetEvent, ActionSheetOptions } from './components/action-sheet/action-sheet'; -import { ActionSheetController } from './components/action-sheet-controller/action-sheet-controller'; -import { Alert, AlertButton, AlertEvent, AlertInput, AlertOptions } from './components/alert/alert'; -import { AlertController } from './components/alert-controller/alert-controller'; -import { Backdrop } from './components/backdrop/backdrop'; -import { Loading, LoadingEvent, LoadingOptions } from './components/loading/loading'; -import { LoadingController } from './components/loading-controller/loading-controller'; -import { GestureDetail, GestureCallback } from './components/gesture/gesture'; -import { Menu } from './components/menu/menu'; -import { MenuController } from './components/menu/menu-controller'; -import { Modal, ModalOptions, ModalEvent } from './components/modal/modal'; -import { ModalController } from './components/modal-controller/modal-controller'; +// Components +export { + ActionSheet, + ActionSheetButton, + ActionSheetEvent, + ActionSheetOptions, + iOSEnterAnimation as ActionSheetIOSEnterAnimation, + iOSLeaveAnimation as ActionSheetIOSLeaveAnimation +} from './components/action-sheet/action-sheet'; -import { Picker, PickerButton, PickerColumn, PickerColumnOption, PickerEvent, PickerOptions } from './components/picker/picker'; -import { PickerController } from './components/picker-controller/picker-controller'; +export { ActionSheetController } from './components/action-sheet-controller/action-sheet-controller'; +export { + Alert, + AlertButton, + AlertEvent, + AlertInput, + AlertOptions, + iOSEnterAnimation as AlertIOSEnterAnimation, + iOSLeaveAnimation as AlertIOSLeaveAnimation +} from './components/alert/alert'; +export { AlertController } from './components/alert-controller/alert-controller'; +export { + Animation, + AnimationBuilder, + AnimationController, + AnimationOptions +} from './components/animation-controller/animation-interface'; +export { App } from './components/app/app'; +export { Avatar } from './components/avatar/avatar'; +export { Backdrop } from './components/backdrop/backdrop'; +export { Badge } from './components/badge/badge'; +export { Button } from './components/button/button'; +export { Buttons } from './components/buttons/buttons'; +export { Card } from './components/card/card'; +export { CardContent } from './components/card-content/card-content'; +export { CardHeader } from './components/card-header/card-header'; +export { CardTitle } from './components/card-title/card-title'; +export { Checkbox } from './components/checkbox/checkbox'; +export { Chip } from './components/chip/chip'; +export { ChipButton } from './components/chip-button/chip-button'; +export { Content } from './components/content/content'; +export { Datetime } from './components/datetime/datetime'; +export { FabContainer } from './components/fab/fab-container'; +export { FabList } from './components/fab/fab-list'; +export { FabButton } from './components/fab/fab'; +export { Footer } from './components/footer/footer'; +export { Gesture, GestureCallback, GestureDetail } from './components/gesture/gesture'; +export { PanRecognizer } from './components/gesture/recognizers'; +export { + BLOCK_ALL, + BlockerDelegate, + BlockerOptions, + GestureController, + GestureDelegate +} from './components/gesture-controller/gesture-controller'; +export { Column } from './components/grid/col'; +export { Grid } from './components/grid/grid'; +export { Row } from './components/grid/row'; +export { Header } from './components/header/header'; +export { InfiniteScroll } from './components/infinite-scroll/infinite-scroll'; +export { InfiniteScrollContent } from './components/infinite-scroll/infinite-scroll-content'; +export { Input } from './components/input/input'; +export { Item } from './components/item/item'; +export { ItemDivider } from './components/item-divider/item-divider'; +export { ItemOption } from './components/item-sliding/item-option'; +export { ItemSliding } from './components/item-sliding/item-sliding'; +export { KeyboardController } from './components/keyboard-controller/keyboard-controller'; +export * from './components/keyboard-controller/keys'; +export { Label } from './components/label/label'; +export { List } from './components/list/list'; +export { ListHeader } from './components/list-header/list-header'; +export { + Loading, + LoadingEvent, + LoadingOptions, + iOSEnterAnimation as LoadingIOSEnterAnimation, + iOSLeaveAnimation as LoadingIOSLeaveAnimation +} from './components/loading/loading'; +export { LoadingController } from './components/loading-controller/loading-controller'; +export { Menu } from './components/menu/menu'; +export { + MenuController, + MenuOverlayAnimation, + MenuPushAnimation, + MenuRevealAnimation +} from './components/menu-controller/menu-controller'; +export { + Modal, + ModalOptions, + ModalEvent, + iOSEnterAnimation as ModalIOSEnterAnimation, + iOSLeaveAnimation as ModalIOSLeaveAnimation +} from './components/modal/modal'; +export { ModalController } from './components/modal-controller/modal-controller'; +export { Nav } from './components/nav/nav'; +export { NavController } from './components/nav-controller/nav-controller'; +export { Note } from './components/note/note'; +export { Page } from './components/page/page'; +export { PickerColumnCmp } from './components/picker/picker-column'; +export { + Picker, + PickerButton, + PickerColumn, + PickerColumnOption, + PickerEvent, + PickerOptions, + iOSEnterAnimation as PickerIOSEnterAnimation, + iOSLeaveAnimation as PickerIOSLeaveAnimation +} from './components/picker/picker'; +export { PickerController } from './components/picker-controller/picker-controller'; +export { + Popover, + PopoverEvent, + PopoverOptions, + iOSEnterAnimation as PopoverIOSEnterAnimation, + iOSLeaveAnimation as PopoverIOSLeaveAnimation +} from './components/popover/popover'; +export { PopoverController } from './components/popover-controller/popover-controller'; +export { RadioGroup } from './components/radio/radio-group'; +export { Radio, RadioEvent } from './components/radio/radio'; +export { RangeKnob } from './components/range/range-knob'; +export { Range, RangeEvent } from './components/range/range'; +export { ReorderGroup } from './components/reorder/reorder-group'; +export { ItemReorder } from './components/reorder/reorder'; +export { Scroll, ScrollCallback, ScrollDetail } from './components/scroll/scroll'; +export { Searchbar } from './components/searchbar/searchbar'; +export { Segment, SegmentEvent } from './components/segment/segment'; +export { SegmentButton, SegmentButtonEvent } from './components/segment-button/segment-button'; +export { SelectPopoverOption, SelectPopover } from './components/select/select-popover'; +export { Select } from './components/select/select'; +export { SelectOption } from './components/select-option/select-option'; +export { SkeletonText } from './components/skeleton-text/skeleton-text'; +export { Slide } from './components/slides/slide'; +export { Slides } from './components/slides/slides'; +export * from './components/spinner/spinner-configs'; +export { Spinner } from './components/spinner/spinner'; +export { SplitPane, SplitPaneAlert } from './components/split-pane/split-pane'; +export { Tab } from './components/tabs/tab'; +export { Tabs } from './components/tabs/tabs'; +export { Thumbnail } from './components/thumbnail/thumbnail'; +export { ToolbarTitle } from './components/title/title'; +export { + Toast, + ToastEvent, + ToastOptions, + iOSEnterAnimation as ToastIOSEnterAnimation, + iOSLeaveAnimation as ToastIOSLeaveAnimation +} from './components/toast/toast'; +export { ToastController } from './components/toast-controller/toast-controller'; +export { Toggle } from './components/toggle/toggle'; +export { Navbar } from './components/toolbar/navbar'; +export { Toolbar } from './components/toolbar/toolbar'; -import { Popover, PopoverEvent, PopoverOptions } from './components/popover/popover'; -import { PopoverController } from './components/popover-controller/popover-controller'; - -import { Scroll, ScrollCallback, ScrollDetail } from './components/scroll/scroll'; -import { Segment } from './components/segment/segment'; -import { SegmentButton, SegmentButtonEvent } from './components/segment-button/segment-button'; -import { SplitPane, SplitPaneAlert } from './components/split-pane/split-pane'; - -import { Tab } from './components/tabs/tab'; -import { Tabs } from './components/tabs/tabs'; - -import { Toast, ToastEvent, ToastOptions } from './components/toast/toast'; -import { ToastController } from './components/toast-controller/toast-controller'; - -import { TransitionBuilder } from './navigation/nav-interfaces'; +export * from './navigation/nav-interfaces'; +export { ViewController } from './navigation/view-controller'; +// export all of the component declarations that are dynamically created export * from './components'; - export interface Config { get: (key: string, fallback?: any) => any; getBoolean: (key: string, fallback?: boolean) => boolean; getNumber: (key: string, fallback?: number) => number; } - export type CssClassMap = { [className: string]: boolean }; - export interface BaseInputComponent { disabled: boolean; hasFocus: boolean; @@ -53,69 +174,12 @@ export interface BaseInputComponent { fireBlur: () => void; } - export interface BooleanInputComponent extends BaseInputComponent { checked: boolean; toggle: (ev: UIEvent) => void; } -export { - ActionSheet, - ActionSheetButton, - ActionSheetEvent, - ActionSheetOptions, - ActionSheetController, - Alert, - AlertButton, - AlertEvent, - AlertInput, - AlertOptions, - AlertController, - Animation, - AnimationBuilder, - AnimationController, - AnimationOptions, - Backdrop, - GestureCallback, - GestureDetail, - Loading, - LoadingOptions, - LoadingController, - LoadingEvent, - Menu, - MenuController, - Modal, - ModalController, - ModalOptions, - ModalEvent, - Picker, - PickerButton, - PickerColumn, - PickerColumnOption, - PickerController, - PickerEvent, - PickerOptions, - Popover, - PopoverController, - PopoverEvent, - PopoverOptions, - Scroll, - ScrollCallback, - ScrollDetail, - Segment, - SegmentButton, - SegmentButtonEvent, - SplitPane, - SplitPaneAlert, - TransitionBuilder, - Toast, - ToastEvent, - ToastOptions, - ToastController -} - - export interface StencilElement extends HTMLElement { componentOnReady(): Promise; componentOnReady(done: (cmp?: HTMLElement) => void): void; diff --git a/packages/core/src/navigation/nav-controller-functions.ts b/packages/core/src/navigation/nav-controller-functions.ts index 65758d7f8b..0a41e4013f 100644 --- a/packages/core/src/navigation/nav-controller-functions.ts +++ b/packages/core/src/navigation/nav-controller-functions.ts @@ -1,13 +1,8 @@ -import { Animation, AnimationOptions, Config } from '..'; +import { Animation, AnimationOptions, Config, FrameworkDelegate, Nav, NavOptions, Transition} from '../index'; import { ComponentDataPair, - FrameworkDelegate, - Nav, - NavOptions, NavResult, - Transition, TransitionInstruction, - ViewController } from './nav-interfaces'; import { @@ -28,7 +23,7 @@ import { } from './nav-utils'; -import { ViewControllerImpl } from './view-controller-impl'; +import { ViewController } from './view-controller'; import { assert, focusOutActiveElement, isDef, isNumber } from '../utils/helpers'; @@ -46,7 +41,7 @@ export function push(nav: Nav, delegate: FrameworkDelegate, animation: Animation opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -58,7 +53,7 @@ export function insert(nav: Nav, delegate: FrameworkDelegate, animation: Animati opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -70,7 +65,7 @@ export function insertPages(nav: Nav, delegate: FrameworkDelegate, animation: An opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -82,7 +77,7 @@ export function pop(nav: Nav, delegate: FrameworkDelegate, animation: Animation, opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -94,7 +89,7 @@ export function popToRoot(nav: Nav, delegate: FrameworkDelegate, animation: Anim opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -106,7 +101,7 @@ export function popTo(nav: Nav, delegate: FrameworkDelegate, animation: Animatio opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }; if (isViewController(indexOrViewCtrl)) { @@ -125,7 +120,7 @@ export function remove(nav: Nav, delegate: FrameworkDelegate, animation: Animati opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -138,7 +133,7 @@ export function removeView(nav: Nav, delegate: FrameworkDelegate, animation: Ani opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -162,7 +157,7 @@ export function setPages(nav: Nav, delegate: FrameworkDelegate, animation: Anima opts: opts, nav: nav, delegate: delegate, - id: nav.id, + id: nav.navId, animation: animation }, done); } @@ -211,7 +206,7 @@ export function nextTransaction(nav: Nav): Promise { return Promise.resolve(); } - const topTransaction = getTopTransaction(nav.id); + const topTransaction = getTopTransaction(nav.navId); if (!topTransaction) { return Promise.resolve(); } @@ -260,14 +255,14 @@ export function successfullyTransitioned(result: NavResult, ti: TransitionInstru } export function transitionFailed(error: Error, ti: TransitionInstruction) { - const queue = getQueue(ti.nav.id); + const queue = getQueue(ti.nav.navId); if (!queue) { // TODO, make throw error in the future return fireError(new Error('Queue is null, the nav must have been destroyed'), ti); } ti.nav.transitionId = null; - resetQueue(ti.nav.id); + resetQueue(ti.nav.navId); ti.nav.transitioning = false; @@ -616,7 +611,7 @@ export function insertViewIntoNav(nav: Nav, view: ViewController, index: number) // give this inserted view an ID viewIds++; if (!view.id) { - view.id = `${nav.id}-${viewIds}`; + view.id = `${nav.navId}-${viewIds}`; } // insert the entering view into the correct index in the stack @@ -730,7 +725,7 @@ export function convertViewsToViewControllers(views: any[]): ViewController[] { if (isViewController(view)) { return view as ViewController; } - return new ViewControllerImpl(view.page, view.params); + return new ViewController(view.page, view.params); } return null; }).filter(view => !!view); @@ -746,7 +741,7 @@ export function convertComponentToViewController(ti: TransitionInstruction): Vie } for (const viewController of viewControllers) { - if (viewController.nav && viewController.nav.id !== ti.id) { + if (viewController.nav && viewController.nav.navId !== ti.id) { throw new Error('The view has already inserted into a different nav'); } if (viewController.state === STATE_DESTROYED) { diff --git a/packages/core/src/navigation/nav-interfaces.ts b/packages/core/src/navigation/nav-interfaces.ts index 5b061eaa4e..53e74028dd 100644 --- a/packages/core/src/navigation/nav-interfaces.ts +++ b/packages/core/src/navigation/nav-interfaces.ts @@ -1,11 +1,9 @@ -import { EventEmitter } from '@stencil/core'; - import { Animation, - AnimationController, AnimationOptions, - Config -} from '..'; + Nav, + ViewController +} from '../index'; export interface FrameworkDelegate { attachViewToDom(navController: Nav, enteringView: ViewController): Promise; @@ -22,84 +20,6 @@ export interface NavContainer { getSecondaryIdentifier?(): string; } -export interface Nav { - id?: number; - element?: HTMLElement; - views?: ViewController[]; - transitioning?: boolean; - destroyed?: boolean; - transitionId?: number; - isViewInitialized?: boolean; - isPortal?: boolean; - zIndexOffset?: number; - swipeToGoBackTransition?: any; // TODO Transition - navController?: NavController; - parent?: Nav; - childNavs?: Nav[]; // TODO - make nav container - root?: any; - navInit?: EventEmitter; - config?: Config; - mode?: string; - - // public methods - getActive?(): ViewController; - getPrevious?(view?: ViewController): ViewController; - getViews?(): ViewController[]; - push?(component: any, data?: any, opts?: NavOptions): Promise; - pop?(opts?: NavOptions): Promise; - setRoot?(component: any, data?: any, opts?: NavOptions): Promise; - insert?(insertIndex: number, page: any, params?: any, opts?: NavOptions): Promise; - insertPages?(insertIndex: number, insertPages: any[], opts?: NavOptions): Promise; - popToRoot?(opts?: NavOptions): Promise; - popTo?(indexOrViewCtrl: any, opts?: NavOptions): Promise; - remove?(startIndex: number, removeCount?: number, opts?: NavOptions): Promise; - removeView?(viewController: ViewController, opts?: NavOptions): Promise; - setPages?(componentDataPairs: ComponentDataPair[], opts?: NavOptions): Promise; -} - -export interface NavController { - push(nav: Nav, component: any, data: any, opts: NavOptions): Promise; - pop(nav: Nav, opts: NavOptions): Promise; - setRoot(nav: Nav, component: any, data: any, opts: NavOptions): Promise; - insert(nav: Nav, insertIndex: number, page: any, params: any, opts: NavOptions): Promise; - insertPages(nav: Nav, insertIndex: number, insertPages: any[], opts?: NavOptions): Promise; - popToRoot(nav: Nav, opts: NavOptions): Promise; - popTo(nav: Nav, indexOrViewCtrl: any, opts?: NavOptions): Promise; - removeIndex(nav: Nav, startIndex: number, removeCount: number, opts: NavOptions): Promise; - removeView(nav: Nav, viewController: ViewController, opts?: NavOptions): Promise; - setPages(nav: Nav, componentDataPairs: ComponentDataPair[], opts?: NavOptions): Promise; - - delegate?: FrameworkDelegate; - animationCtrl?: AnimationController; -} - - -export interface ViewController { - id: string; - component: any; - data: any; - element: HTMLElement; - instance: any; - state: number; - nav: Nav; - dismissProxy?: any; - zIndex: number; - - // life cycle events - willLeave(unload: boolean): void; - didLeave(): void; - willEnter(): void; - didEnter(): void; - willLoad(): void; - didLoad(): void; - willUnload(): void; - - destroy(delegate?: FrameworkDelegate): Promise; - getTransitionName(direction: string): string; - onDidDismiss: (data: any, role: string) => void; - onWillDismiss: (data: any, role: string) => void; -} - export interface NavResult { hasCompleted: boolean; requiresTransition: boolean; diff --git a/packages/core/src/navigation/nav-utils.ts b/packages/core/src/navigation/nav-utils.ts index faf3313339..7b96955841 100644 --- a/packages/core/src/navigation/nav-utils.ts +++ b/packages/core/src/navigation/nav-utils.ts @@ -1,5 +1,5 @@ -import { Nav, Transition, ViewController } from './nav-interfaces'; -import { Animation, AnimationOptions, Config, TransitionBuilder } from '..'; +import { Transition } from './nav-interfaces'; +import { Animation, AnimationOptions, Config, Nav, TransitionBuilder, ViewController } from '..'; import { isDef } from '../utils/helpers'; export const STATE_NEW = 1; @@ -33,7 +33,8 @@ export function setZIndex(nav: Nav, enteringView: ViewController, leavingView: V if (enteringView) { if (nav.isPortal) { if (direction === DIRECTION_FORWARD) { - updateZIndex(enteringView, nav.zIndexOffset + portalZindex); + // TODO - fix typing + updateZIndex(enteringView, (nav as any).zIndexOffset + portalZindex); } portalZindex++; return; @@ -50,7 +51,8 @@ export function setZIndex(nav: Nav, enteringView: ViewController, leavingView: V } } else { - updateZIndex(enteringView, INIT_ZINDEX + nav.zIndexOffset); + // TODO - fix typing + updateZIndex(enteringView, INIT_ZINDEX + (nav as any).zIndexOffset); } } } @@ -169,7 +171,7 @@ export function getViews(nav: Nav): ViewController[] { } export function init(nav: Nav) { - nav.id = getNextNavId(); + nav.navId = getNextNavId(); nav.views = []; } diff --git a/packages/core/src/navigation/transitions/transition.ios.ts b/packages/core/src/navigation/transitions/transition.ios.ts index fa0b7d563f..dfe779bc7a 100644 --- a/packages/core/src/navigation/transitions/transition.ios.ts +++ b/packages/core/src/navigation/transitions/transition.ios.ts @@ -1,7 +1,5 @@ -import { AnimationOptions } from '../..'; -import { Transition, ViewController } from '../nav-interfaces'; +import { AnimationOptions, Transition, ViewController } from '../../index'; import { canNavGoBack } from '../nav-utils'; - import { isDef } from '../../utils/helpers'; const DURATION = 500; diff --git a/packages/core/src/navigation/transitions/transition.md.ts b/packages/core/src/navigation/transitions/transition.md.ts index 32a87d734d..d9b7a42a2f 100644 --- a/packages/core/src/navigation/transitions/transition.md.ts +++ b/packages/core/src/navigation/transitions/transition.md.ts @@ -1,7 +1,5 @@ -import { AnimationOptions } from '../..'; -import { Transition, ViewController } from '../nav-interfaces'; +import { AnimationOptions, Transition, ViewController } from '../../index'; import { canNavGoBack } from '../nav-utils'; - import { isDef } from '../../utils/helpers'; const TRANSLATEY = 'translateY'; diff --git a/packages/core/src/navigation/view-controller-impl.ts b/packages/core/src/navigation/view-controller.ts similarity index 97% rename from packages/core/src/navigation/view-controller-impl.ts rename to packages/core/src/navigation/view-controller.ts index 4bb762e0cd..b8d47c03b8 100644 --- a/packages/core/src/navigation/view-controller-impl.ts +++ b/packages/core/src/navigation/view-controller.ts @@ -1,9 +1,9 @@ -import { FrameworkDelegate, Nav, ViewController } from './nav-interfaces'; +import { FrameworkDelegate, Nav } from '../index'; import { STATE_ATTACHED, STATE_DESTROYED, STATE_INITIALIZED, STATE_NEW } from './nav-utils'; import { assert } from '../utils/helpers'; -export class ViewControllerImpl implements ViewController { +export class ViewController { id: string; data: any; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index ad36c94131..2b44908c79 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -18,7 +18,7 @@ "noImplicitReturns": true, "noUnusedLocals": true, "noUnusedParameters": true, - "outDir": "dist", + "outDir": ".tmp", "pretty": true, "removeComments": false, "target": "es2015"