diff --git a/packages/angular/src/providers/events.ts b/packages/angular/src/providers/events.ts index 81e9592ab9..fe5edacc1c 100644 --- a/packages/angular/src/providers/events.ts +++ b/packages/angular/src/providers/events.ts @@ -1,33 +1,20 @@ import { Injectable } from '@angular/core'; +import { IonicWindow } from '../types/interfaces'; -import { ensureElementInBody, hydrateElement } from '../util/util'; - -let hydratedElement: HTMLIonEventsElement = null; @Injectable() export class Events { - publish(topic: string, event?: any): Promise { - return getElement().then((element: HTMLIonEventsElement) => { - return element.publish(topic, event); - }); - } - subscribe(topic: string, handler: (event?: any) => void) { - return getElement().then((element: HTMLIonEventsElement) => { - return element.subscribe(topic, handler); - }); + return (window as IonicWindow).Ionic.Events.subscribe(topic, handler); } -} -function getElement(): Promise { - if (hydratedElement) { - return Promise.resolve(hydratedElement); - } - const element = ensureElementInBody(ELEMENT_NAME); - return hydrateElement(element).then((element: HTMLIonEventsElement) => { - hydratedElement = element; - return element; - }); -} -const ELEMENT_NAME = 'ion-events'; + unsubscribe(topic: string, handler: (event?: any) => void) { + return (window as IonicWindow).Ionic.Events.unsubscribe(topic, handler); + } + + publish(topic: string, event?: any) { + return (window as IonicWindow).Ionic.Events.publish(topic, event); + } + +} diff --git a/packages/angular/src/types/interfaces.ts b/packages/angular/src/types/interfaces.ts index 3368ef3a76..6a964f2a22 100644 --- a/packages/angular/src/types/interfaces.ts +++ b/packages/angular/src/types/interfaces.ts @@ -21,3 +21,16 @@ export interface AngularEscapeHatch extends EscapeHatch { cfr?: ComponentFactoryResolver; injector?: Injector; } + +export interface IonicGlobal { + config: any; + Events: { + subscribe: (topic: string, ...handlers: Function[]) => void; + unsubscribe: (topic: string, handler: Function) => void; + publish: (topic: string, ...args: any[]) => any[]; + }; +} + +export interface IonicWindow extends Window { + Ionic: IonicGlobal; +} diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts index 6208e8a177..b1ce4ccebc 100644 --- a/packages/core/src/components.d.ts +++ b/packages/core/src/components.d.ts @@ -853,36 +853,6 @@ declare global { } -import { - Events as IonEvents -} from './components/events/events'; - -declare global { - interface HTMLIonEventsElement extends IonEvents, HTMLStencilElement { - } - var HTMLIonEventsElement: { - prototype: HTMLIonEventsElement; - new (): HTMLIonEventsElement; - }; - interface HTMLElementTagNameMap { - "ion-events": HTMLIonEventsElement; - } - interface ElementTagNameMap { - "ion-events": HTMLIonEventsElement; - } - namespace JSX { - interface IntrinsicElements { - "ion-events": JSXElements.IonEventsAttributes; - } - } - namespace JSXElements { - export interface IonEventsAttributes extends HTMLAttributes { - - } - } -} - - import { FabButton as IonFabButton } from './components/fab-button/fab-button'; diff --git a/packages/core/src/index.d.ts b/packages/core/src/index.d.ts new file mode 100644 index 0000000000..b8e50be0c6 --- /dev/null +++ b/packages/core/src/index.d.ts @@ -0,0 +1,187 @@ +// Components +export * from './components/action-sheet/action-sheet'; + +export { ActionSheetController } from './components/action-sheet-controller/action-sheet-controller'; +export * 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 { BackButton } from './components/back-button/back-button'; +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 { Col } from './components/col/col'; +export { Content } from './components/content/content'; +export { Datetime } from './components/datetime/datetime'; +export { Fab } from './components/fab/fab'; +export { FabList } from './components/fab-list/fab-list'; +export { FabButton } from './components/fab-button/fab-button'; +export { Footer } from './components/footer/footer'; +export { Gesture, GestureCallback, GestureDetail } from './components/gesture/gesture'; +export { PanRecognizer } from './components/gesture/recognizers'; +export * from './components/gesture-controller/gesture-controller-utils'; +export { Grid } from './components/grid/grid'; +export { Header } from './components/header/header'; +export { InfiniteScroll } from './components/infinite-scroll/infinite-scroll'; +export { InfiniteScrollContent } from './components/infinite-scroll-content/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-option/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 * 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 * from './components/modal/modal'; +export { ModalController } from './components/modal-controller/modal-controller'; +export * from './components/nav/nav'; +export * from './components/nav/nav-interfaces'; +export { ViewController } from './components/nav/view-controller'; +export { Note } from './components/note/note'; +export { PickerColumnCmp } from './components/picker-column/picker-column'; +export * from './components/picker/picker'; +export { PickerController } from './components/picker-controller/picker-controller'; +export * from './components/popover/popover'; +export { PopoverController } from './components/popover-controller/popover-controller'; +export { RadioGroup } from './components/radio-group/radio-group'; +export { Radio, HTMLIonRadioElementEvent } from './components/radio/radio'; +export { Range, RangeEvent } from './components/range/range'; +export { RangeKnob } from './components/range-knob/range-knob'; +export { ReorderGroup } from './components/reorder-group/reorder-group'; +export { + RouterEntry, + RouterEntries, + NavOutlet +} from './components/router/router-utils'; +export { Row } from './components/row/row'; +export { Reorder } from './components/reorder/reorder'; +export { Scroll, ScrollCallback, ScrollDetail } from './components/scroll/scroll'; +export { Searchbar } from './components/searchbar/searchbar'; +export { Segment } from './components/segment/segment'; +export { SegmentButton } from './components/segment-button/segment-button'; +export { SelectPopoverOption, SelectPopover } from './components/select-popover/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/slide/slide'; +export { Slides } from './components/slides/slides'; +export * from './components/spinner/spinner-configs'; +export { Spinner } from './components/spinner/spinner'; +export { SplitPane } from './components/split-pane/split-pane'; +export { Tab } from './components/tab/tab'; +export { TabButton } from './components/tab-button/tab-button'; +export { Tabs } from './components/tabs/tabs'; +export { Thumbnail } from './components/thumbnail/thumbnail'; +export { ToolbarTitle } from './components/title/title'; +export * from './components/toast/toast'; +export { ToastController } from './components/toast-controller/toast-controller'; +export { Toggle } from './components/toggle/toggle'; +export { Toolbar } from './components/toolbar/toolbar'; + +export { PlatformConfig } from './global/platform-configs'; + +// export all of the component declarations that are dynamically created +export * from './components'; + +export { DomController, RafCallback } from './global/dom-controller'; + +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; + value: string; + + fireFocus: () => void; + fireBlur: () => void; +} + +export interface OverlayDismissEvent extends CustomEvent { + detail: OverlayDismissEventDetail; +} + +export interface OverlayDismissEventDetail { + data?: any; + role?: string; +} + +export interface FrameworkDelegate { + attachViewToDom(elementOrContainerToMountTo: any, elementOrComponentToMount: any, propsOrDataObj?: any, classesToAdd?: string[], escapeHatch?: any): Promise; + removeViewFromDom(elementOrContainerToUnmountFrom: any, elementOrComponentToUnmount: any, escapeHatch?: any): Promise; +} + +export interface RouterDelegate { + pushUrlState(urlSegment: string, stateObject?: any, title?: string): Promise; + popUrlState(): Promise; +} + +export interface FrameworkMountingData { + element: HTMLElement; + component: any; + data: any; +} + +declare global { + + namespace JSXElements { + + export interface DOMAttributes { + // for ion-menu and ion-split-pane + main?: boolean; + + padding?: boolean; + ['padding-top']?: boolean; + ['padding-bottom']?: boolean; + ['padding-left']?: boolean; + ['padding-right']?: boolean; + ['padding-horizontal']?: boolean; + ['padding-vertical']?: boolean; + + margin?: boolean; + ['margin-top']?: boolean; + ['margin-bottom']?: boolean; + ['margin-left']?: boolean; + ['margin-right']?: boolean; + ['margin-horizontal']?: boolean; + ['margin-vertical']?: boolean; + + ['no-padding']?: boolean; + ['no-margin']?: boolean; + } + } +} + +export interface OverlayController { + getTop(): HTMLElement; +} diff --git a/packages/core/stencil.config.js b/packages/core/stencil.config.js index 0ce76485dc..8e12c862fd 100644 --- a/packages/core/stencil.config.js +++ b/packages/core/stencil.config.js @@ -18,7 +18,6 @@ exports.config = { { components: ['ion-checkbox'] }, { components: ['ion-chip', 'ion-chip-button'] }, { components: ['ion-datetime', 'ion-picker', 'ion-picker-column', 'ion-picker-controller'] }, - { components: ['ion-events'] }, { components: ['ion-fab', 'ion-fab-button', 'ion-fab-list'] }, { components: ['ion-gesture', 'ion-gesture-controller'] }, { components: ['ion-grid', 'ion-row', 'ion-col'] },