mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 11:17:19 +08:00
fix(vue): update Stencil Vue output target (#30159)
This patch includes some necessary updates for `@stencil/vue-output-target@v0.9.0`: - we started to export Stencils helpers as runtime via `@stencil/vue-output-target/runtime` similar to what we did in React - this version requires some updates to Vue and TypeScript as well - adjustments related to that update
This commit is contained in:

committed by
GitHub

parent
0030be8195
commit
eb725fce6e
@ -3,20 +3,24 @@ import type { VNode } from "vue";
|
||||
import { h, defineComponent, shallowRef } from "vue";
|
||||
|
||||
const userComponents = shallowRef([]);
|
||||
export const IonApp = /*@__PURE__*/ defineComponent((_, { attrs, slots }) => {
|
||||
defineCustomElement();
|
||||
return () => {
|
||||
return h(
|
||||
"ion-app",
|
||||
{
|
||||
...attrs,
|
||||
},
|
||||
[slots.default && slots.default(), ...userComponents.value]
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
IonApp.name = "IonApp";
|
||||
export const IonApp = /*@__PURE__*/ defineComponent(
|
||||
(_, { attrs, slots }) => {
|
||||
defineCustomElement();
|
||||
return () => {
|
||||
return h(
|
||||
"ion-app",
|
||||
{
|
||||
name: "IonApp",
|
||||
...attrs,
|
||||
},
|
||||
[slots.default && slots.default(), ...userComponents.value]
|
||||
);
|
||||
};
|
||||
},
|
||||
{
|
||||
name: "IonApp",
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* When rendering user components inside of
|
||||
|
@ -34,7 +34,8 @@ export const IonBackButton = /*@__PURE__*/ defineComponent(
|
||||
slots.default && slots.default()
|
||||
);
|
||||
};
|
||||
},
|
||||
{
|
||||
name: "IonBackButton",
|
||||
}
|
||||
);
|
||||
|
||||
IonBackButton.name = "IonBackButton";
|
||||
|
@ -4,54 +4,56 @@ import { defineComponent, h, shallowRef } from "vue";
|
||||
|
||||
import { VueDelegate } from "../framework-delegate";
|
||||
|
||||
export const IonNav = /*@__PURE__*/ defineComponent((props) => {
|
||||
defineCustomElement();
|
||||
const views = shallowRef([]);
|
||||
export const IonNav = /*@__PURE__*/ defineComponent(
|
||||
(props) => {
|
||||
defineCustomElement();
|
||||
const views = shallowRef([]);
|
||||
|
||||
/**
|
||||
* Allows us to create the component
|
||||
* within the Vue application context.
|
||||
*/
|
||||
const addView = (component: VNode) =>
|
||||
(views.value = [...views.value, component]);
|
||||
const removeView = (component: VNode) =>
|
||||
(views.value = views.value.filter((cmp) => cmp !== component));
|
||||
/**
|
||||
* Allows us to create the component
|
||||
* within the Vue application context.
|
||||
*/
|
||||
const addView = (component: VNode) =>
|
||||
(views.value = [...views.value, component]);
|
||||
const removeView = (component: VNode) =>
|
||||
(views.value = views.value.filter((cmp) => cmp !== component));
|
||||
|
||||
const delegate = VueDelegate(addView, removeView);
|
||||
return () => {
|
||||
return h("ion-nav", { ...props, delegate }, views.value);
|
||||
};
|
||||
});
|
||||
|
||||
IonNav.name = "IonNav";
|
||||
|
||||
/**
|
||||
* The default values follow what is defined at
|
||||
* https://ionicframework.com/docs/api/nav#properties
|
||||
* otherwise the default values on the Web Component
|
||||
* may be overridden. For example, if the default animated value
|
||||
* is not `true` below, then Vue would default the prop to `false`
|
||||
* which would override the Web Component default of `true`.
|
||||
*/
|
||||
IonNav.props = {
|
||||
animated: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
const delegate = VueDelegate(addView, removeView);
|
||||
return () => {
|
||||
return h("ion-nav", { ...props, delegate }, views.value);
|
||||
};
|
||||
},
|
||||
animation: {
|
||||
type: Function,
|
||||
default: undefined,
|
||||
},
|
||||
root: {
|
||||
type: [Function, Object, String],
|
||||
default: undefined,
|
||||
},
|
||||
rootParams: {
|
||||
type: Object,
|
||||
default: undefined,
|
||||
},
|
||||
swipeGesture: {
|
||||
type: Boolean,
|
||||
default: undefined,
|
||||
},
|
||||
};
|
||||
{
|
||||
name: "IonNav",
|
||||
/**
|
||||
* The default values follow what is defined at
|
||||
* https://ionicframework.com/docs/api/nav#properties
|
||||
* otherwise the default values on the Web Component
|
||||
* may be overridden. For example, if the default animated value
|
||||
* is not `true` below, then Vue would default the prop to `false`
|
||||
* which would override the Web Component default of `true`.
|
||||
*/
|
||||
props: {
|
||||
animated: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
animation: {
|
||||
type: Function,
|
||||
default: undefined,
|
||||
},
|
||||
root: {
|
||||
type: [Function, Object, String],
|
||||
default: undefined,
|
||||
},
|
||||
rootParams: {
|
||||
type: Object,
|
||||
default: undefined,
|
||||
},
|
||||
swipeGesture: {
|
||||
type: Boolean,
|
||||
default: undefined,
|
||||
},
|
||||
},
|
||||
}
|
||||
);
|
||||
|
@ -44,7 +44,7 @@ export const IonRouterOutlet = /*@__PURE__*/ defineComponent({
|
||||
let previousMatchedRouteRef: Ref | undefined;
|
||||
let previousMatchedPath: string | undefined;
|
||||
|
||||
provide(viewDepthKey, depth + 1);
|
||||
provide(viewDepthKey, (depth + 1) as 0);
|
||||
provide(matchedRouteKey, matchedRouteRef);
|
||||
|
||||
const ionRouterOutlet = ref();
|
||||
|
@ -43,7 +43,7 @@ export const IonTabBar = defineComponent({
|
||||
data() {
|
||||
return {
|
||||
tabState: {
|
||||
activeTab: undefined,
|
||||
activeTab: undefined as string | undefined,
|
||||
tabs: {},
|
||||
/**
|
||||
* Passing this prop to each tab button
|
||||
@ -52,7 +52,7 @@ export const IonTabBar = defineComponent({
|
||||
*/
|
||||
hasRouterOutlet: false,
|
||||
},
|
||||
tabVnodes: [],
|
||||
tabVnodes: [] as VNode[],
|
||||
/* eslint-disable @typescript-eslint/no-empty-function */
|
||||
_tabsWillChange: { type: Function, default: () => {} },
|
||||
_tabsDidChange: { type: Function, default: () => {} },
|
||||
|
@ -3,19 +3,18 @@
|
||||
* Changes made to this file will be overwritten on build.
|
||||
*/
|
||||
|
||||
import {
|
||||
import type {
|
||||
JSX,
|
||||
} from '@ionic/core/components';
|
||||
|
||||
import { defineCustomElement as defineIonActionSheetCustomElement } from '@ionic/core/components/ion-action-sheet.js'
|
||||
import { defineCustomElement as defineIonAlertCustomElement } from '@ionic/core/components/ion-alert.js'
|
||||
import { defineCustomElement as defineIonLoadingCustomElement } from '@ionic/core/components/ion-loading.js'
|
||||
import { defineCustomElement as defineIonPickerLegacyCustomElement } from '@ionic/core/components/ion-picker-legacy.js'
|
||||
import { defineCustomElement as defineIonToastCustomElement } from '@ionic/core/components/ion-toast.js'
|
||||
import { defineCustomElement as defineIonModalCustomElement } from '@ionic/core/components/ion-modal.js'
|
||||
import { defineCustomElement as defineIonPickerLegacyCustomElement } from '@ionic/core/components/ion-picker-legacy.js'
|
||||
import { defineCustomElement as defineIonPopoverCustomElement } from '@ionic/core/components/ion-popover.js'
|
||||
import { defineCustomElement as defineIonToastCustomElement } from '@ionic/core/components/ion-toast.js'
|
||||
|
||||
import { defineOverlayContainer } from '../vue-component-lib/overlays';
|
||||
import { defineOverlayContainer } from '../utils/overlays';
|
||||
|
||||
export const IonActionSheet = /*@__PURE__*/ defineOverlayContainer<JSX.IonActionSheet>('ion-action-sheet', defineIonActionSheetCustomElement, ['animated', 'backdropDismiss', 'buttons', 'cssClass', 'enterAnimation', 'header', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'subHeader', 'translucent', 'trigger']);
|
||||
|
||||
@ -23,11 +22,11 @@ export const IonAlert = /*@__PURE__*/ defineOverlayContainer<JSX.IonAlert>('ion-
|
||||
|
||||
export const IonLoading = /*@__PURE__*/ defineOverlayContainer<JSX.IonLoading>('ion-loading', defineIonLoadingCustomElement, ['animated', 'backdropDismiss', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'message', 'mode', 'showBackdrop', 'spinner', 'translucent', 'trigger']);
|
||||
|
||||
export const IonPickerLegacy = /*@__PURE__*/ defineOverlayContainer<JSX.IonPickerLegacy>('ion-picker-legacy', defineIonPickerLegacyCustomElement, ['animated', 'backdropDismiss', 'buttons', 'columns', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'showBackdrop', 'trigger']);
|
||||
|
||||
export const IonToast = /*@__PURE__*/ defineOverlayContainer<JSX.IonToast>('ion-toast', defineIonToastCustomElement, ['animated', 'buttons', 'color', 'cssClass', 'duration', 'enterAnimation', 'header', 'htmlAttributes', 'icon', 'isOpen', 'keyboardClose', 'layout', 'leaveAnimation', 'message', 'mode', 'position', 'positionAnchor', 'swipeGesture', 'translucent', 'trigger']);
|
||||
|
||||
export const IonModal = /*@__PURE__*/ defineOverlayContainer<JSX.IonModal>('ion-modal', defineIonModalCustomElement, ['animated', 'backdropBreakpoint', 'backdropDismiss', 'breakpoints', 'canDismiss', 'enterAnimation', 'focusTrap', 'handle', 'handleBehavior', 'htmlAttributes', 'initialBreakpoint', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'presentingElement', 'showBackdrop', 'trigger'], true);
|
||||
|
||||
export const IonPickerLegacy = /*@__PURE__*/ defineOverlayContainer<JSX.IonPickerLegacy>('ion-picker-legacy', defineIonPickerLegacyCustomElement, ['animated', 'backdropDismiss', 'buttons', 'columns', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'showBackdrop', 'trigger']);
|
||||
|
||||
export const IonPopover = /*@__PURE__*/ defineOverlayContainer<JSX.IonPopover>('ion-popover', defineIonPopoverCustomElement, ['alignment', 'animated', 'arrow', 'backdropDismiss', 'component', 'componentProps', 'dismissOnSelect', 'enterAnimation', 'event', 'focusTrap', 'htmlAttributes', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'reference', 'showBackdrop', 'side', 'size', 'translucent', 'trigger', 'triggerAction']);
|
||||
|
||||
export const IonToast = /*@__PURE__*/ defineOverlayContainer<JSX.IonToast>('ion-toast', defineIonToastCustomElement, ['animated', 'buttons', 'color', 'cssClass', 'duration', 'enterAnimation', 'header', 'htmlAttributes', 'icon', 'isOpen', 'keyboardClose', 'layout', 'leaveAnimation', 'message', 'mode', 'position', 'positionAnchor', 'swipeGesture', 'translucent', 'trigger']);
|
||||
|
||||
|
Reference in New Issue
Block a user