diff --git a/BREAKING.md b/BREAKING.md index ba3edd34cd9..016cad3483e 100644 --- a/BREAKING.md +++ b/BREAKING.md @@ -15,6 +15,7 @@ This is a comprehensive list of the breaking changes introduced in the major ver - [Components](#version-7x-components) - [Overlays](#version-7x-overlays) - [Virtual Scroll](#version-7x-virtual-scroll) + - [Slides](#version-7x-slides) - [Browser and Platform Support](#version-7x-browser-platform-support) - [Utilities](#version-7x-utilities) - [hidden attribute](#version-7x-hidden-attribute) @@ -37,6 +38,16 @@ Developers using the component will need to migrate to a virtual scroll solution Any references to the virtual scroll types from `@ionic/core` have been removed. Please remove or replace these types: `Cell`, `VirtualNode`, `CellType`, `NodeChange`, `HeaderFn`, `ItemHeightFn`, `FooterHeightFn`, `ItemRenderFn` and `DomRenderFn`. +

Slides

+ +`ion-slides`, `ion-slide`, and the `IonicSwiper` plugin have been removed from Ionic. + +Developers using these components will need to migrate to using Swiper.js directly, optionally using the `IonicSlides` plugin. Guides for migration and usage are linked below: + +- [Angular](https://ionicframework.com/docs/angular/slides) +- [React](https://ionicframework.com/docs/react/slides) +- [Vue](https://ionicframework.com/docs/vue/slides) +

Browser and Platform Support

This section details the desktop browser, JavaScript framework, and mobile platform versions that are supported by Ionic 7. diff --git a/angular/src/directives/proxies-list.ts b/angular/src/directives/proxies-list.ts index ec6f2b4b645..96aeedcdfb2 100644 --- a/angular/src/directives/proxies-list.ts +++ b/angular/src/directives/proxies-list.ts @@ -65,8 +65,6 @@ export const DIRECTIVES = [ d.IonSelect, d.IonSelectOption, d.IonSkeletonText, - d.IonSlide, - d.IonSlides, d.IonSpinner, d.IonSplitPane, d.IonTabBar, diff --git a/angular/src/directives/proxies.ts b/angular/src/directives/proxies.ts index f600ad7fdeb..bac38702bf8 100644 --- a/angular/src/directives/proxies.ts +++ b/angular/src/directives/proxies.ts @@ -1681,114 +1681,6 @@ export class IonSkeletonText { } -export declare interface IonSlide extends Components.IonSlide {} - -@ProxyCmp({ - defineCustomElementFn: undefined -}) -@Component({ - selector: 'ion-slide', - changeDetection: ChangeDetectionStrategy.OnPush, - template: '' -}) -export class IonSlide { - protected el: HTMLElement; - constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { - c.detach(); - this.el = r.nativeElement; - } -} - - -export declare interface IonSlides extends Components.IonSlides { - /** - * Emitted after Swiper initialization - */ - ionSlidesDidLoad: EventEmitter>; - /** - * Emitted when the user taps/clicks on the slide's container. - */ - ionSlideTap: EventEmitter>; - /** - * Emitted when the user double taps on the slide's container. - */ - ionSlideDoubleTap: EventEmitter>; - /** - * Emitted before the active slide has changed. - */ - ionSlideWillChange: EventEmitter>; - /** - * Emitted after the active slide has changed. - */ - ionSlideDidChange: EventEmitter>; - /** - * Emitted when the next slide has started. - */ - ionSlideNextStart: EventEmitter>; - /** - * Emitted when the previous slide has started. - */ - ionSlidePrevStart: EventEmitter>; - /** - * Emitted when the next slide has ended. - */ - ionSlideNextEnd: EventEmitter>; - /** - * Emitted when the previous slide has ended. - */ - ionSlidePrevEnd: EventEmitter>; - /** - * Emitted when the slide transition has started. - */ - ionSlideTransitionStart: EventEmitter>; - /** - * Emitted when the slide transition has ended. - */ - ionSlideTransitionEnd: EventEmitter>; - /** - * Emitted when the slider is actively being moved. - */ - ionSlideDrag: EventEmitter>; - /** - * Emitted when the slider is at its initial position. - */ - ionSlideReachStart: EventEmitter>; - /** - * Emitted when the slider is at the last slide. - */ - ionSlideReachEnd: EventEmitter>; - /** - * Emitted when the user first touches the slider. - */ - ionSlideTouchStart: EventEmitter>; - /** - * Emitted when the user releases the touch. - */ - ionSlideTouchEnd: EventEmitter>; - -} - -@ProxyCmp({ - defineCustomElementFn: undefined, - inputs: ['mode', 'options', 'pager', 'scrollbar'], - methods: ['update', 'updateAutoHeight', 'slideTo', 'slideNext', 'slidePrev', 'getActiveIndex', 'getPreviousIndex', 'length', 'isEnd', 'isBeginning', 'startAutoplay', 'stopAutoplay', 'lockSwipeToNext', 'lockSwipeToPrev', 'lockSwipes', 'getSwiper'] -}) -@Component({ - selector: 'ion-slides', - changeDetection: ChangeDetectionStrategy.OnPush, - template: '', - inputs: ['mode', 'options', 'pager', 'scrollbar'] -}) -export class IonSlides { - protected el: HTMLElement; - constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { - c.detach(); - this.el = r.nativeElement; - proxyOutputs(this, this.el, ['ionSlidesDidLoad', 'ionSlideTap', 'ionSlideDoubleTap', 'ionSlideWillChange', 'ionSlideDidChange', 'ionSlideNextStart', 'ionSlidePrevStart', 'ionSlideNextEnd', 'ionSlidePrevEnd', 'ionSlideTransitionStart', 'ionSlideTransitionEnd', 'ionSlideDrag', 'ionSlideReachStart', 'ionSlideReachEnd', 'ionSlideTouchStart', 'ionSlideTouchEnd']); - } -} - - export declare interface IonSpinner extends Components.IonSpinner {} @ProxyCmp({ diff --git a/angular/src/index.ts b/angular/src/index.ts index 11f09c79cb6..38ba6c1c726 100644 --- a/angular/src/index.ts +++ b/angular/src/index.ts @@ -50,7 +50,6 @@ export { createGesture, iosTransitionAnimation, mdTransitionAnimation, - IonicSwiper, IonicSlides, getPlatforms, isPlatform, diff --git a/angular/test/base/e2e/src/slides.spec.ts b/angular/test/base/e2e/src/slides.spec.ts deleted file mode 100644 index eca4b59e978..00000000000 --- a/angular/test/base/e2e/src/slides.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -describe('Slides', () => { - beforeEach(() => { - cy.visit('/slides'); - cy.wait(30); - }) - - it('should change index on slide change', () => { - cy.get('ion-slide').should('have.length', 0); - - cy.get('#add-slides').click(); - - cy.get('ion-slide').should('have.length', 3); - - // Should be on the first slide - checkIndex('0'); - - // Swipe to the second slide - nextSlide(); - checkIndex('1'); - - // Swipe to the third slide - nextSlide(); - checkIndex('2'); - - // Go back to the second slide - prevSlide(); - checkIndex('1'); - }); -}); - -function checkIndex(index) { - cy.get('#slide-index').should('have.text', index); - cy.get('#slide-index-2').should('have.text', index); -} - -function nextSlide() { - cy.get('#btn-next').click(); - cy.wait(800); -} - -function prevSlide() { - cy.get('#btn-prev').click(); - cy.wait(800); -} diff --git a/angular/test/base/src/app/app-routing.module.ts b/angular/test/base/src/app/app-routing.module.ts index 195bbdbf472..cef9059c703 100644 --- a/angular/test/base/src/app/app-routing.module.ts +++ b/angular/test/base/src/app/app-routing.module.ts @@ -12,7 +12,6 @@ import { NestedOutletPageComponent } from './nested-outlet-page/nested-outlet-pa import { NestedOutletPage2Component } from './nested-outlet-page2/nested-outlet-page2.component'; import { ViewChildComponent } from './view-child/view-child.component'; import { ProvidersComponent } from './providers/providers.component'; -import { SlidesComponent } from './slides/slides.component'; import { FormComponent } from './form/form.component'; import { NavigationPage1Component } from './navigation-page1/navigation-page1.component'; import { NavigationPage2Component } from './navigation-page2/navigation-page2.component'; @@ -37,7 +36,6 @@ const routes: Routes = [ { path: 'router-link-page', component: RouterLinkPageComponent }, { path: 'router-link-page2/:id', component: RouterLinkPage2Component }, { path: 'router-link-page3', component: RouterLinkPage3Component }, - { path: 'slides', component: SlidesComponent }, { path: 'tabs', redirectTo: '/tabs/account', pathMatch: 'full' }, { path: 'navigation', diff --git a/angular/test/base/src/app/app.module.ts b/angular/test/base/src/app/app.module.ts index acd14de9aa9..908acfa0d0a 100644 --- a/angular/test/base/src/app/app.module.ts +++ b/angular/test/base/src/app/app.module.ts @@ -21,7 +21,6 @@ import { NestedOutletPage2Component } from './nested-outlet-page2/nested-outlet- import { NavComponent } from './nav/nav.component'; import { ViewChildComponent } from './view-child/view-child.component'; import { ProvidersComponent } from './providers/providers.component'; -import { SlidesComponent } from './slides/slides.component'; import { FormComponent } from './form/form.component'; import { NavigationPage1Component } from './navigation-page1/navigation-page1.component'; import { NavigationPage2Component } from './navigation-page2/navigation-page2.component'; @@ -47,7 +46,6 @@ import { AccordionModalComponent } from './accordion/accordion-modal/accordion-m NavComponent, ViewChildComponent, ProvidersComponent, - SlidesComponent, FormComponent, NavigationPage1Component, NavigationPage2Component, diff --git a/angular/test/base/src/app/home-page/home-page.component.html b/angular/test/base/src/app/home-page/home-page.component.html index 9fa61f4b7ba..bb3221ed6ad 100644 --- a/angular/test/base/src/app/home-page/home-page.component.html +++ b/angular/test/base/src/app/home-page/home-page.component.html @@ -37,11 +37,6 @@ Tabs test - - - Slides test - - Nested ion-router-outlet diff --git a/angular/test/base/src/app/slides/slides.component.html b/angular/test/base/src/app/slides/slides.component.html deleted file mode 100644 index a14964085a5..00000000000 --- a/angular/test/base/src/app/slides/slides.component.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - Slides Test - - - - - - - -

{{text}}

-
- -
- -

- index: {{slideIndex}} - index2: {{slideIndex2}} -

- - - Add Slides - - - Prev Slide - - - Next Slide - -
\ No newline at end of file diff --git a/angular/test/base/src/app/slides/slides.component.ts b/angular/test/base/src/app/slides/slides.component.ts deleted file mode 100644 index 90af28f0421..00000000000 --- a/angular/test/base/src/app/slides/slides.component.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { AfterViewInit, Component, ViewChild } from '@angular/core'; -import { IonSlides } from '@ionic/angular'; - -@Component({ - selector: 'app-slides', - templateUrl: './slides.component.html', -}) -export class SlidesComponent implements AfterViewInit { - @ViewChild(IonSlides, { static: true }) slides: IonSlides; - - slideIndex = 0; - slideIndex2 = 0; - slidesData = []; - - constructor() { } - - ngAfterViewInit() { - this.slides.ionSlideDidChange.subscribe(async () => { - this.slideIndex2 = await this.slides.getActiveIndex(); - }); - } - - addSlides() { - const start = this.slidesData.length + 1; - this.slidesData.push(`Slide ${start}`, `Slide ${start + 1}`, `Slide ${start + 2}`); - } - - prevSlide() { - this.slides.slidePrev(); - } - - nextSlide() { - this.slides.slideNext(); - } - - async checkIndex() { - this.slideIndex = await this.slides.getActiveIndex(); - } - -} diff --git a/angular/test/base/src/app/view-child/view-child.component.html b/angular/test/base/src/app/view-child/view-child.component.html index 1293c69e75b..601855048c9 100644 --- a/angular/test/base/src/app/view-child/view-child.component.html +++ b/angular/test/base/src/app/view-child/view-child.component.html @@ -6,15 +6,7 @@ - - - Hello! it's a button -
- - -
- -

Second slide

-
-
+ Hello! it's a button +
+
diff --git a/angular/test/base/src/app/view-child/view-child.component.ts b/angular/test/base/src/app/view-child/view-child.component.ts index 2454d36807f..01cb21df551 100644 --- a/angular/test/base/src/app/view-child/view-child.component.ts +++ b/angular/test/base/src/app/view-child/view-child.component.ts @@ -1,5 +1,5 @@ import { Component, ViewChild, AfterViewInit, ElementRef } from '@angular/core'; -import { IonTabs, IonButton, IonSlides, IonSlide } from '@ionic/angular'; +import { IonTabs, IonButton } from '@ionic/angular'; @Component({ selector: 'app-view-child', @@ -7,14 +7,12 @@ import { IonTabs, IonButton, IonSlides, IonSlide } from '@ionic/angular'; }) export class ViewChildComponent implements AfterViewInit { - @ViewChild(IonSlides, { static: true }) slides: IonSlides; @ViewChild(IonButton, { static: true }) button: IonButton; @ViewChild(IonTabs, { static: true }) tabs: IonTabs; @ViewChild('div', { static: true }) div: ElementRef; - @ViewChild('slide', { static: true }) slide: IonSlide; ngAfterViewInit() { - const loaded = !!(this.slides && this.button && this.tabs && this.div && this.slide); + const loaded = !!(this.button && this.tabs && this.div); this.button.color = 'danger'; if (loaded) { this.div.nativeElement.textContent = 'all found'; diff --git a/core/.stylelintrc.yml b/core/.stylelintrc.yml index 70a8b0c17b9..ce59b8ca208 100644 --- a/core/.stylelintrc.yml +++ b/core/.stylelintrc.yml @@ -8,7 +8,6 @@ ignoreFiles: - src/css/normalize.scss - src/css/text-alignment.scss - src/css/display.scss - - src/components/slides/slides-vendor.scss - src/themes/ionic.mixins.scss - src/themes/ionic.functions.color.scss - src/themes/ionic.functions.string.scss diff --git a/core/api.txt b/core/api.txt index bfa38850c4e..853dd159f1f 100644 --- a/core/api.txt +++ b/core/api.txt @@ -1215,52 +1215,6 @@ ion-skeleton-text,css-prop,--background ion-skeleton-text,css-prop,--background-rgb ion-skeleton-text,css-prop,--border-radius -ion-slide,none - -ion-slides,none -ion-slides,prop,mode,"ios" | "md",undefined,false,false -ion-slides,prop,options,any,{},false,false -ion-slides,prop,pager,boolean,false,false,false -ion-slides,prop,scrollbar,boolean,false,false,false -ion-slides,method,getActiveIndex,getActiveIndex() => Promise -ion-slides,method,getPreviousIndex,getPreviousIndex() => Promise -ion-slides,method,getSwiper,getSwiper() => Promise -ion-slides,method,isBeginning,isBeginning() => Promise -ion-slides,method,isEnd,isEnd() => Promise -ion-slides,method,length,length() => Promise -ion-slides,method,lockSwipeToNext,lockSwipeToNext(lock: boolean) => Promise -ion-slides,method,lockSwipeToPrev,lockSwipeToPrev(lock: boolean) => Promise -ion-slides,method,lockSwipes,lockSwipes(lock: boolean) => Promise -ion-slides,method,slideNext,slideNext(speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise -ion-slides,method,slidePrev,slidePrev(speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise -ion-slides,method,slideTo,slideTo(index: number, speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise -ion-slides,method,startAutoplay,startAutoplay() => Promise -ion-slides,method,stopAutoplay,stopAutoplay() => Promise -ion-slides,method,update,update() => Promise -ion-slides,method,updateAutoHeight,updateAutoHeight(speed?: number | undefined) => Promise -ion-slides,event,ionSlideDidChange,void,true -ion-slides,event,ionSlideDoubleTap,void,true -ion-slides,event,ionSlideDrag,void,true -ion-slides,event,ionSlideNextEnd,void,true -ion-slides,event,ionSlideNextStart,void,true -ion-slides,event,ionSlidePrevEnd,void,true -ion-slides,event,ionSlidePrevStart,void,true -ion-slides,event,ionSlideReachEnd,void,true -ion-slides,event,ionSlideReachStart,void,true -ion-slides,event,ionSlidesDidLoad,void,true -ion-slides,event,ionSlideTap,void,true -ion-slides,event,ionSlideTouchEnd,void,true -ion-slides,event,ionSlideTouchStart,void,true -ion-slides,event,ionSlideTransitionEnd,void,true -ion-slides,event,ionSlideTransitionStart,void,true -ion-slides,event,ionSlideWillChange,void,true -ion-slides,css-prop,--bullet-background -ion-slides,css-prop,--bullet-background-active -ion-slides,css-prop,--progress-bar-background -ion-slides,css-prop,--progress-bar-background-active -ion-slides,css-prop,--scroll-bar-background -ion-slides,css-prop,--scroll-bar-background-active - ion-spinner,shadow ion-spinner,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record | undefined,undefined,false,true ion-spinner,prop,duration,number | undefined,undefined,false,false diff --git a/core/src/components.d.ts b/core/src/components.d.ts index a76da2bcccd..ace6c430373 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -2569,101 +2569,6 @@ export namespace Components { */ "animated": boolean; } - interface IonSlide { - } - interface IonSlides { - /** - * Get the index of the active slide. - */ - "getActiveIndex": () => Promise; - /** - * Get the index of the previous slide. - */ - "getPreviousIndex": () => Promise; - /** - * Get the Swiper instance. Use this to access the full Swiper API. See https://swiperjs.com/swiper-api for all API options. - */ - "getSwiper": () => Promise; - /** - * Get whether or not the current slide is the first slide. - */ - "isBeginning": () => Promise; - /** - * Get whether or not the current slide is the last slide. - */ - "isEnd": () => Promise; - /** - * Get the total number of slides. - */ - "length": () => Promise; - /** - * Lock or unlock the ability to slide to the next slide. - * @param lock If `true`, disable swiping to the next slide. - */ - "lockSwipeToNext": (lock: boolean) => Promise; - /** - * Lock or unlock the ability to slide to the previous slide. - * @param lock If `true`, disable swiping to the previous slide. - */ - "lockSwipeToPrev": (lock: boolean) => Promise; - /** - * Lock or unlock the ability to slide to the next or previous slide. - * @param lock If `true`, disable swiping to the next and previous slide. - */ - "lockSwipes": (lock: boolean) => Promise; - /** - * The mode determines which platform styles to use. - */ - "mode"?: "ios" | "md"; - /** - * Options to pass to the swiper instance. See https://swiperjs.com/swiper-api for valid options - */ - "options": any; - /** - * If `true`, show the pagination. - */ - "pager": boolean; - /** - * If `true`, show the scrollbar. - */ - "scrollbar": boolean; - /** - * Transition to the next slide. - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events. - */ - "slideNext": (speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise; - /** - * Transition to the previous slide. - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce the [Transition/SlideChange][Start/End] transition events. - */ - "slidePrev": (speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise; - /** - * Transition to the specified slide. - * @param index The index of the slide to transition to. - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events. - */ - "slideTo": (index: number, speed?: number | undefined, runCallbacks?: boolean | undefined) => Promise; - /** - * Start auto play. - */ - "startAutoplay": () => Promise; - /** - * Stop auto play. - */ - "stopAutoplay": () => Promise; - /** - * Update the underlying slider implementation. Call this if you've added or removed child slides. - */ - "update": () => Promise; - /** - * Force swiper to update its height (when autoHeight is enabled) for the duration equal to 'speed' parameter. - * @param speed The transition duration (in ms). - */ - "updateAutoHeight": (speed?: number | undefined) => Promise; - } interface IonSpinner { /** * The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics). @@ -3177,10 +3082,6 @@ export interface IonSelectCustomEvent extends CustomEvent { detail: T; target: HTMLIonSelectElement; } -export interface IonSlidesCustomEvent extends CustomEvent { - detail: T; - target: HTMLIonSlidesElement; -} export interface IonSplitPaneCustomEvent extends CustomEvent { detail: T; target: HTMLIonSplitPaneElement; @@ -3682,18 +3583,6 @@ declare global { prototype: HTMLIonSkeletonTextElement; new (): HTMLIonSkeletonTextElement; }; - interface HTMLIonSlideElement extends Components.IonSlide, HTMLStencilElement { - } - var HTMLIonSlideElement: { - prototype: HTMLIonSlideElement; - new (): HTMLIonSlideElement; - }; - interface HTMLIonSlidesElement extends Components.IonSlides, HTMLStencilElement { - } - var HTMLIonSlidesElement: { - prototype: HTMLIonSlidesElement; - new (): HTMLIonSlidesElement; - }; interface HTMLIonSpinnerElement extends Components.IonSpinner, HTMLStencilElement { } var HTMLIonSpinnerElement: { @@ -3851,8 +3740,6 @@ declare global { "ion-select-option": HTMLIonSelectOptionElement; "ion-select-popover": HTMLIonSelectPopoverElement; "ion-skeleton-text": HTMLIonSkeletonTextElement; - "ion-slide": HTMLIonSlideElement; - "ion-slides": HTMLIonSlidesElement; "ion-spinner": HTMLIonSpinnerElement; "ion-split-pane": HTMLIonSplitPaneElement; "ion-tab": HTMLIonTabElement; @@ -6476,90 +6363,6 @@ declare namespace LocalJSX { */ "animated"?: boolean; } - interface IonSlide { - } - interface IonSlides { - /** - * The mode determines which platform styles to use. - */ - "mode"?: "ios" | "md"; - /** - * Emitted after the active slide has changed. - */ - "onIonSlideDidChange"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the user double taps on the slide's container. - */ - "onIonSlideDoubleTap"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the slider is actively being moved. - */ - "onIonSlideDrag"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the next slide has ended. - */ - "onIonSlideNextEnd"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the next slide has started. - */ - "onIonSlideNextStart"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the previous slide has ended. - */ - "onIonSlidePrevEnd"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the previous slide has started. - */ - "onIonSlidePrevStart"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the slider is at the last slide. - */ - "onIonSlideReachEnd"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the slider is at its initial position. - */ - "onIonSlideReachStart"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the user taps/clicks on the slide's container. - */ - "onIonSlideTap"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the user releases the touch. - */ - "onIonSlideTouchEnd"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the user first touches the slider. - */ - "onIonSlideTouchStart"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the slide transition has ended. - */ - "onIonSlideTransitionEnd"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted when the slide transition has started. - */ - "onIonSlideTransitionStart"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted before the active slide has changed. - */ - "onIonSlideWillChange"?: (event: IonSlidesCustomEvent) => void; - /** - * Emitted after Swiper initialization - */ - "onIonSlidesDidLoad"?: (event: IonSlidesCustomEvent) => void; - /** - * Options to pass to the swiper instance. See https://swiperjs.com/swiper-api for valid options - */ - "options"?: any; - /** - * If `true`, show the pagination. - */ - "pager"?: boolean; - /** - * If `true`, show the scrollbar. - */ - "scrollbar"?: boolean; - } interface IonSpinner { /** * The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics). @@ -7030,8 +6833,6 @@ declare namespace LocalJSX { "ion-select-option": IonSelectOption; "ion-select-popover": IonSelectPopover; "ion-skeleton-text": IonSkeletonText; - "ion-slide": IonSlide; - "ion-slides": IonSlides; "ion-spinner": IonSpinner; "ion-split-pane": IonSplitPane; "ion-tab": IonTab; @@ -7129,8 +6930,6 @@ declare module "@stencil/core" { "ion-select-option": LocalJSX.IonSelectOption & JSXBase.HTMLAttributes; "ion-select-popover": LocalJSX.IonSelectPopover & JSXBase.HTMLAttributes; "ion-skeleton-text": LocalJSX.IonSkeletonText & JSXBase.HTMLAttributes; - "ion-slide": LocalJSX.IonSlide & JSXBase.HTMLAttributes; - "ion-slides": LocalJSX.IonSlides & JSXBase.HTMLAttributes; "ion-spinner": LocalJSX.IonSpinner & JSXBase.HTMLAttributes; "ion-split-pane": LocalJSX.IonSplitPane & JSXBase.HTMLAttributes; "ion-tab": LocalJSX.IonTab & JSXBase.HTMLAttributes; diff --git a/core/src/components/slide/slide.scss b/core/src/components/slide/slide.scss deleted file mode 100644 index 7777ce4df5f..00000000000 --- a/core/src/components/slide/slide.scss +++ /dev/null @@ -1,46 +0,0 @@ -@import "../../themes/ionic.globals"; - - -// Slide -// -------------------------------------------------- - -ion-slide { - display: block; - - width: 100%; - height: 100%; -} - -.slide-zoom { - display: block; - - width: 100%; - - text-align: center; -} - -.swiper-slide { - - // Center slide text vertically - display: flex; - position: relative; - - flex-shrink: 0; - align-items: center; - justify-content: center; - - width: 100%; - height: 100%; - - font-size: 18px; - - text-align: center; - box-sizing: border-box; -} - -.swiper-slide img { - width: auto; - max-width: 100%; - height: auto; - max-height: 100%; -} diff --git a/core/src/components/slide/slide.tsx b/core/src/components/slide/slide.tsx deleted file mode 100644 index 57c9f14ca14..00000000000 --- a/core/src/components/slide/slide.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import type { ComponentInterface } from '@stencil/core'; -import { Component, Host, h } from '@stencil/core'; - -import { getIonMode } from '../../global/ionic-global'; - -@Component({ - tag: 'ion-slide', - styleUrl: 'slide.scss', -}) -export class Slide implements ComponentInterface { - render() { - const mode = getIonMode(this); - return ( - - ); - } -} diff --git a/core/src/components/slides/IonicSwiper.ts b/core/src/components/slides/IonicSwiper.ts deleted file mode 100644 index 39cc1aefc2d..00000000000 --- a/core/src/components/slides/IonicSwiper.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { addEventListener, raf, removeEventListener } from '../../utils/helpers'; - -/** - * This is a plugin for Swiper that allows it to work - * with Ionic Framework and the routing integrations. - * Without this plugin, Swiper would be incapable of correctly - * determining the dimensions of the slides component as - * each view is initially hidden before transitioning in. - */ -const setupSwiperInIonic = (swiper: any, watchForIonPageChanges = true) => { - if (typeof (window as any) === 'undefined') { - return; - } - - const swiperEl = swiper.el; - const ionPage = swiperEl.closest('.ion-page'); - - if (!ionPage) { - if (watchForIonPageChanges) { - /** - * If no ion page found, it is possible - * that we are in the overlay setup step - * where the inner component has been - * created but not attached to the DOM yet. - * If so, wait for the .ion-page class to - * appear on the root div and re-run setup. - */ - const rootNode = swiperEl.getRootNode(); - if (rootNode.tagName === 'DIV') { - const mo = new MutationObserver((m: MutationRecord[]) => { - const mutation = m[0]; - const wasEmpty = mutation.oldValue === null; - const hasIonPage = rootNode.classList.contains('ion-page'); - - /** - * Now that we have an .ion-page class - * we can safely attempt setup again. - */ - if (wasEmpty && hasIonPage) { - mo.disconnect(); - - /** - * Set false here so we do not - * get infinite loops - */ - setupSwiperInIonic(swiper, false); - } - }); - - mo.observe(rootNode, { - attributeFilter: ['class'], - attributeOldValue: true, - }); - } - } - return; - } - - /** - * If using slides in a modal or - * popover we need to wait for the - * overlay to be shown as these components - * are hidden when they are initially created. - */ - const modalOrPopover = swiperEl.closest('ion-modal, ion-popover'); - if (modalOrPopover) { - const eventName = modalOrPopover.tagName === 'ION-MODAL' ? 'ionModalWillPresent' : 'ionPopoverWillPresent'; - const overlayCallback = () => { - /** - * We need an raf here so the update - * is fired one tick after the overlay is shown. - */ - raf(() => { - swiperEl.swiper.update(); - removeEventListener(modalOrPopover, eventName, overlayCallback); - }); - }; - addEventListener(modalOrPopover, eventName, overlayCallback); - } else { - /** - * If using slides in a page - * we need to wait for the ion-page-invisible - * class to be removed so Swiper can correctly - * compute the dimensions of the slides. - */ - const mo = new MutationObserver((m: MutationRecord[]) => { - const mutation = m[0]; - const wasPageHidden = mutation.oldValue?.includes('ion-page-invisible'); - const isPageHidden = ionPage.classList.contains('ion-page-invisible'); - - /** - * Only update Swiper if the page was - * hidden but is no longer hidden. - */ - if (!isPageHidden && isPageHidden !== wasPageHidden) { - swiperEl.swiper.update(); - } - }); - - mo.observe(ionPage, { - attributeFilter: ['class'], - attributeOldValue: true, - }); - } - - /** - * We also need to listen for the appload event - * which is emitted by Stencil in the - * event that Swiper is being used on the - * view that is rendered initially. - */ - const onAppLoad = () => { - swiperEl.swiper.update(); - removeEventListener(window, 'appload', onAppLoad); - }; - - addEventListener(window, 'appload', onAppLoad); -}; - -export const IonicSwiper = { - name: 'ionic', - on: { - afterInit(swiper: any) { - console.warn( - '[Deprecation Warning]: The IonicSwiper module has been deprecated in favor of the IonSlides module. This change was made to better support the Swiper 7 release. The IonicSwiper module will be removed in Ionic 7.0. See https://ionicframework.com/docs/api/slides#migration for revised migration steps.' - ); - - setupSwiperInIonic(swiper); - }, - }, -}; diff --git a/core/src/components/slides/slides-vendor.scss b/core/src/components/slides/slides-vendor.scss deleted file mode 100644 index 549f361a951..00000000000 --- a/core/src/components/slides/slides-vendor.scss +++ /dev/null @@ -1,621 +0,0 @@ -/** - * Swiper 4.3.5 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * http://www.idangero.us/swiper/ - * - * Copyright 2014-2018 Vladimir Kharlampidi - * - * Released under the MIT License - * - * Released on: July 31, 2018 - */ -.swiper-container { - margin: 0 auto; - position: relative; - overflow: hidden; - list-style: none; - padding: 0; - /* Fix of Webkit flickering */ - z-index: 1; -} -.swiper-container-no-flexbox .swiper-slide { - float: left; -} -.swiper-container-vertical { - height: 100%; -} -.swiper-container-vertical > .swiper-wrapper { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; -} -.swiper-wrapper { - position: relative; - width: 100%; - height: 100%; - z-index: 1; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - -o-transition-property: transform; - transition-property: transform; - transition-property: transform, -webkit-transform; - -webkit-box-sizing: content-box; - box-sizing: content-box; -} -.swiper-container-android .swiper-slide, -.swiper-wrapper { - -webkit-transform: translate3d(0px, 0, 0); - transform: translate3d(0px, 0, 0); -} -.swiper-container-multirow > .swiper-wrapper { - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} -.swiper-container-free-mode > .swiper-wrapper { - -webkit-transition-timing-function: ease-out; - -o-transition-timing-function: ease-out; - transition-timing-function: ease-out; - margin: 0 auto; -} -.swiper-slide { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - width: 100%; - height: 100%; - position: relative; - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - -o-transition-property: transform; - transition-property: transform; - transition-property: transform, -webkit-transform; -} -.swiper-invisible-blank-slide { - visibility: hidden; -} -/* Auto Height */ -.swiper-container-autoheight, -.swiper-container-autoheight .swiper-slide { - height: auto; -} -.swiper-container-autoheight .swiper-wrapper { - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - -webkit-transition-property: height, -webkit-transform; - transition-property: height, -webkit-transform; - -o-transition-property: transform, height; - transition-property: transform, height; - transition-property: transform, height, -webkit-transform; -} -/* 3D Effects */ -.swiper-container-3d { - -webkit-perspective: 1200px; - perspective: 1200px; -} -.swiper-container-3d .swiper-wrapper, -.swiper-container-3d .swiper-slide, -.swiper-container-3d .swiper-slide-shadow-left, -.swiper-container-3d .swiper-slide-shadow-right, -.swiper-container-3d .swiper-slide-shadow-top, -.swiper-container-3d .swiper-slide-shadow-bottom, -.swiper-container-3d .swiper-cube-shadow { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; -} -.swiper-container-3d .swiper-slide-shadow-left, -.swiper-container-3d .swiper-slide-shadow-right, -.swiper-container-3d .swiper-slide-shadow-top, -.swiper-container-3d .swiper-slide-shadow-bottom { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: 10; -} -.swiper-container-3d .swiper-slide-shadow-left { - background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.swiper-container-3d .swiper-slide-shadow-right { - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.swiper-container-3d .swiper-slide-shadow-top { - background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.swiper-container-3d .swiper-slide-shadow-bottom { - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); - background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -/* IE10 Windows Phone 8 Fixes */ -.swiper-container-wp8-horizontal, -.swiper-container-wp8-horizontal > .swiper-wrapper { - -ms-touch-action: pan-y; - touch-action: pan-y; -} -.swiper-container-wp8-vertical, -.swiper-container-wp8-vertical > .swiper-wrapper { - -ms-touch-action: pan-x; - touch-action: pan-x; -} -.swiper-button-prev, -.swiper-button-next { - position: absolute; - top: 50%; - width: 27px; - height: 44px; - margin-top: -22px; - z-index: 10; - cursor: pointer; - background-size: 27px 44px; - background-position: center; - background-repeat: no-repeat; -} -.swiper-button-prev.swiper-button-disabled, -.swiper-button-next.swiper-button-disabled { - opacity: 0.35; - cursor: auto; - pointer-events: none; -} -.swiper-button-prev, -.swiper-container-rtl .swiper-button-next { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - left: 10px; - right: auto; -} -.swiper-button-next, -.swiper-container-rtl .swiper-button-prev { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - right: 10px; - left: auto; -} -.swiper-button-prev.swiper-button-white, -.swiper-container-rtl .swiper-button-next.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-next.swiper-button-white, -.swiper-container-rtl .swiper-button-prev.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-prev.swiper-button-black, -.swiper-container-rtl .swiper-button-next.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-next.swiper-button-black, -.swiper-container-rtl .swiper-button-prev.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); -} -.swiper-button-lock { - display: none; -} -.swiper-pagination { - position: absolute; - text-align: center; - -webkit-transition: 300ms opacity; - -o-transition: 300ms opacity; - transition: 300ms opacity; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - z-index: 10; -} -.swiper-pagination.swiper-pagination-hidden { - opacity: 0; -} -/* Common Styles */ -.swiper-pagination-fraction, -.swiper-pagination-custom, -.swiper-container-horizontal > .swiper-pagination-bullets { - bottom: 10px; - left: 0; - width: 100%; -} -/* Bullets */ -.swiper-pagination-bullets-dynamic { - overflow: hidden; - font-size: 0; -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { - -webkit-transform: scale(0.33); - -ms-transform: scale(0.33); - transform: scale(0.33); - position: relative; -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { - -webkit-transform: scale(0.66); - -ms-transform: scale(0.66); - transform: scale(0.66); -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { - -webkit-transform: scale(0.33); - -ms-transform: scale(0.33); - transform: scale(0.33); -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { - -webkit-transform: scale(0.66); - -ms-transform: scale(0.66); - transform: scale(0.66); -} -.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { - -webkit-transform: scale(0.33); - -ms-transform: scale(0.33); - transform: scale(0.33); -} -.swiper-pagination-bullet { - width: 8px; - height: 8px; - display: inline-block; - border-radius: 100%; - background: #000; - opacity: 0.2; -} -button.swiper-pagination-bullet { - border: none; - margin: 0; - padding: 0; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -.swiper-pagination-clickable .swiper-pagination-bullet { - cursor: pointer; -} -.swiper-pagination-bullet-active { - opacity: 1; - background: #007aff; -} -.swiper-container-vertical > .swiper-pagination-bullets { - right: 10px; - top: 50%; - -webkit-transform: translate3d(0px, -50%, 0); - transform: translate3d(0px, -50%, 0); -} -.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 6px 0; - display: block; -} -.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { - top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 8px; -} -.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { - display: inline-block; - -webkit-transition: 200ms top, 200ms -webkit-transform; - transition: 200ms top, 200ms -webkit-transform; - -o-transition: 200ms transform, 200ms top; - transition: 200ms transform, 200ms top; - transition: 200ms transform, 200ms top, 200ms -webkit-transform; -} -.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 0 4px; -} -.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { - left: 50%; - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); - transform: translateX(-50%); - white-space: nowrap; -} -.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { - -webkit-transition: 200ms left, 200ms -webkit-transform; - transition: 200ms left, 200ms -webkit-transform; - -o-transition: 200ms transform, 200ms left; - transition: 200ms transform, 200ms left; - transition: 200ms transform, 200ms left, 200ms -webkit-transform; -} -.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { - -webkit-transition: 200ms right, 200ms -webkit-transform; - transition: 200ms right, 200ms -webkit-transform; - -o-transition: 200ms transform, 200ms right; - transition: 200ms transform, 200ms right; - transition: 200ms transform, 200ms right, 200ms -webkit-transform; -} -/* Progress */ -.swiper-pagination-progressbar { - background: rgba(0, 0, 0, 0.25); - position: absolute; -} -.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { - background: #007aff; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - -webkit-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); - -webkit-transform-origin: left top; - -ms-transform-origin: left top; - transform-origin: left top; -} -.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { - -webkit-transform-origin: right top; - -ms-transform-origin: right top; - transform-origin: right top; -} -.swiper-container-horizontal > .swiper-pagination-progressbar, -.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { - width: 100%; - height: 4px; - left: 0; - top: 0; -} -.swiper-container-vertical > .swiper-pagination-progressbar, -.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { - width: 4px; - height: 100%; - left: 0; - top: 0; -} -.swiper-pagination-white .swiper-pagination-bullet-active { - background: #ffffff; -} -.swiper-pagination-progressbar.swiper-pagination-white { - background: rgba(255, 255, 255, 0.25); -} -.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill { - background: #ffffff; -} -.swiper-pagination-black .swiper-pagination-bullet-active { - background: #000000; -} -.swiper-pagination-progressbar.swiper-pagination-black { - background: rgba(0, 0, 0, 0.25); -} -.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill { - background: #000000; -} -.swiper-pagination-lock { - display: none; -} -/* Scrollbar */ -.swiper-scrollbar { - border-radius: 10px; - position: relative; - -ms-touch-action: none; - background: rgba(0, 0, 0, 0.1); -} -.swiper-container-horizontal > .swiper-scrollbar { - position: absolute; - left: 1%; - bottom: 3px; - z-index: 50; - height: 5px; - width: 98%; -} -.swiper-container-vertical > .swiper-scrollbar { - position: absolute; - right: 3px; - top: 1%; - z-index: 50; - width: 5px; - height: 98%; -} -.swiper-scrollbar-drag { - height: 100%; - width: 100%; - position: relative; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - left: 0; - top: 0; -} -.swiper-scrollbar-cursor-drag { - cursor: move; -} -.swiper-scrollbar-lock { - display: none; -} -.swiper-zoom-container { - width: 100%; - height: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - text-align: center; -} -.swiper-zoom-container > img, -.swiper-zoom-container > svg, -.swiper-zoom-container > canvas { - max-width: 100%; - max-height: 100%; - -o-object-fit: contain; - object-fit: contain; -} -.swiper-slide-zoomed { - cursor: move; -} -/* Preloader */ -.swiper-lazy-preloader { - width: 42px; - height: 42px; - position: absolute; - left: 50%; - top: 50%; - margin-left: -21px; - margin-top: -21px; - z-index: 10; - -webkit-transform-origin: 50%; - -ms-transform-origin: 50%; - transform-origin: 50%; - -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; - animation: swiper-preloader-spin 1s steps(12, end) infinite; -} -.swiper-lazy-preloader:after { - display: block; - content: ''; - width: 100%; - height: 100%; - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - background-position: 50%; - background-size: 100%; - background-repeat: no-repeat; -} -.swiper-lazy-preloader-white:after { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -@-webkit-keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -/* a11y */ -.swiper-container .swiper-notification { - position: absolute; - left: 0; - top: 0; - pointer-events: none; - opacity: 0; - z-index: -1000; -} -.swiper-container-fade.swiper-container-free-mode .swiper-slide { - -webkit-transition-timing-function: ease-out; - -o-transition-timing-function: ease-out; - transition-timing-function: ease-out; -} -.swiper-container-fade .swiper-slide { - pointer-events: none; - -webkit-transition-property: opacity; - -o-transition-property: opacity; - transition-property: opacity; -} -.swiper-container-fade .swiper-slide .swiper-slide { - pointer-events: none; -} -.swiper-container-fade .swiper-slide-active, -.swiper-container-fade .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.swiper-container-cube { - overflow: visible; -} -.swiper-container-cube .swiper-slide { - pointer-events: none; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - z-index: 1; - visibility: hidden; - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - width: 100%; - height: 100%; -} -.swiper-container-cube .swiper-slide .swiper-slide { - pointer-events: none; -} -.swiper-container-cube.swiper-container-rtl .swiper-slide { - -webkit-transform-origin: 100% 0; - -ms-transform-origin: 100% 0; - transform-origin: 100% 0; -} -.swiper-container-cube .swiper-slide-active, -.swiper-container-cube .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.swiper-container-cube .swiper-slide-active, -.swiper-container-cube .swiper-slide-next, -.swiper-container-cube .swiper-slide-prev, -.swiper-container-cube .swiper-slide-next + .swiper-slide { - pointer-events: auto; - visibility: visible; -} -.swiper-container-cube .swiper-slide-shadow-top, -.swiper-container-cube .swiper-slide-shadow-bottom, -.swiper-container-cube .swiper-slide-shadow-left, -.swiper-container-cube .swiper-slide-shadow-right { - z-index: 0; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.swiper-container-cube .swiper-cube-shadow { - position: absolute; - left: 0; - bottom: 0px; - width: 100%; - height: 100%; - background: #000; - opacity: 0.6; - -webkit-filter: blur(50px); - filter: blur(50px); - z-index: 0; -} -.swiper-container-flip { - overflow: visible; -} -.swiper-container-flip .swiper-slide { - pointer-events: none; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - z-index: 1; -} -.swiper-container-flip .swiper-slide .swiper-slide { - pointer-events: none; -} -.swiper-container-flip .swiper-slide-active, -.swiper-container-flip .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.swiper-container-flip .swiper-slide-shadow-top, -.swiper-container-flip .swiper-slide-shadow-bottom, -.swiper-container-flip .swiper-slide-shadow-left, -.swiper-container-flip .swiper-slide-shadow-right { - z-index: 0; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.swiper-container-coverflow .swiper-wrapper { - /* Windows 8 IE 10 fix */ - -ms-perspective: 1200px; -} diff --git a/core/src/components/slides/slides.ios.scss b/core/src/components/slides/slides.ios.scss deleted file mode 100644 index b820358bf6e..00000000000 --- a/core/src/components/slides/slides.ios.scss +++ /dev/null @@ -1,14 +0,0 @@ -@import "./slides"; -@import "./slides.ios.vars"; - -// iOS Slides -// -------------------------------------------------- - -.slides-ios { - --bullet-background: #{$slides-ios-bullet-background}; - --bullet-background-active: #{$slides-ios-bullet-background-active}; - --progress-bar-background: #{$slides-ios-progress-bar-background}; - --progress-bar-background-active: #{$slides-ios-progress-bar-background-active}; - --scroll-bar-background: #{$slides-ios-scroll-bar-background}; - --scroll-bar-background-active: #{$slides-ios-scroll-bar-drag-background}; -} diff --git a/core/src/components/slides/slides.ios.vars.scss b/core/src/components/slides/slides.ios.vars.scss deleted file mode 100644 index 73aec90e3e3..00000000000 --- a/core/src/components/slides/slides.ios.vars.scss +++ /dev/null @@ -1,28 +0,0 @@ -@import "../../themes/ionic.globals.ios"; - -/// @prop - Background color of the bullet -$slides-ios-bullet-background: $text-color-step-800 !default; - -/// @prop - Background color of the active bullet -$slides-ios-bullet-background-active: ion-color(primary, base) !default; - -/// @prop - Alpha to use for the background color of the progress bar -$slides-ios-progress-bar-background-alpha: .25 !default; - -/// @prop - Background color of the progress bar -$slides-ios-progress-bar-background: rgba($text-color-rgb, $slides-ios-progress-bar-background-alpha) !default; - -/// @prop - Background color of the active progress bar -$slides-ios-progress-bar-background-active: ion-color(primary, shade) !default; - -/// @prop - Alpha to use for the background color of the scroll bar -$slides-ios-scroll-bar-background-alpha: .1 !default; - -/// @prop - Background color of the scroll bar -$slides-ios-scroll-bar-background: rgba($text-color-rgb, $slides-ios-scroll-bar-background-alpha) !default; - -/// @prop - Alpha to use for the background color of the scroll bar while dragging -$slides-ios-scroll-bar-drag-background-alpha: .5 !default; - -/// @prop - Background color of the scroll bar drag handle -$slides-ios-scroll-bar-drag-background: rgba($text-color-rgb, $slides-ios-scroll-bar-drag-background-alpha) !default; diff --git a/core/src/components/slides/slides.md.scss b/core/src/components/slides/slides.md.scss deleted file mode 100644 index ebdb6e84738..00000000000 --- a/core/src/components/slides/slides.md.scss +++ /dev/null @@ -1,14 +0,0 @@ -@import "./slides"; -@import "./slides.md.vars"; - -// Material Design Slides -// -------------------------------------------------- - -.slides-md { - --bullet-background: #{$slides-md-bullet-background}; - --bullet-background-active: #{$slides-md-bullet-background-active}; - --progress-bar-background: #{$slides-md-progress-bar-background}; - --progress-bar-background-active: #{$slides-md-progress-bar-background-active}; - --scroll-bar-background: #{$slides-md-scroll-bar-background}; - --scroll-bar-background-active: #{$slides-md-scroll-bar-drag-background}; -} diff --git a/core/src/components/slides/slides.md.vars.scss b/core/src/components/slides/slides.md.vars.scss deleted file mode 100644 index 906f31ddeba..00000000000 --- a/core/src/components/slides/slides.md.vars.scss +++ /dev/null @@ -1,28 +0,0 @@ -@import "../../themes/ionic.globals.md"; - -/// @prop - Background color of the bullet -$slides-md-bullet-background: $text-color-step-800 !default; - -/// @prop - Background color of the active bullet -$slides-md-bullet-background-active: ion-color(primary, base) !default; - -/// @prop - Alpha to use for the background color of the progress bar -$slides-md-progress-bar-background-alpha: .25 !default; - -/// @prop - Background color of the progress -$slides-md-progress-bar-background: rgba($text-color-rgb, $slides-md-progress-bar-background-alpha) !default; - -/// @prop - Background color of the progress bar -$slides-md-progress-bar-background-active: ion-color(primary, shade) !default; - -/// @prop - Alpha to use for the background color of the scroll bar -$slides-md-scroll-bar-background-alpha: .1 !default; - -/// @prop - Background color of the scroll bar -$slides-md-scroll-bar-background: rgba($text-color-rgb, $slides-md-scroll-bar-background-alpha) !default; - -/// @prop - Alpha to use for the background color of the scroll bar while dragging -$slides-md-scroll-bar-drag-background-alpha: .5 !default; - -/// @prop - Background color of the scroll bar drag handle -$slides-md-scroll-bar-drag-background: rgba($text-color-rgb, $slides-md-scroll-bar-drag-background-alpha) !default; diff --git a/core/src/components/slides/slides.scss b/core/src/components/slides/slides.scss deleted file mode 100644 index 25fc008332c..00000000000 --- a/core/src/components/slides/slides.scss +++ /dev/null @@ -1,56 +0,0 @@ -@import "./slides.vars"; -@import "./slides-vendor"; - -// Slides -// -------------------------------------------------- - -ion-slides { - /** - * @prop --bullet-background: Background of the pagination bullets - * @prop --bullet-background-active: Background of the active pagination bullet - * - * @prop --progress-bar-background: Background of the pagination progress-bar - * @prop --progress-bar-background-active: Background of the active pagination progress-bar - * - * @prop --scroll-bar-background: Background of the pagination scroll-bar - * @prop --scroll-bar-background-active: Background of the active pagination scroll-bar - */ - display: block; - - user-select: none; -} - - -// Pagination Bullets -// -------------------------------------------------- - -.swiper-pagination-bullet { - background: var(--bullet-background); -} - -.swiper-pagination-bullet-active { - background: var(--bullet-background-active); -} - - -// Pagination Progress Bar -// -------------------------------------------------- - -.swiper-pagination-progressbar { - background: var(--progress-bar-background); -} - -.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { - background: var(--progress-bar-background-active); -} - -// Scrollbar -// -------------------------------------------------- - -.swiper-scrollbar { - background: var(--scroll-bar-background); -} - -.swiper-scrollbar-drag { - background: var(--scroll-bar-background-active); -} diff --git a/core/src/components/slides/slides.tsx b/core/src/components/slides/slides.tsx deleted file mode 100644 index 37a2789e53a..00000000000 --- a/core/src/components/slides/slides.tsx +++ /dev/null @@ -1,522 +0,0 @@ -import type { ComponentInterface, EventEmitter } from '@stencil/core'; -import { Build, Component, Element, Event, Host, Method, Prop, Watch, h } from '@stencil/core'; - -import { getIonMode } from '../../global/ionic-global'; -import { componentOnReady } from '../../utils/helpers'; - -import type { SwiperInterface, SwiperOptions } from './swiper/swiper-interface'; - -/** - * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use. - */ -@Component({ - tag: 'ion-slides', - styleUrls: { - ios: 'slides.ios.scss', - md: 'slides.md.scss', - }, - assetsDirs: ['swiper'], -}) -export class Slides implements ComponentInterface { - private scrollbarEl?: HTMLElement; - private paginationEl?: HTMLElement; - private swiperReady = false; - private mutationO?: MutationObserver; - private readySwiper!: (swiper: SwiperInterface) => void; - private swiper: Promise = new Promise((resolve) => { - this.readySwiper = resolve; - }); - - @Element() el!: HTMLIonSlidesElement; - - /** - * Options to pass to the swiper instance. - * See https://swiperjs.com/swiper-api for valid options - */ - @Prop() options: any = {}; // SwiperOptions; // TODO - - @Watch('options') - async optionsChanged() { - if (this.swiperReady) { - const swiper = await this.getSwiper(); - if (swiper?.params) { - Object.assign(swiper.params, this.options); - await this.update(); - } - } - } - - /** - * If `true`, show the pagination. - */ - @Prop() pager = false; - - /** - * If `true`, show the scrollbar. - */ - @Prop() scrollbar = false; - - /** - * Emitted after Swiper initialization - */ - @Event() ionSlidesDidLoad!: EventEmitter; - - /** - * Emitted when the user taps/clicks on the slide's container. - */ - @Event() ionSlideTap!: EventEmitter; - - /** - * Emitted when the user double taps on the slide's container. - */ - @Event() ionSlideDoubleTap!: EventEmitter; - - /** - * Emitted before the active slide has changed. - */ - @Event() ionSlideWillChange!: EventEmitter; - - /** - * Emitted after the active slide has changed. - */ - @Event() ionSlideDidChange!: EventEmitter; - - /** - * Emitted when the next slide has started. - */ - @Event() ionSlideNextStart!: EventEmitter; - - /** - * Emitted when the previous slide has started. - */ - @Event() ionSlidePrevStart!: EventEmitter; - - /** - * Emitted when the next slide has ended. - */ - @Event() ionSlideNextEnd!: EventEmitter; - - /** - * Emitted when the previous slide has ended. - */ - @Event() ionSlidePrevEnd!: EventEmitter; - - /** - * Emitted when the slide transition has started. - */ - @Event() ionSlideTransitionStart!: EventEmitter; - - /** - * Emitted when the slide transition has ended. - */ - @Event() ionSlideTransitionEnd!: EventEmitter; - - /** - * Emitted when the slider is actively being moved. - */ - @Event() ionSlideDrag!: EventEmitter; - - /** - * Emitted when the slider is at its initial position. - */ - @Event() ionSlideReachStart!: EventEmitter; - - /** - * Emitted when the slider is at the last slide. - */ - @Event() ionSlideReachEnd!: EventEmitter; - - /** - * Emitted when the user first touches the slider. - */ - @Event() ionSlideTouchStart!: EventEmitter; - - /** - * Emitted when the user releases the touch. - */ - @Event() ionSlideTouchEnd!: EventEmitter; - - componentWillLoad() { - console.warn( - `[Deprecation Warning]: ion-slides has been deprecated and will be removed in Ionic Framework v7.0. We recommend using the framework-specific integrations that Swiper.js provides, allowing for faster bug fixes and an improved developer experience. See https://ionicframework.com/docs/api/slides for more information including migration steps.` - ); - } - - connectedCallback() { - if (Build.isBrowser) { - const mut = (this.mutationO = new MutationObserver(() => { - if (this.swiperReady) { - this.update(); - } - })); - mut.observe(this.el, { - childList: true, - subtree: true, - }); - - componentOnReady(this.el, () => { - this.initSwiper(); - }); - } - } - - disconnectedCallback() { - if (this.mutationO) { - this.mutationO.disconnect(); - this.mutationO = undefined; - } - } - - /** - * Update the underlying slider implementation. Call this if you've added or removed - * child slides. - */ - @Method() - async update() { - const [swiper] = await Promise.all([this.getSwiper(), waitForSlides(this.el)]); - swiper.update(); - } - - /** - * Force swiper to update its height (when autoHeight is enabled) for the duration - * equal to 'speed' parameter. - * - * @param speed The transition duration (in ms). - */ - @Method() - async updateAutoHeight(speed?: number) { - const swiper = await this.getSwiper(); - swiper.updateAutoHeight(speed); - } - - /** - * Transition to the specified slide. - * - * @param index The index of the slide to transition to. - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events. - */ - @Method() - async slideTo(index: number, speed?: number, runCallbacks?: boolean) { - const swiper = await this.getSwiper(); - swiper.slideTo(index, speed, runCallbacks); - } - - /** - * Transition to the next slide. - * - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events. - */ - @Method() - async slideNext(speed?: number, runCallbacks?: boolean) { - const swiper = await this.getSwiper(); - swiper.slideNext(speed!, runCallbacks!); - } - - /** - * Transition to the previous slide. - * - * @param speed The transition duration (in ms). - * @param runCallbacks If true, the transition will produce the [Transition/SlideChange][Start/End] transition events. - */ - @Method() - async slidePrev(speed?: number, runCallbacks?: boolean) { - const swiper = await this.getSwiper(); - swiper.slidePrev(speed, runCallbacks); - } - - /** - * Get the index of the active slide. - */ - @Method() - async getActiveIndex(): Promise { - const swiper = await this.getSwiper(); - return swiper.activeIndex; - } - - /** - * Get the index of the previous slide. - */ - @Method() - async getPreviousIndex(): Promise { - const swiper = await this.getSwiper(); - return swiper.previousIndex; - } - - /** - * Get the total number of slides. - */ - @Method() - async length(): Promise { - const swiper = await this.getSwiper(); - return swiper.slides.length; - } - - /** - * Get whether or not the current slide is the last slide. - */ - @Method() - async isEnd(): Promise { - const swiper = await this.getSwiper(); - return swiper.isEnd; - } - - /** - * Get whether or not the current slide is the first slide. - */ - @Method() - async isBeginning(): Promise { - const swiper = await this.getSwiper(); - return swiper.isBeginning; - } - - /** - * Start auto play. - */ - @Method() - async startAutoplay() { - const swiper = await this.getSwiper(); - if (swiper.autoplay) { - swiper.autoplay.start(); - } - } - - /** - * Stop auto play. - */ - @Method() - async stopAutoplay() { - const swiper = await this.getSwiper(); - if (swiper.autoplay) { - swiper.autoplay.stop(); - } - } - - /** - * Lock or unlock the ability to slide to the next slide. - * - * @param lock If `true`, disable swiping to the next slide. - */ - @Method() - async lockSwipeToNext(lock: boolean) { - const swiper = await this.getSwiper(); - swiper.allowSlideNext = !lock; - } - - /** - * Lock or unlock the ability to slide to the previous slide. - * - * @param lock If `true`, disable swiping to the previous slide. - */ - @Method() - async lockSwipeToPrev(lock: boolean) { - const swiper = await this.getSwiper(); - swiper.allowSlidePrev = !lock; - } - - /** - * Lock or unlock the ability to slide to the next or previous slide. - * - * @param lock If `true`, disable swiping to the next and previous slide. - */ - @Method() - async lockSwipes(lock: boolean) { - const swiper = await this.getSwiper(); - swiper.allowSlideNext = !lock; - swiper.allowSlidePrev = !lock; - swiper.allowTouchMove = !lock; - } - - /** - * Get the Swiper instance. - * Use this to access the full Swiper API. - * See https://swiperjs.com/swiper-api for all API options. - */ - @Method() - async getSwiper(): Promise { - return this.swiper; - } - - private async initSwiper() { - const finalOptions = this.normalizeOptions(); - - // init swiper core - // eslint-disable-next-line - // @ts-ignore - const { Swiper } = await import('./swiper/swiper.bundle.js'); - await waitForSlides(this.el); - const swiper = new Swiper(this.el, finalOptions); - this.swiperReady = true; - this.readySwiper(swiper); - } - - private normalizeOptions(): SwiperOptions { - // Base options, can be changed - // TODO Add interface SwiperOptions - const swiperOptions: SwiperOptions = { - effect: undefined, - direction: 'horizontal', - initialSlide: 0, - loop: false, - parallax: false, - slidesPerView: 1, - spaceBetween: 0, - speed: 300, - slidesPerColumn: 1, - slidesPerColumnFill: 'column', - slidesPerGroup: 1, - centeredSlides: false, - slidesOffsetBefore: 0, - slidesOffsetAfter: 0, - touchEventsTarget: 'container', - autoplay: false, - freeMode: false, - freeModeMomentum: true, - freeModeMomentumRatio: 1, - freeModeMomentumBounce: true, - freeModeMomentumBounceRatio: 1, - freeModeMomentumVelocityRatio: 1, - freeModeSticky: false, - freeModeMinimumVelocity: 0.02, - autoHeight: false, - setWrapperSize: false, - zoom: { - maxRatio: 3, - minRatio: 1, - toggle: false, - }, - touchRatio: 1, - touchAngle: 45, - simulateTouch: true, - touchStartPreventDefault: false, - shortSwipes: true, - longSwipes: true, - longSwipesRatio: 0.5, - longSwipesMs: 300, - followFinger: true, - threshold: 0, - touchMoveStopPropagation: true, - touchReleaseOnEdges: false, - iOSEdgeSwipeDetection: false, - iOSEdgeSwipeThreshold: 20, - resistance: true, - resistanceRatio: 0.85, - watchSlidesProgress: false, - watchSlidesVisibility: false, - preventClicks: true, - preventClicksPropagation: true, - slideToClickedSlide: false, - loopAdditionalSlides: 0, - noSwiping: true, - runCallbacksOnInit: true, - coverflowEffect: { - rotate: 50, - stretch: 0, - depth: 100, - modifier: 1, - slideShadows: true, - }, - flipEffect: { - slideShadows: true, - limitRotation: true, - }, - cubeEffect: { - slideShadows: true, - shadow: true, - shadowOffset: 20, - shadowScale: 0.94, - }, - fadeEffect: { - crossFade: false, - }, - a11y: { - prevSlideMessage: 'Previous slide', - nextSlideMessage: 'Next slide', - firstSlideMessage: 'This is the first slide', - lastSlideMessage: 'This is the last slide', - }, - }; - - if (this.pager) { - swiperOptions.pagination = { - el: this.paginationEl!, - type: 'bullets', - clickable: false, - hideOnClick: false, - }; - } - - if (this.scrollbar) { - swiperOptions.scrollbar = { - el: this.scrollbarEl!, - hide: true, - }; - } - - // Keep the event options separate, we dont want users - // overwriting these - const eventOptions: SwiperOptions = { - on: { - init: () => { - setTimeout(() => { - this.ionSlidesDidLoad.emit(); - // Forces the swiper instance to update after initializing. - this.update(); - }, 20); - }, - slideChangeTransitionStart: this.ionSlideWillChange.emit, - slideChangeTransitionEnd: this.ionSlideDidChange.emit, - slideNextTransitionStart: this.ionSlideNextStart.emit, - slidePrevTransitionStart: this.ionSlidePrevStart.emit, - slideNextTransitionEnd: this.ionSlideNextEnd.emit, - slidePrevTransitionEnd: this.ionSlidePrevEnd.emit, - transitionStart: this.ionSlideTransitionStart.emit, - transitionEnd: this.ionSlideTransitionEnd.emit, - sliderMove: this.ionSlideDrag.emit, - reachBeginning: this.ionSlideReachStart.emit, - reachEnd: this.ionSlideReachEnd.emit, - touchStart: this.ionSlideTouchStart.emit, - touchEnd: this.ionSlideTouchEnd.emit, - tap: this.ionSlideTap.emit, - doubleTap: this.ionSlideDoubleTap.emit, - }, - }; - - const customEvents = !!this.options && !!this.options.on ? this.options.on : {}; - - // merge "on" event listeners, while giving our event listeners priority - const mergedEventOptions = { on: { ...customEvents, ...eventOptions.on } }; - - // Merge the base, user options, and events together then pas to swiper - return { ...swiperOptions, ...this.options, ...mergedEventOptions }; - } - - render() { - const mode = getIonMode(this); - return ( - -
- -
- {this.pager &&
(this.paginationEl = el)}>
} - {this.scrollbar &&
(this.scrollbarEl = el)}>
} -
- ); - } -} - -const waitForSlides = (el: HTMLElement) => { - return Promise.all( - Array.from(el.querySelectorAll('ion-slide')).map((s) => new Promise((resolve) => componentOnReady(s, resolve))) - ); -}; diff --git a/core/src/components/slides/slides.vars.scss b/core/src/components/slides/slides.vars.scss deleted file mode 100644 index f0bed98927b..00000000000 --- a/core/src/components/slides/slides.vars.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import "../../themes/ionic.globals"; - -// Slides -// -------------------------------------------------- - - diff --git a/core/src/components/slides/test/app-intro/index.html b/core/src/components/slides/test/app-intro/index.html deleted file mode 100644 index 75b26ea9bd5..00000000000 --- a/core/src/components/slides/test/app-intro/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - Slides - App Intro - - - - - - - - - - - - - - - - Prev - - - Next - - - - - - - -
-

- Welcome to - ICA -

-

- The - ionic conference app is a practical preview of the ionic framework in action, and a demonstration - of proper code use. -

-
-
- - - -
-

What is Ionic?

-

- Ionic Framework is an open source SDK that enables developers to build high quality mobile apps - with web technologies like HTML, CSS, and JavaScript. -

-
-
- - - -
-

What is Ionic Pro?

-

- Ionic Pro is a powerful set of services and features built on top of Ionic Framework that brings - a totally new level of app development agility to mobile dev teams. -

-
-
- - - - Back to the start - -
-
-
- - - diff --git a/core/src/components/slides/test/basic/e2e.ts b/core/src/components/slides/test/basic/e2e.ts deleted file mode 100644 index 01279aefc87..00000000000 --- a/core/src/components/slides/test/basic/e2e.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { newE2EPage } from '@stencil/core/testing'; - -test('slides: basic', async () => { - const page = await newE2EPage({ - url: '/src/components/slides/test/basic?ionic:_testing=true', - }); - - const compare = await page.compareScreenshot(); - expect(compare).toMatchScreenshot(); -}); diff --git a/core/src/components/slides/test/basic/index.html b/core/src/components/slides/test/basic/index.html deleted file mode 100644 index 197154b9563..00000000000 --- a/core/src/components/slides/test/basic/index.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - Slides - Basic - - - - - - - - - - - - - - - -

Slide 1

-
- -

Slide 2

-
- -

Slide 3

-
-
- Add slide - Remove slide - - Slide Prev - Slide Next - Get Active Index - Get Previous Index - - Is the End? - Is the beginning? - - Slide to slide index 2 - Get slide length - Start auto play - Stop auto play - Set options -
-
- - - diff --git a/core/src/components/slides/test/image/cat.jpeg b/core/src/components/slides/test/image/cat.jpeg deleted file mode 100644 index 36bd32d143c..00000000000 Binary files a/core/src/components/slides/test/image/cat.jpeg and /dev/null differ diff --git a/core/src/components/slides/test/image/e2e.ts b/core/src/components/slides/test/image/e2e.ts deleted file mode 100644 index 5a12745e697..00000000000 --- a/core/src/components/slides/test/image/e2e.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { newE2EPage } from '@stencil/core/testing'; - -test('slides: image', async () => { - const page = await newE2EPage({ - url: '/src/components/slides/test/image?ionic:_testing=true', - }); - - const compare = await page.compareScreenshot(); - expect(compare).toMatchScreenshot(); -}); diff --git a/core/src/components/slides/test/image/index.html b/core/src/components/slides/test/image/index.html deleted file mode 100644 index 5a82431e60e..00000000000 --- a/core/src/components/slides/test/image/index.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - Slides - Image - - - - - - - - - - - - - - - - - - - - - - - - - Slide Prev - Slide Next - Get Active Index - Get Previous Index - - Is the End? - Is the beginning? - - Slide to slide index 2 - Get slide length - Start auto play - Stop auto play - Set options - - - - - diff --git a/core/src/components/slides/test/pagination/index.html b/core/src/components/slides/test/pagination/index.html deleted file mode 100644 index c54c4e108f6..00000000000 --- a/core/src/components/slides/test/pagination/index.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - Slides - Pagination - - - - - - - - - - - - - - -

Default Slides

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Bullet Pagination

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Custom Bullet Pagination

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Progress Pagination

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Custom Progress Pagination

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Fraction Pagination

-
- -

Slide 2

-
- -

Slide 3

-
-
-
-
- - - - - - diff --git a/core/src/components/slides/test/prevent-default/e2e.ts b/core/src/components/slides/test/prevent-default/e2e.ts deleted file mode 100644 index e92c108342d..00000000000 --- a/core/src/components/slides/test/prevent-default/e2e.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { newE2EPage } from '@stencil/core/testing'; - -test('slides: prevent-default', async () => { - // For this specific test, _testing=false to import tap-click in app.tsx - const page = await newE2EPage({ - url: '/src/components/slides/test/prevent-default?ionic:_testing=false', - }); - - const screenshotCompares = []; - - screenshotCompares.push(await page.compareScreenshot()); - - const scroller = await page.find('#scrollDownButton'); - const button = await page.find('#changeBackgroundButton'); - const contentWithBackground = await page.find('#contentWithBackground'); - - await page.waitForTimeout(500); - - await scroller.click(); - await page.waitForTimeout(500); - - screenshotCompares.push(await page.compareScreenshot('scroll down button')); - - await button.click(); - - screenshotCompares.push(await page.compareScreenshot('change background')); - - expect(contentWithBackground).toHaveClasses(['blueBackground']); - - for (const screenshotCompare of screenshotCompares) { - expect(screenshotCompare).toMatchScreenshot(); - } -}); diff --git a/core/src/components/slides/test/prevent-default/index.html b/core/src/components/slides/test/prevent-default/index.html deleted file mode 100644 index 8c95e4ac88d..00000000000 --- a/core/src/components/slides/test/prevent-default/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Slides - Prevent Default - - - - - - - - - - - - - - -
- Scroll down -
-
- Change Background -
-
-
-
-
-
- - - diff --git a/core/src/components/slides/test/scrollbar/index.html b/core/src/components/slides/test/scrollbar/index.html deleted file mode 100644 index 92b74476213..00000000000 --- a/core/src/components/slides/test/scrollbar/index.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Slides - Scrollbar - - - - - - - - - - - - - - -

Default Slides

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Scrollbar

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Visible Scrollbar

-
- -

Slide 2

-
- -

Slide 3

-
-
- - - -

Custom Visible Scrollbar

-
- -

Slide 2

-
- -

Slide 3

-
-
-
-
- - - - - - diff --git a/core/src/components/slides/test/standalone/e2e.ts b/core/src/components/slides/test/standalone/e2e.ts deleted file mode 100644 index e7f1bccff69..00000000000 --- a/core/src/components/slides/test/standalone/e2e.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { newE2EPage } from '@stencil/core/testing'; - -test('slides: standalone', async () => { - const page = await newE2EPage({ - url: '/src/components/slides/test/standalone?ionic:_testing=true', - }); - - const compare = await page.compareScreenshot(); - expect(compare).toMatchScreenshot(); -}); diff --git a/core/src/components/slides/test/standalone/index.html b/core/src/components/slides/test/standalone/index.html deleted file mode 100644 index 671d1f683b9..00000000000 --- a/core/src/components/slides/test/standalone/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Slides - Standalone - - - - - - - - - - - -

Slide 1

-
- - -

Slide 2

-
- - -

Slide 3

-
-
- - - diff --git a/core/src/components/slides/test/vertical/e2e.ts b/core/src/components/slides/test/vertical/e2e.ts deleted file mode 100644 index d3c57a304a8..00000000000 --- a/core/src/components/slides/test/vertical/e2e.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { newE2EPage } from '@stencil/core/testing'; - -test('slides: vertical', async () => { - const page = await newE2EPage({ - url: '/src/components/slides/test/vertical?ionic:_testing=true', - }); - - const compare = await page.compareScreenshot(); - expect(compare).toMatchScreenshot(); -}); diff --git a/core/src/components/slides/test/vertical/index.html b/core/src/components/slides/test/vertical/index.html deleted file mode 100644 index 6aeb0ec36b4..00000000000 --- a/core/src/components/slides/test/vertical/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - Slides - Vertical - - - - - - - - - - - - - - -

Slide 1

-
- -

Slide 2

-
- -

Slide 3

-
-
-
-
- - - - - - diff --git a/core/src/css/ionic-swiper.scss b/core/src/css/ionic-swiper.scss index 24e5eaaf4e9..3161c5ca964 100644 --- a/core/src/css/ionic-swiper.scss +++ b/core/src/css/ionic-swiper.scss @@ -1,5 +1,5 @@ @import "../themes/ionic.skip-warns.scss"; -@import "../components/slides/slides.ios.vars.scss"; +@import "../themes/ionic.globals.ios.scss"; // Slides // -------------------------------------------------- @@ -9,12 +9,12 @@ // These values are the same for iOS and MD // We just do not add a .md or .ios class beforehand // so the styles are easier to override by the user. - --bullet-background: #{$slides-ios-bullet-background}; - --bullet-background-active: #{$slides-ios-bullet-background-active}; - --progress-bar-background: #{$slides-ios-progress-bar-background}; - --progress-bar-background-active: #{$slides-ios-progress-bar-background-active}; - --scroll-bar-background: #{$slides-ios-scroll-bar-background}; - --scroll-bar-background-active: #{$slides-ios-scroll-bar-drag-background}; + --bullet-background: $text-color-step-800; + --bullet-background-active: ion-color(primary, base); + --progress-bar-background: rgba($text-color-rgb, .25); + --progress-bar-background-active: ion-color(primary, shade); + --scroll-bar-background: rgba($text-color-rgb, .1); + --scroll-bar-background-active: rgba($text-color-rgb, .5); /** * @prop --bullet-background: Background of the pagination bullets * @prop --bullet-background-active: Background of the active pagination bullet diff --git a/core/src/index.ts b/core/src/index.ts index 7d0c7131cff..69443064338 100644 --- a/core/src/index.ts +++ b/core/src/index.ts @@ -27,5 +27,4 @@ export { popoverController, toastController, } from './utils/overlays'; -export { IonicSwiper } from './components/slides/IonicSwiper'; export { IonicSlides } from './components/slides/IonicSlides'; diff --git a/core/src/utils/test/modes/e2e.ts b/core/src/utils/test/modes/e2e.ts index d814245e524..e62af3e366e 100644 --- a/core/src/utils/test/modes/e2e.ts +++ b/core/src/utils/test/modes/e2e.ts @@ -48,7 +48,6 @@ test('component: modes', async () => { 'ion-list', 'ion-picker', 'ion-refresher', - 'ion-slides', 'ion-split-pane', ]; @@ -130,8 +129,6 @@ test('component: modes', async () => { 'ion-select-option', 'ion-select-popover', 'ion-skeleton-text', - 'ion-slide', - 'ion-slides', 'ion-spinner', 'ion-split-pane', 'ion-tab-bar', diff --git a/core/src/utils/test/modes/index.html b/core/src/utils/test/modes/index.html index 6139084cf03..27b9fc24f9e 100644 --- a/core/src/utils/test/modes/index.html +++ b/core/src/utils/test/modes/index.html @@ -93,8 +93,6 @@ - - diff --git a/core/stencil.config.ts b/core/stencil.config.ts index 0c4fd477d65..00bc7a9219c 100644 --- a/core/stencil.config.ts +++ b/core/stencil.config.ts @@ -45,7 +45,6 @@ export const config: Config = { { components: ['ion-searchbar'] }, { components: ['ion-segment', 'ion-segment-button'] }, { components: ['ion-select', 'ion-select-option', 'ion-select-popover'] }, - { components: ['ion-slides', 'ion-slide'] }, { components: ['ion-spinner'] }, { components: ['ion-split-pane'] }, { components: ['ion-tabs', 'ion-tab'] }, diff --git a/packages/react/src/components/index.ts b/packages/react/src/components/index.ts index 99c47be63ce..3f0e1156ec9 100644 --- a/packages/react/src/components/index.ts +++ b/packages/react/src/components/index.ts @@ -6,7 +6,6 @@ export { createGesture, iosTransitionAnimation, mdTransitionAnimation, - IonicSwiper, IonicSlides, getTimeGivenProgression, diff --git a/packages/react/src/components/proxies.ts b/packages/react/src/components/proxies.ts index aa2b07fb80e..99897431763 100644 --- a/packages/react/src/components/proxies.ts +++ b/packages/react/src/components/proxies.ts @@ -60,8 +60,6 @@ import { defineCustomElement as defineIonSegmentButton } from '@ionic/core/compo import { defineCustomElement as defineIonSelect } from '@ionic/core/components/ion-select.js'; import { defineCustomElement as defineIonSelectOption } from '@ionic/core/components/ion-select-option.js'; import { defineCustomElement as defineIonSkeletonText } from '@ionic/core/components/ion-skeleton-text.js'; -import { defineCustomElement as defineIonSlide } from '@ionic/core/components/ion-slide.js'; -import { defineCustomElement as defineIonSlides } from '@ionic/core/components/ion-slides.js'; import { defineCustomElement as defineIonSpinner } from '@ionic/core/components/ion-spinner.js'; import { defineCustomElement as defineIonSplitPane } from '@ionic/core/components/ion-split-pane.js'; import { defineCustomElement as defineIonTab } from '@ionic/core/components/ion-tab.js'; @@ -127,8 +125,6 @@ export const IonSegmentButton = /*@__PURE__*/createReactComponent('ion-select', undefined, undefined, defineIonSelect); export const IonSelectOption = /*@__PURE__*/createReactComponent('ion-select-option', undefined, undefined, defineIonSelectOption); export const IonSkeletonText = /*@__PURE__*/createReactComponent('ion-skeleton-text', undefined, undefined, defineIonSkeletonText); -export const IonSlide = /*@__PURE__*/createReactComponent('ion-slide', undefined, undefined, defineIonSlide); -export const IonSlides = /*@__PURE__*/createReactComponent('ion-slides', undefined, undefined, defineIonSlides); export const IonSpinner = /*@__PURE__*/createReactComponent('ion-spinner', undefined, undefined, defineIonSpinner); export const IonSplitPane = /*@__PURE__*/createReactComponent('ion-split-pane', undefined, undefined, defineIonSplitPane); export const IonTab = /*@__PURE__*/createReactComponent('ion-tab', undefined, undefined, defineIonTab); diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 0c1426cb9c9..a7682b017cb 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -37,7 +37,6 @@ export { createGesture, iosTransitionAnimation, mdTransitionAnimation, - IonicSwiper, IonicSlides, getPlatforms, isPlatform, diff --git a/packages/vue/src/proxies.ts b/packages/vue/src/proxies.ts index 39b0807b199..59ffa8f2282 100644 --- a/packages/vue/src/proxies.ts +++ b/packages/vue/src/proxies.ts @@ -66,8 +66,6 @@ import { defineCustomElement as defineIonSegmentButton } from '@ionic/core/compo import { defineCustomElement as defineIonSelect } from '@ionic/core/components/ion-select.js'; import { defineCustomElement as defineIonSelectOption } from '@ionic/core/components/ion-select-option.js'; import { defineCustomElement as defineIonSkeletonText } from '@ionic/core/components/ion-skeleton-text.js'; -import { defineCustomElement as defineIonSlide } from '@ionic/core/components/ion-slide.js'; -import { defineCustomElement as defineIonSlides } from '@ionic/core/components/ion-slides.js'; import { defineCustomElement as defineIonSpinner } from '@ionic/core/components/ion-spinner.js'; import { defineCustomElement as defineIonSplitPane } from '@ionic/core/components/ion-split-pane.js'; import { defineCustomElement as defineIonText } from '@ionic/core/components/ion-text.js'; @@ -732,32 +730,6 @@ export const IonSkeletonText = /*@__PURE__*/ defineContainer('ion-slide', defineIonSlide); - - -export const IonSlides = /*@__PURE__*/ defineContainer('ion-slides', defineIonSlides, [ - 'options', - 'pager', - 'scrollbar', - 'ionSlidesDidLoad', - 'ionSlideTap', - 'ionSlideDoubleTap', - 'ionSlideWillChange', - 'ionSlideDidChange', - 'ionSlideNextStart', - 'ionSlidePrevStart', - 'ionSlideNextEnd', - 'ionSlidePrevEnd', - 'ionSlideTransitionStart', - 'ionSlideTransitionEnd', - 'ionSlideDrag', - 'ionSlideReachStart', - 'ionSlideReachEnd', - 'ionSlideTouchStart', - 'ionSlideTouchEnd' -]); - - export const IonSpinner = /*@__PURE__*/ defineContainer('ion-spinner', defineIonSpinner, [ 'color', 'duration', diff --git a/packages/vue/test-app/src/router/index.ts b/packages/vue/test-app/src/router/index.ts index 7f6f9422d95..3cc2de01fec 100644 --- a/packages/vue/test-app/src/router/index.ts +++ b/packages/vue/test-app/src/router/index.ts @@ -33,10 +33,6 @@ const routes: Array = [ path: '/inputs', component: () => import('@/views/Inputs.vue') }, - { - path: '/slides', - component: () => import('@/views/Slides.vue') - }, { path: '/default-href', component: () => import('@/views/DefaultHref.vue') diff --git a/packages/vue/test-app/src/views/Home.vue b/packages/vue/test-app/src/views/Home.vue index cbd4155feab..6e4ded880f2 100644 --- a/packages/vue/test-app/src/views/Home.vue +++ b/packages/vue/test-app/src/views/Home.vue @@ -23,9 +23,6 @@ Inputs - - Slides - Navigation diff --git a/packages/vue/test-app/src/views/Slides.vue b/packages/vue/test-app/src/views/Slides.vue deleted file mode 100644 index 1114a909e6f..00000000000 --- a/packages/vue/test-app/src/views/Slides.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/packages/vue/types/proxies.d.ts b/packages/vue/types/proxies.d.ts index 6c199f708e6..7a302ea122a 100644 --- a/packages/vue/types/proxies.d.ts +++ b/packages/vue/types/proxies.d.ts @@ -69,8 +69,6 @@ export declare const IonSegmentButton: import("vue").FunctionalComponent; export declare const IonSelectOption: import("vue").FunctionalComponent; export declare const IonSkeletonText: import("vue").FunctionalComponent; -export declare const IonSlide: import("vue").FunctionalComponent; -export declare const IonSlides: import("vue").FunctionalComponent; export declare const IonSpinner: import("vue").FunctionalComponent; export declare const IonSplitPane: import("vue").FunctionalComponent; export declare const IonTab: import("vue").FunctionalComponent;