mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-16 10:01:59 +08:00
4
core/src/components.d.ts
vendored
4
core/src/components.d.ts
vendored
@ -1662,7 +1662,7 @@ declare global {
|
|||||||
/**
|
/**
|
||||||
* The event to pass to the popover animation.
|
* The event to pass to the popover animation.
|
||||||
*/
|
*/
|
||||||
'ev': any;
|
'event': any;
|
||||||
'keyboardClose': boolean;
|
'keyboardClose': boolean;
|
||||||
/**
|
/**
|
||||||
* Animation to use when the popover is dismissed.
|
* Animation to use when the popover is dismissed.
|
||||||
@ -5169,7 +5169,7 @@ declare global {
|
|||||||
/**
|
/**
|
||||||
* The event to pass to the popover animation.
|
* The event to pass to the popover animation.
|
||||||
*/
|
*/
|
||||||
'ev'?: any;
|
'event'?: any;
|
||||||
'keyboardClose'?: boolean;
|
'keyboardClose'?: boolean;
|
||||||
/**
|
/**
|
||||||
* Animation to use when the popover is dismissed.
|
* Animation to use when the popover is dismissed.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { ActionSheetOptions } from '../../interface';
|
import { ActionSheetOptions, OverlayController } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-action-sheet-controller'
|
tag: 'ion-action-sheet-controller'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { AlertOptions } from '../../interface';
|
import { AlertOptions, OverlayController } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-alert-controller'
|
tag: 'ion-alert-controller'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { LoadingOptions } from '../../interface';
|
import { LoadingOptions, OverlayController } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-loading-controller'
|
tag: 'ion-loading-controller'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { ModalOptions } from '../../interface';
|
import { ModalOptions, OverlayController } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-modal-controller'
|
tag: 'ion-modal-controller'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { PickerOptions } from '../../interface';
|
import { OverlayController, PickerOptions } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { PopoverOptions } from '../../interface';
|
import { PopoverOptions, OverlayController } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-popover-controller'
|
tag: 'ion-popover-controller'
|
||||||
|
@ -5,7 +5,7 @@ async function presentPopover() {
|
|||||||
|
|
||||||
const popoverElement = await popoverController.create({
|
const popoverElement = await popoverController.create({
|
||||||
component: 'profile-page',
|
component: 'profile-page',
|
||||||
ev: event
|
event: event
|
||||||
});
|
});
|
||||||
return await popoverElement.present();
|
return await popoverElement.present();
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,6 @@ export interface PopoverOptions {
|
|||||||
enterAnimation?: AnimationBuilder;
|
enterAnimation?: AnimationBuilder;
|
||||||
leaveAnimation?: AnimationBuilder;
|
leaveAnimation?: AnimationBuilder;
|
||||||
cssClass?: string | string[];
|
cssClass?: string | string[];
|
||||||
ev: Event;
|
event?: Event;
|
||||||
delegate?: FrameworkDelegate;
|
delegate?: FrameworkDelegate;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ export class Popover implements OverlayInterface {
|
|||||||
/**
|
/**
|
||||||
* The event to pass to the popover animation.
|
* The event to pass to the popover animation.
|
||||||
*/
|
*/
|
||||||
@Prop() ev: any;
|
@Prop() event: any;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If true, a backdrop will be displayed behind the popover. Defaults to `true`.
|
* If true, a backdrop will be displayed behind the popover. Defaults to `true`.
|
||||||
@ -181,7 +181,7 @@ export class Popover implements OverlayInterface {
|
|||||||
popover: this.el
|
popover: this.el
|
||||||
};
|
};
|
||||||
this.usersElement = await attachComponent(this.delegate, container, this.component, ['popover-viewport'], data);
|
this.usersElement = await attachComponent(this.delegate, container, this.component, ['popover-viewport'], data);
|
||||||
return present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, this.ev);
|
return present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, this.event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -189,7 +189,7 @@ export class Popover implements OverlayInterface {
|
|||||||
*/
|
*/
|
||||||
@Method()
|
@Method()
|
||||||
async dismiss(data?: any, role?: string): Promise<void> {
|
async dismiss(data?: any, role?: string): Promise<void> {
|
||||||
await dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.ev);
|
await dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
|
||||||
await detachComponent(this.delegate, this.usersElement);
|
await detachComponent(this.delegate, this.usersElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<ion-header>
|
<ion-header>
|
||||||
<ion-toolbar color="primary">
|
<ion-toolbar color="primary">
|
||||||
<ion-buttons slot="secondary">
|
<ion-buttons slot="secondary">
|
||||||
<ion-button onclick="presentPopover({component: 'profile-page', ev: event })">
|
<ion-button onclick="presentPopover({component: 'profile-page', event: event })">
|
||||||
<ion-icon slot="icon-only" name="person"></ion-icon>
|
<ion-icon slot="icon-only" name="person"></ion-icon>
|
||||||
</ion-button>
|
</ion-button>
|
||||||
</ion-buttons>
|
</ion-buttons>
|
||||||
@ -24,9 +24,9 @@
|
|||||||
</ion-header>
|
</ion-header>
|
||||||
|
|
||||||
<ion-content id="content" padding>
|
<ion-content id="content" padding>
|
||||||
<ion-button class="e2eShowPopover" expand="block" onclick="presentPopover({ component: 'profile-page', ev: event })">Show Popover</ion-button>
|
<ion-button class="e2eShowPopover" expand="block" onclick="presentPopover({ component: 'profile-page', event: event })">Show Popover</ion-button>
|
||||||
<ion-button expand="block" onclick="presentPopover({ component: 'translucent-page', ev: event, translucent: true })">Show Translucent Popover</ion-button>
|
<ion-button expand="block" onclick="presentPopover({ component: 'translucent-page', event: event, translucent: true })">Show Translucent Popover</ion-button>
|
||||||
<ion-button expand="block" color="secondary" onclick="presentPopover({ component: 'list-page', ev: event })">Show Long List Popover</ion-button>
|
<ion-button expand="block" color="secondary" onclick="presentPopover({ component: 'list-page', event: event })">Show Long List Popover</ion-button>
|
||||||
<ion-button expand="block" color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</ion-button>
|
<ion-button expand="block" color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</ion-button>
|
||||||
|
|
||||||
<ion-popover-controller></ion-popover-controller>
|
<ion-popover-controller></ion-popover-controller>
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<ion-footer>
|
<ion-footer>
|
||||||
<ion-toolbar color="primary">
|
<ion-toolbar color="primary">
|
||||||
<ion-buttons slot="primary">
|
<ion-buttons slot="primary">
|
||||||
<ion-button onclick="presentPopover({component: 'profile-page', ev: event })">
|
<ion-button onclick="presentPopover({component: 'profile-page', event: event })">
|
||||||
<ion-icon slot="icon-only" name="person"></ion-icon>
|
<ion-icon slot="icon-only" name="person"></ion-icon>
|
||||||
</ion-button>
|
</ion-button>
|
||||||
</ion-buttons>
|
</ion-buttons>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<ion-header>
|
<ion-header>
|
||||||
<ion-toolbar color="primary">
|
<ion-toolbar color="primary">
|
||||||
<ion-buttons slot="secondary">
|
<ion-buttons slot="secondary">
|
||||||
<ion-button onclick="presentPopover({component: 'profile-page', ev: event })">
|
<ion-button onclick="presentPopover({component: 'profile-page', event: event })">
|
||||||
<ion-icon slot="icon-only" name="person"></ion-icon>
|
<ion-icon slot="icon-only" name="person"></ion-icon>
|
||||||
</ion-button>
|
</ion-button>
|
||||||
</ion-buttons>
|
</ion-buttons>
|
||||||
@ -24,9 +24,9 @@
|
|||||||
</ion-header>
|
</ion-header>
|
||||||
|
|
||||||
<ion-content id="content" padding>
|
<ion-content id="content" padding>
|
||||||
<ion-button class="e2eShowPopover" expand="block" onclick="presentPopover({ component: 'profile-page', ev: event })">Show Popover</ion-button>
|
<ion-button class="e2eShowPopover" expand="block" onclick="presentPopover({ component: 'profile-page', event: event })">Show Popover</ion-button>
|
||||||
<ion-button expand="block" onclick="presentPopover({ component: 'translucent-page', ev: event, translucent: true })">Show Translucent Popover</ion-button>
|
<ion-button expand="block" onclick="presentPopover({ component: 'translucent-page', event: event, translucent: true })">Show Translucent Popover</ion-button>
|
||||||
<ion-button expand="block" color="secondary" onclick="presentPopover({ component: 'list-page', ev: event })">Show Long List Popover</ion-button>
|
<ion-button expand="block" color="secondary" onclick="presentPopover({ component: 'list-page', event: event })">Show Long List Popover</ion-button>
|
||||||
<ion-button expand="block" color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</ion-button>
|
<ion-button expand="block" color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</ion-button>
|
||||||
|
|
||||||
<ion-popover-controller></ion-popover-controller>
|
<ion-popover-controller></ion-popover-controller>
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<ion-footer>
|
<ion-footer>
|
||||||
<ion-toolbar color="primary">
|
<ion-toolbar color="primary">
|
||||||
<ion-buttons slot="primary">
|
<ion-buttons slot="primary">
|
||||||
<ion-button onclick="presentPopover({component: 'profile-page', ev: event })">
|
<ion-button onclick="presentPopover({component: 'profile-page', event: event })">
|
||||||
<ion-icon slot="icon-only" name="person"></ion-icon>
|
<ion-icon slot="icon-only" name="person"></ion-icon>
|
||||||
</ion-button>
|
</ion-button>
|
||||||
</ion-buttons>
|
</ion-buttons>
|
||||||
|
@ -10,9 +10,9 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<button id="basic" onclick="presentPopover({ component: 'profile-page', ev: event })">Show Popover</button>
|
<button id="basic" onclick="presentPopover({ component: 'profile-page', event: event })">Show Popover</button>
|
||||||
<button onclick="presentPopover({ component: 'translucent-page', ev: event, translucent: true })">Show Translucent Popover</button>
|
<button onclick="presentPopover({ component: 'translucent-page', event: event, translucent: true })">Show Translucent Popover</button>
|
||||||
<button color="secondary" onclick="presentPopover({ component: 'list-page', ev: event })">Show Long List Popover</button>
|
<button color="secondary" onclick="presentPopover({ component: 'list-page', event: event })">Show Long List Popover</button>
|
||||||
<button color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</button>
|
<button color="danger" onclick="presentPopover({ component: 'profile-page' })">No Event Popover</button>
|
||||||
|
|
||||||
<ion-popover-controller></ion-popover-controller>
|
<ion-popover-controller></ion-popover-controller>
|
||||||
|
@ -14,7 +14,7 @@ export class PopoverExample {
|
|||||||
async presentPopover(ev: any) {
|
async presentPopover(ev: any) {
|
||||||
const popover = await this.popoverController.create({
|
const popover = await this.popoverController.create({
|
||||||
component: PopoverComponent,
|
component: PopoverComponent,
|
||||||
ev: event,
|
event: event,
|
||||||
translucent: true
|
translucent: true
|
||||||
});
|
});
|
||||||
return await popover.present();
|
return await popover.present();
|
||||||
|
@ -5,8 +5,8 @@ async function presentPopover(ev) {
|
|||||||
|
|
||||||
const popover = await popoverController.create({
|
const popover = await popoverController.create({
|
||||||
component: 'popover-example-page',
|
component: 'popover-example-page',
|
||||||
ev: event,
|
|
||||||
translucent: true
|
translucent: true
|
||||||
|
event,
|
||||||
});
|
});
|
||||||
return await popover.present();
|
return await popover.present();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, Listen, Method, Prop } from '@stencil/core';
|
import { Component, Listen, Method, Prop } from '@stencil/core';
|
||||||
|
|
||||||
import { ToastOptions } from '../../interface';
|
import { OverlayController, ToastOptions } from '../../interface';
|
||||||
import { OverlayController, createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
tag: 'ion-toast-controller'
|
tag: 'ion-toast-controller'
|
||||||
|
2
core/src/interface.d.ts
vendored
2
core/src/interface.d.ts
vendored
@ -26,7 +26,7 @@ export { Gesture, GestureDetail } from './utils/gesture/gesture';
|
|||||||
|
|
||||||
export * from './utils/input-interface';
|
export * from './utils/input-interface';
|
||||||
export * from './global/config';
|
export * from './global/config';
|
||||||
export { OverlayEventDetail, OverlayInterface } from './utils/overlays';
|
export * from './utils/overlays-interface';
|
||||||
|
|
||||||
|
|
||||||
// Global types
|
// Global types
|
||||||
|
44
core/src/utils/overlays-interface.ts
Normal file
44
core/src/utils/overlays-interface.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import { EventEmitter } from '@stencil/core';
|
||||||
|
|
||||||
|
import { Animation, AnimationBuilder, Config, Mode } from '../interface';
|
||||||
|
|
||||||
|
export interface OverlayEventDetail<T = any> {
|
||||||
|
data?: T;
|
||||||
|
role?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OverlayInterface {
|
||||||
|
mode: Mode;
|
||||||
|
el: HTMLElement;
|
||||||
|
willAnimate: boolean;
|
||||||
|
keyboardClose: boolean;
|
||||||
|
config: Config;
|
||||||
|
overlayId: number;
|
||||||
|
presented: boolean;
|
||||||
|
animation?: Animation;
|
||||||
|
animationCtrl: HTMLIonAnimationControllerElement;
|
||||||
|
|
||||||
|
enterAnimation?: AnimationBuilder;
|
||||||
|
leaveAnimation?: AnimationBuilder;
|
||||||
|
|
||||||
|
didPresent: EventEmitter<void>;
|
||||||
|
willPresent: EventEmitter<void>;
|
||||||
|
willDismiss: EventEmitter<OverlayEventDetail>;
|
||||||
|
didDismiss: EventEmitter<OverlayEventDetail>;
|
||||||
|
|
||||||
|
present(): Promise<void>;
|
||||||
|
dismiss(data?: any, role?: string): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OverlayController {
|
||||||
|
create(opts?: any): Promise<HTMLElement>;
|
||||||
|
dismiss(data?: any, role?: string, alertId?: number): Promise<void>;
|
||||||
|
getTop(): HTMLElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HTMLIonOverlayElement extends HTMLStencilElement {
|
||||||
|
overlayId: number;
|
||||||
|
dismiss(data?: any, role?: string): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type OverlayMap = Map<number, HTMLIonOverlayElement>;
|
@ -1,10 +1,8 @@
|
|||||||
import { EventEmitter } from '@stencil/core';
|
import { AnimationBuilder, HTMLIonOverlayElement, OverlayInterface, OverlayMap } from '../interface';
|
||||||
|
|
||||||
import { Animation, AnimationBuilder, Config, Mode } from '../interface';
|
|
||||||
|
|
||||||
let lastId = 1;
|
let lastId = 1;
|
||||||
|
|
||||||
export function createOverlay<T extends HTMLIonOverlayElement, B>(element: T, opts: B): Promise<T> {
|
export function createOverlay<T extends HTMLIonOverlayElement & Required<B>, B>(element: T, opts: B): Promise<T> {
|
||||||
// convert the passed in overlay options into props
|
// convert the passed in overlay options into props
|
||||||
// that get passed down into the new overlay
|
// that get passed down into the new overlay
|
||||||
Object.assign(element, opts);
|
Object.assign(element, opts);
|
||||||
@ -160,45 +158,4 @@ export function isCancel(role: string | undefined): boolean {
|
|||||||
return role === 'cancel' || role === BACKDROP;
|
return role === 'cancel' || role === BACKDROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OverlayEventDetail<T = any> {
|
|
||||||
data?: T;
|
|
||||||
role?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface OverlayInterface {
|
|
||||||
mode: Mode;
|
|
||||||
el: HTMLElement;
|
|
||||||
willAnimate: boolean;
|
|
||||||
keyboardClose: boolean;
|
|
||||||
config: Config;
|
|
||||||
overlayId: number;
|
|
||||||
presented: boolean;
|
|
||||||
animation?: Animation;
|
|
||||||
animationCtrl: HTMLIonAnimationControllerElement;
|
|
||||||
|
|
||||||
enterAnimation?: AnimationBuilder;
|
|
||||||
leaveAnimation?: AnimationBuilder;
|
|
||||||
|
|
||||||
didPresent: EventEmitter<void>;
|
|
||||||
willPresent: EventEmitter<void>;
|
|
||||||
willDismiss: EventEmitter<OverlayEventDetail>;
|
|
||||||
didDismiss: EventEmitter<OverlayEventDetail>;
|
|
||||||
|
|
||||||
present(): Promise<void>;
|
|
||||||
dismiss(data?: any, role?: string): Promise<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface OverlayController {
|
|
||||||
create(opts?: any): Promise<HTMLElement>;
|
|
||||||
dismiss(data?: any, role?: string, alertId?: number): Promise<void>;
|
|
||||||
getTop(): HTMLElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface HTMLIonOverlayElement extends HTMLStencilElement {
|
|
||||||
overlayId: number;
|
|
||||||
dismiss(data?: any, role?: string): Promise<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type OverlayMap = Map<number, HTMLIonOverlayElement>;
|
|
||||||
|
|
||||||
export const BACKDROP = 'backdrop';
|
export const BACKDROP = 'backdrop';
|
||||||
|
Reference in New Issue
Block a user