nativescript-vue 3.0.3 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -2
- package/devtools.js +100 -24
- package/dist/components/ActionBar.js +1 -1
- package/dist/components/ActionBar.js.map +1 -1
- package/dist/components/ListView.d.ts +9 -3
- package/dist/components/ListView.js +46 -14
- package/dist/components/ListView.js.map +1 -1
- package/dist/components/Platform.d.ts +8 -0
- package/dist/components/Platform.js +15 -0
- package/dist/components/Platform.js.map +1 -0
- package/dist/components/index.d.ts +16 -5
- package/dist/components/index.js +4 -1
- package/dist/components/index.js.map +1 -1
- package/dist/directives/vShow.js.map +1 -1
- package/dist/dom/index.d.ts +14 -1
- package/dist/dom/index.js +58 -19
- package/dist/dom/index.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +52 -6
- package/dist/index.js.map +1 -1
- package/dist/nativescript/elements.js +61 -43
- package/dist/nativescript/elements.js.map +1 -1
- package/dist/nativescript/index.js.map +1 -1
- package/dist/plugins/modals.d.ts +4 -1
- package/dist/plugins/modals.js +85 -15
- package/dist/plugins/modals.js.map +1 -1
- package/dist/plugins/navigation.d.ts +7 -2
- package/dist/plugins/navigation.js +45 -7
- package/dist/plugins/navigation.js.map +1 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/modules/attrs.js +27 -8
- package/dist/renderer/modules/attrs.js.map +1 -1
- package/dist/renderer/modules/class.js.map +1 -1
- package/dist/renderer/modules/events.js +0 -1
- package/dist/renderer/modules/events.js.map +1 -1
- package/dist/renderer/modules/style.js +13 -16
- package/dist/renderer/modules/style.js.map +1 -1
- package/dist/renderer/nodeOps.js.map +1 -1
- package/dist/renderer/patchProp.js +38 -16
- package/dist/renderer/patchProp.js.map +1 -1
- package/dist/renderer/runtimeDomOverrides.d.ts +11 -0
- package/dist/renderer/runtimeDomOverrides.js +23 -0
- package/dist/renderer/runtimeDomOverrides.js.map +1 -1
- package/dist/runtimeHelpers.d.ts +12 -1
- package/dist/runtimeHelpers.js +27 -3
- package/dist/runtimeHelpers.js.map +1 -1
- package/dist/util/logger.js.map +1 -1
- package/nativescript.webpack.js +199 -54
- package/package.json +49 -19
- package/dist/compiler-sfc/index.d.ts +0 -1
- package/dist/compiler-sfc/index.js +0 -2
- package/dist/compiler-sfc/index.js.map +0 -1
- package/dist/compiler.d.ts +0 -4
- package/dist/compiler.js +0 -32
- package/dist/compiler.js.map +0 -1
- package/dist/directives/vModel.d.ts +0 -8
- package/dist/directives/vModel.js +0 -38
- package/dist/directives/vModel.js.map +0 -1
- package/dist/plugins/templates.d.ts +0 -10
- package/dist/plugins/templates.js +0 -12
- package/dist/plugins/templates.js.map +0 -1
- package/dist/types.d.ts +0 -15
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/withCompiler.d.ts +0 -3
- package/dist/withCompiler.js +0 -6
- package/dist/withCompiler.js.map +0 -1
package/dist/plugins/modals.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ declare module '@vue/runtime-core' {
|
|
|
6
6
|
interface ComponentCustomProperties {
|
|
7
7
|
$showModal: <T = any, P = any>(component: Component<P>, options?: ShowModalOptions<P, T>) => Promise<T | false | undefined>;
|
|
8
8
|
$closeModal: <T = any>(data: T, ...args: any[]) => void;
|
|
9
|
-
|
|
9
|
+
/** The modal this component is shown in, or false when it is not a modal. */
|
|
10
|
+
$modal: false | {
|
|
10
11
|
close: <T = any>(data: T, ...args: any[]) => void;
|
|
11
12
|
};
|
|
12
13
|
}
|
|
@@ -21,6 +22,8 @@ export type ShowModalOptions<P = any, T = any> = Partial<Omit<CoreShowModalOptio
|
|
|
21
22
|
* @internal
|
|
22
23
|
*/
|
|
23
24
|
export declare function install(app: App): void;
|
|
25
|
+
/** @internal */
|
|
26
|
+
export declare function hasOpenModals(): boolean;
|
|
24
27
|
export declare function $showModal<T = any, P = any>(component: Component<P>, options?: ShowModalOptions<P, T>): Promise<T | false | undefined>;
|
|
25
28
|
export declare function $closeModal(...args: any[]): void;
|
|
26
29
|
export {};
|
package/dist/plugins/modals.js
CHANGED
|
@@ -8,6 +8,8 @@ import { createNativeView } from '../runtimeHelpers';
|
|
|
8
8
|
*/
|
|
9
9
|
export function install(app) {
|
|
10
10
|
app.config.globalProperties.$showModal = $showModal;
|
|
11
|
+
// lets templates use v-if="$modal" whether or not they are shown modally
|
|
12
|
+
app.config.globalProperties.$modal = false;
|
|
11
13
|
}
|
|
12
14
|
function resolveModalTarget(target) {
|
|
13
15
|
const ob = unref(target);
|
|
@@ -23,22 +25,69 @@ function resolveModalTarget(target) {
|
|
|
23
25
|
return false;
|
|
24
26
|
}
|
|
25
27
|
const modalStack = [];
|
|
28
|
+
/** @internal */
|
|
29
|
+
export function hasOpenModals() {
|
|
30
|
+
return modalStack.length > 0;
|
|
31
|
+
}
|
|
26
32
|
export async function $showModal(component, options = {}) {
|
|
27
|
-
|
|
33
|
+
// presenting from a view that is already presenting fails on iOS, so a
|
|
34
|
+
// modal opened while another is open is shown from the topmost one
|
|
35
|
+
const modalTarget = resolveModalTarget(options.target ??
|
|
36
|
+
modalStack.at(-1)?.nativeView ??
|
|
37
|
+
Application.getRootView());
|
|
28
38
|
if (!modalTarget) {
|
|
29
39
|
if (__DEV__) {
|
|
30
40
|
warn(`could not open modal because the target does not exist`);
|
|
31
41
|
}
|
|
32
42
|
return;
|
|
33
43
|
}
|
|
34
|
-
return new Promise((resolve) => {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
35
45
|
let isResolved = false;
|
|
36
46
|
let isReloading = false;
|
|
37
47
|
let root = new NSVRoot();
|
|
38
48
|
const reloadModal = () => {
|
|
39
49
|
isReloading = true;
|
|
50
|
+
// re-present only once the platform has finished dismissing the old
|
|
51
|
+
// modal; presenting from inside the dismissal completion (where
|
|
52
|
+
// closeCallback runs) leaves the presentation half torn down
|
|
53
|
+
const closedEvent = View.closedModallyEvent;
|
|
54
|
+
const represent = () => {
|
|
55
|
+
view.unmount();
|
|
56
|
+
view.mount(root);
|
|
57
|
+
try {
|
|
58
|
+
openModal({
|
|
59
|
+
// A Transition/SharedTransition instance is single-use: its state
|
|
60
|
+
// was consumed by the presentation that just closed. Re-presenting
|
|
61
|
+
// with it leaves the new modal's dismissal completion permanently
|
|
62
|
+
// unfired, so no later close (HMR or user) ever calls back.
|
|
63
|
+
transition: undefined,
|
|
64
|
+
animated: false,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
fail(err);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
modalStack.push(view);
|
|
72
|
+
isReloading = false;
|
|
73
|
+
};
|
|
74
|
+
// the event still fires inside the platform dismissal completion, and
|
|
75
|
+
// a non-animated dismissal runs that completion synchronously inside
|
|
76
|
+
// the dismiss call; presenting from there loses the sheet's dimming,
|
|
77
|
+
// so the present waits for the next run loop turn
|
|
78
|
+
const representNextTurn = () => setTimeout(represent, 0);
|
|
79
|
+
if (closedEvent) {
|
|
80
|
+
view.nativeView.once(closedEvent, representNextTurn);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
representNextTurn();
|
|
84
|
+
}
|
|
85
|
+
// dismiss without animation so the swap is a blink, not a slide
|
|
86
|
+
const animatedOptions = view.nativeView._modalAnimatedOptions;
|
|
87
|
+
if (Array.isArray(animatedOptions)) {
|
|
88
|
+
animatedOptions.push(false);
|
|
89
|
+
}
|
|
40
90
|
closeModal();
|
|
41
|
-
// reopening is done in `closeCallback`
|
|
42
91
|
};
|
|
43
92
|
let view = createNativeView(component, options.props, {
|
|
44
93
|
reload: reloadModal,
|
|
@@ -47,17 +96,11 @@ export async function $showModal(component, options = {}) {
|
|
|
47
96
|
if (isResolved)
|
|
48
97
|
return;
|
|
49
98
|
if (isReloading) {
|
|
50
|
-
|
|
51
|
-
view.mount(root);
|
|
52
|
-
openModal({
|
|
53
|
-
// todo: for this to work nicely, we'd need to add `animated: false` to `closeModal` as well
|
|
54
|
-
// but not currently possible without a core change.
|
|
55
|
-
// animated: false,
|
|
56
|
-
});
|
|
57
|
-
isReloading = false;
|
|
99
|
+
// re-presented from reloadModal once dismissal completes
|
|
58
100
|
return;
|
|
59
101
|
}
|
|
60
102
|
isResolved = true;
|
|
103
|
+
removeFromStack();
|
|
61
104
|
view.unmount();
|
|
62
105
|
view = null;
|
|
63
106
|
// call the closeCallback if it exists with all arguments
|
|
@@ -72,18 +115,45 @@ export async function $showModal(component, options = {}) {
|
|
|
72
115
|
closeCallback,
|
|
73
116
|
...additionalOptions,
|
|
74
117
|
});
|
|
118
|
+
// core refuses to present (target already presenting, not in the
|
|
119
|
+
// window hierarchy) by tracing an error and returning; a successful
|
|
120
|
+
// presentation always links the modal to its parent synchronously
|
|
121
|
+
if (!view.nativeView._modalParent) {
|
|
122
|
+
throw new Error(`Could not show modal: ${modalTarget.constructor.name} refused to ` +
|
|
123
|
+
`present it. Close the modal it is already presenting, or pass a ` +
|
|
124
|
+
`different target.`);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const removeFromStack = () => {
|
|
128
|
+
const stackIndex = modalStack.indexOf(view);
|
|
129
|
+
if (stackIndex > -1) {
|
|
130
|
+
modalStack.splice(stackIndex, 1);
|
|
131
|
+
}
|
|
75
132
|
};
|
|
76
133
|
const closeModal = (...args) => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
view.nativeView?.closeModal(...args);
|
|
134
|
+
removeFromStack();
|
|
135
|
+
view?.nativeView?.closeModal(...args);
|
|
80
136
|
};
|
|
81
137
|
// clone the config and globalProperties to avoid mutating the root app's config/globalProperties
|
|
82
138
|
const context = view.context;
|
|
83
139
|
context.config = Object.assign({}, context.config);
|
|
84
140
|
context.config.globalProperties = Object.assign({}, context.config.globalProperties, { $closeModal: closeModal, $modal: { close: closeModal } });
|
|
141
|
+
// a modal that never presented must not keep its app instance alive
|
|
142
|
+
const fail = (err) => {
|
|
143
|
+
isResolved = true;
|
|
144
|
+
removeFromStack();
|
|
145
|
+
view?.unmount();
|
|
146
|
+
view = null;
|
|
147
|
+
reject(err);
|
|
148
|
+
};
|
|
85
149
|
view.mount(root);
|
|
86
|
-
|
|
150
|
+
try {
|
|
151
|
+
openModal();
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
fail(err);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
87
157
|
modalStack.push(view);
|
|
88
158
|
});
|
|
89
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modals.js","sourceRoot":"","sources":["../../src/plugins/modals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"modals.js","sourceRoot":"","sources":["../../src/plugins/modals.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Application,\n ShowModalOptions as CoreShowModalOptions,\n View,\n} from '@nativescript/core';\nimport {\n App,\n Component,\n ComponentPublicInstance,\n Ref,\n unref,\n warn,\n} from '@vue/runtime-core';\nimport { isObject } from '@vue/shared';\nimport { NSVElement, NSVRoot } from '../dom';\nimport { CreateNativeViewProps, createNativeView } from '../runtimeHelpers';\n\ndeclare module '@vue/runtime-core' {\n export interface ComponentCustomProperties {\n $showModal: <T = any, P = any>(\n component: Component<P>,\n options?: ShowModalOptions<P, T>,\n ) => Promise<T | false | undefined>;\n $closeModal: <T = any>(data: T, ...args: any[]) => void;\n /** The modal this component is shown in, or false when it is not a modal. */\n $modal: false | { close: <T = any>(data: T, ...args: any[]) => void };\n }\n}\n\ntype ResolvableModalTarget = ComponentPublicInstance | NSVElement | View;\n\nexport type ShowModalOptions<P = any, T = any> = Partial<\n Omit<CoreShowModalOptions, 'closeCallback'>\n> & {\n closeCallback?: (data?: T, ...args: any[]) => void;\n props?: CreateNativeViewProps<P>;\n target?: ResolvableModalTarget;\n};\n\n/**\n * @internal\n */\nexport function install(app: App) {\n app.config.globalProperties.$showModal = $showModal;\n // lets templates use v-if=\"$modal\" whether or not they are shown modally\n app.config.globalProperties.$modal = false;\n}\n\nfunction resolveModalTarget(\n target: Ref<ResolvableModalTarget> | ResolvableModalTarget,\n): View | false {\n const ob = unref<ResolvableModalTarget>(target);\n\n if (ob instanceof NSVElement) {\n return ob.nativeView;\n } else if (ob instanceof View) {\n return ob;\n } else if (isObject(ob) && isObject(ob.$el)) {\n return ob.$el.nativeView;\n }\n\n return false;\n}\n\nconst modalStack = [];\n\n/** @internal */\nexport function hasOpenModals() {\n return modalStack.length > 0;\n}\n\nexport async function $showModal<T = any, P = any>(\n component: Component<P>,\n options: ShowModalOptions<P, T> = {},\n): Promise<T | false | undefined> {\n // presenting from a view that is already presenting fails on iOS, so a\n // modal opened while another is open is shown from the topmost one\n const modalTarget = resolveModalTarget(\n options.target ??\n modalStack.at(-1)?.nativeView ??\n Application.getRootView(),\n );\n\n if (!modalTarget) {\n if (__DEV__) {\n warn(`could not open modal because the target does not exist`);\n }\n return;\n }\n\n return new Promise((resolve, reject) => {\n let isResolved = false;\n let isReloading = false;\n let root = new NSVRoot();\n\n const reloadModal = () => {\n isReloading = true;\n\n // re-present only once the platform has finished dismissing the old\n // modal; presenting from inside the dismissal completion (where\n // closeCallback runs) leaves the presentation half torn down\n const closedEvent = (View as any).closedModallyEvent;\n const represent = () => {\n view.unmount();\n view.mount(root);\n try {\n openModal({\n // A Transition/SharedTransition instance is single-use: its state\n // was consumed by the presentation that just closed. Re-presenting\n // with it leaves the new modal's dismissal completion permanently\n // unfired, so no later close (HMR or user) ever calls back.\n transition: undefined,\n animated: false,\n });\n } catch (err) {\n fail(err);\n return;\n }\n modalStack.push(view);\n isReloading = false;\n };\n // the event still fires inside the platform dismissal completion, and\n // a non-animated dismissal runs that completion synchronously inside\n // the dismiss call; presenting from there loses the sheet's dimming,\n // so the present waits for the next run loop turn\n const representNextTurn = () => setTimeout(represent, 0);\n if (closedEvent) {\n view.nativeView.once(closedEvent, representNextTurn);\n } else {\n representNextTurn();\n }\n\n // dismiss without animation so the swap is a blink, not a slide\n const animatedOptions = (view.nativeView as any)._modalAnimatedOptions;\n if (Array.isArray(animatedOptions)) {\n animatedOptions.push(false);\n }\n\n closeModal();\n };\n\n let view = createNativeView(component, options.props, {\n reload: reloadModal,\n });\n\n const closeCallback = (data?: T, ...args: any) => {\n if (isResolved) return;\n\n if (isReloading) {\n // re-presented from reloadModal once dismissal completes\n return;\n }\n\n isResolved = true;\n removeFromStack();\n view.unmount();\n view = null;\n\n // call the closeCallback if it exists with all arguments\n options.closeCallback?.(data, ...args);\n\n // resolve the promise with the first argument, since Promise.resolve() expects only one argument\n resolve(data);\n };\n\n const openModal = (additionalOptions?: Partial<ShowModalOptions>) => {\n modalTarget.showModal(view.nativeView, {\n ...options,\n context: null,\n closeCallback,\n ...additionalOptions,\n });\n // core refuses to present (target already presenting, not in the\n // window hierarchy) by tracing an error and returning; a successful\n // presentation always links the modal to its parent synchronously\n if (!view.nativeView._modalParent) {\n throw new Error(\n `Could not show modal: ${modalTarget.constructor.name} refused to ` +\n `present it. Close the modal it is already presenting, or pass a ` +\n `different target.`,\n );\n }\n };\n const removeFromStack = () => {\n const stackIndex = modalStack.indexOf(view);\n if (stackIndex > -1) {\n modalStack.splice(stackIndex, 1);\n }\n };\n const closeModal = (...args: any[]) => {\n removeFromStack();\n view?.nativeView?.closeModal(...args);\n };\n\n // clone the config and globalProperties to avoid mutating the root app's config/globalProperties\n const context = view.context;\n context.config = Object.assign({}, context.config);\n context.config.globalProperties = Object.assign(\n {},\n context.config.globalProperties,\n { $closeModal: closeModal, $modal: { close: closeModal } },\n );\n\n // a modal that never presented must not keep its app instance alive\n const fail = (err: unknown) => {\n isResolved = true;\n removeFromStack();\n view?.unmount();\n view = null;\n reject(err);\n };\n\n view.mount(root);\n try {\n openModal();\n } catch (err) {\n fail(err);\n return;\n }\n modalStack.push(view);\n });\n}\n\nexport function $closeModal(...args) {\n const view = modalStack.at(-1);\n\n view?.context.config.globalProperties.$closeModal(...args);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Frame, NavigationEntry, Page } from '@nativescript/core';
|
|
1
|
+
import { BackstackEntry, Frame, NavigationEntry, Page } from '@nativescript/core';
|
|
2
2
|
import { App, Component, Ref } from '@vue/runtime-core';
|
|
3
3
|
import { NSVElement } from '../dom';
|
|
4
4
|
import { CreateNativeViewProps } from '../runtimeHelpers';
|
|
@@ -13,7 +13,7 @@ declare module '@vue/runtime-core' {
|
|
|
13
13
|
* @param options
|
|
14
14
|
*/
|
|
15
15
|
$navigateTo: <P = any>(target: Component<P>, options?: NavigateToOptions<P>) => Page;
|
|
16
|
-
$navigateBack: (options?: NavigateBackOptions) => void
|
|
16
|
+
$navigateBack: (options?: NavigateBackOptions) => Promise<void>;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
type ResolvableFrame = string | Ref | NSVElement | Frame | undefined;
|
|
@@ -23,6 +23,11 @@ export type NavigateToOptions<P = any> = NavigationEntry & {
|
|
|
23
23
|
};
|
|
24
24
|
export type NavigateBackOptions = {
|
|
25
25
|
frame?: ResolvableFrame;
|
|
26
|
+
/**
|
|
27
|
+
* Backstack entry or page to go back to, unwinding every page above it.
|
|
28
|
+
* Pages are what $navigateTo returns; entries come from frame.backStack.
|
|
29
|
+
*/
|
|
30
|
+
to?: BackstackEntry | Page;
|
|
26
31
|
};
|
|
27
32
|
/**
|
|
28
33
|
* @internal
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Frame, ViewBase, } from '@nativescript/core';
|
|
1
|
+
import { Application, Frame, Page, ViewBase, } from '@nativescript/core';
|
|
2
2
|
import { nextTick, unref } from '@vue/runtime-core';
|
|
3
3
|
import { NSVElement, NSVRoot } from '../dom';
|
|
4
4
|
import { createNativeView } from '../runtimeHelpers';
|
|
@@ -11,7 +11,7 @@ export function install(app) {
|
|
|
11
11
|
}
|
|
12
12
|
function resolveFrame(frame) {
|
|
13
13
|
if (!frame) {
|
|
14
|
-
return Frame.topmost();
|
|
14
|
+
return Frame.topmost() ?? findFrame(() => true);
|
|
15
15
|
}
|
|
16
16
|
const ob = unref(frame);
|
|
17
17
|
if (ob instanceof Frame) {
|
|
@@ -20,10 +20,36 @@ function resolveFrame(frame) {
|
|
|
20
20
|
if (ob instanceof NSVElement) {
|
|
21
21
|
return ob.nativeView;
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
return (Frame.getFrameById(ob) ?? findFrame((candidate) => candidate.id === ob));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Core's frame stack only lists frames that have navigated, so it is empty
|
|
27
|
+
* after Android recreates the activity, and getFrameById misses frames that
|
|
28
|
+
* never navigated. Walk the displayed views instead, topmost modal first.
|
|
29
|
+
*/
|
|
30
|
+
function findFrame(match) {
|
|
31
|
+
const root = Application.getRootView();
|
|
32
|
+
if (!root) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const roots = [...(root._getRootModalViews?.() ?? []).reverse(), root];
|
|
36
|
+
for (const view of roots) {
|
|
37
|
+
const frame = findFrameIn(view, match);
|
|
38
|
+
if (frame) {
|
|
39
|
+
return frame;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function findFrameIn(view, match) {
|
|
44
|
+
if (view instanceof Frame && match(view)) {
|
|
45
|
+
return view;
|
|
46
|
+
}
|
|
47
|
+
let found;
|
|
48
|
+
view.eachChild((child) => {
|
|
49
|
+
found = findFrameIn(child, match);
|
|
50
|
+
return !found;
|
|
51
|
+
});
|
|
52
|
+
return found;
|
|
27
53
|
}
|
|
28
54
|
export function $navigateTo(target, options) {
|
|
29
55
|
try {
|
|
@@ -105,6 +131,18 @@ export async function $navigateBack(options) {
|
|
|
105
131
|
if (!frame.canGoBack()) {
|
|
106
132
|
return;
|
|
107
133
|
}
|
|
108
|
-
frame.goBack();
|
|
134
|
+
frame.goBack(resolveBackstackEntry(frame, options?.to));
|
|
135
|
+
}
|
|
136
|
+
function resolveBackstackEntry(frame, to) {
|
|
137
|
+
if (!to) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const entry = to instanceof Page
|
|
141
|
+
? frame.backStack.find((candidate) => candidate.resolvedPage === to)
|
|
142
|
+
: to;
|
|
143
|
+
if (!entry || !frame.backStack.includes(entry)) {
|
|
144
|
+
throw new Error('Failed to navigate back: the target is not in the backstack.');
|
|
145
|
+
}
|
|
146
|
+
return entry;
|
|
109
147
|
}
|
|
110
148
|
//# sourceMappingURL=navigation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/plugins/navigation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/plugins/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Application,\n BackstackEntry,\n EventData,\n Frame,\n NavigationEntry,\n Page,\n ViewBase,\n} from '@nativescript/core';\nimport { App, Component, Ref, nextTick, unref } from '@vue/runtime-core';\nimport { NSVElement, NSVRoot } from '../dom';\nimport { CreateNativeViewProps, createNativeView } from '../runtimeHelpers';\n\ndeclare module '@vue/runtime-core' {\n export interface ComponentCustomProperties {\n /**\n * todo: update docblock\n * Navigate to {target} component.\n *\n * The frame to navigate defaults to the topmost frame\n * @param target\n * @param options\n */\n $navigateTo: <P = any>(\n target: Component<P>,\n options?: NavigateToOptions<P>,\n ) => Page;\n $navigateBack: (options?: NavigateBackOptions) => Promise<void>;\n }\n}\n\ntype ResolvableFrame = string | Ref | NSVElement | Frame | undefined;\n\nexport type NavigateToOptions<P = any> = NavigationEntry & {\n props?: CreateNativeViewProps<P>;\n frame?: ResolvableFrame;\n};\n\nexport type NavigateBackOptions = {\n frame?: ResolvableFrame;\n /**\n * Backstack entry or page to go back to, unwinding every page above it.\n * Pages are what $navigateTo returns; entries come from frame.backStack.\n */\n to?: BackstackEntry | Page;\n};\n\n/**\n * @internal\n */\nexport function install(app: App) {\n app.config.globalProperties.$navigateTo = $navigateTo;\n app.config.globalProperties.$navigateBack = $navigateBack;\n}\n\nfunction resolveFrame(frame?: ResolvableFrame): Frame | undefined {\n if (!frame) {\n return Frame.topmost() ?? findFrame(() => true);\n }\n\n const ob = unref(frame);\n\n if (ob instanceof Frame) {\n return ob;\n }\n\n if (ob instanceof NSVElement) {\n return ob.nativeView;\n }\n\n return (\n Frame.getFrameById(ob) ?? findFrame((candidate) => candidate.id === ob)\n );\n}\n\n/**\n * Core's frame stack only lists frames that have navigated, so it is empty\n * after Android recreates the activity, and getFrameById misses frames that\n * never navigated. Walk the displayed views instead, topmost modal first.\n */\nfunction findFrame(match: (frame: Frame) => boolean): Frame | undefined {\n const root = Application.getRootView();\n if (!root) {\n return undefined;\n }\n\n const roots = [...(root._getRootModalViews?.() ?? []).reverse(), root];\n for (const view of roots) {\n const frame = findFrameIn(view, match);\n if (frame) {\n return frame;\n }\n }\n}\n\nfunction findFrameIn(\n view: ViewBase,\n match: (frame: Frame) => boolean,\n): Frame | undefined {\n if (view instanceof Frame && match(view)) {\n return view;\n }\n\n let found: Frame | undefined;\n view.eachChild((child) => {\n found = findFrameIn(child, match);\n return !found;\n });\n return found;\n}\n\nexport function $navigateTo<P = any>(\n target: Component<P>,\n options?: NavigateToOptions<P>,\n): Page {\n try {\n const frame = resolveFrame(options?.frame);\n\n if (!frame) {\n throw new Error('Failed to resolve frame. Make sure your frame exists.');\n }\n\n const root = new NSVRoot();\n let isReloading = false;\n\n const disposeCallback = (args: EventData) => {\n const page = args.object as Page;\n\n // if we are reloading, don't unmount the view, as the reload will unmount/remount it.\n if (!isReloading && view) {\n page.off(ViewBase.disposeNativeViewEvent, disposeCallback);\n view.unmount();\n view = null;\n }\n };\n\n const reloadPage = () => {\n if (isReloading) {\n return;\n }\n\n // if the page we are reloading is not the current page, wait for it to be navigated to\n if (frame.currentPage !== view.nativeView) {\n view.nativeView.once('navigatedTo', () => {\n nextTick(() => {\n reloadPage();\n });\n });\n return;\n }\n\n isReloading = true;\n view.unmount();\n view.mount(root);\n view.nativeView.off(ViewBase.disposeNativeViewEvent, disposeCallback);\n view.nativeView.on(ViewBase.disposeNativeViewEvent, disposeCallback);\n\n const originalTransition = frame.currentEntry.transition;\n // replace current page\n frame.replacePage({\n ...options,\n transition: {\n name: 'fade',\n duration: 10,\n },\n create: () => view.nativeView,\n });\n // reset the transition to the original one\n frame.once('navigatedTo', () => {\n frame.currentEntry.transition = originalTransition;\n isReloading = false;\n });\n };\n\n let view = createNativeView<Page>(target, options?.props, {\n /**\n * Called by @vue/runtime-core when the component is reloaded during HMR.\n */\n reload: reloadPage,\n });\n\n view.mount(root);\n view.nativeView.off(ViewBase.disposeNativeViewEvent, disposeCallback);\n view.nativeView.on(ViewBase.disposeNativeViewEvent, disposeCallback);\n\n frame.navigate({\n ...options,\n create: () => view.nativeView,\n });\n\n return view.nativeView;\n } catch (e) {\n console.error('[$navigateTo] Failed to navigate:\\n\\n');\n console.error(e, e.stack);\n throw e;\n }\n}\n\nexport async function $navigateBack(options?: NavigateBackOptions) {\n const frame = resolveFrame(options?.frame);\n\n if (!frame) {\n throw new Error('Failed to resolve frame. Make sure your frame exists.');\n }\n\n if (!frame.canGoBack()) {\n return;\n }\n\n frame.goBack(resolveBackstackEntry(frame, options?.to));\n}\n\nfunction resolveBackstackEntry(\n frame: Frame,\n to?: BackstackEntry | Page,\n): BackstackEntry | undefined {\n if (!to) {\n return undefined;\n }\n\n const entry =\n to instanceof Page\n ? frame.backStack.find((candidate) => candidate.resolvedPage === to)\n : to;\n\n if (!entry || !frame.backStack.includes(entry)) {\n throw new Error(\n 'Failed to navigate back: the target is not in the backstack.',\n );\n }\n\n return entry;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,IAAI,eAAe,GAAgB;IACxC,SAAS,EAAE,CAAC,EAAE,wEAAwE;CACvF,CAAC;AAEF,IAAI,UAAU,GAAyC,EAAE,CAAC;AAE1D,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,+CAA+C;IAE/C,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,IAAI,mBAAmB,CAAC;AAExB,MAAM,UAAU,2BAA2B,CAAC,QAA+B;IACzE,mBAAmB,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,gDAAgD;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,QAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,QAA6B,EAC7B,IAA2B;IAE3B,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAE5D,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,eAAe,WAAW,wBAAwB;YAChD,gEAAgE,CACnE,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,cAAc,CAAC,GAAG;QAC3B,IAAI,EAAE,UAAU;QAChB,QAAQ;KACT,CAAC;IACF,mDAAmD;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,IAAI,eAAe,GAAgB;IACxC,SAAS,EAAE,CAAC,EAAE,wEAAwE;CACvF,CAAC;AAEF,IAAI,UAAU,GAAyC,EAAE,CAAC;AAE1D,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,+CAA+C;IAE/C,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,IAAI,mBAAmB,CAAC;AAExB,MAAM,UAAU,2BAA2B,CAAC,QAA+B;IACzE,mBAAmB,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,gDAAgD;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,QAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,QAA6B,EAC7B,IAA2B;IAE3B,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAE5D,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,eAAe,WAAW,wBAAwB;YAChD,gEAAgE,CACnE,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,cAAc,CAAC,GAAG;QAC3B,IAAI,EAAE,UAAU;QAChB,QAAQ;KACT,CAAC;IACF,mDAAmD;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;AACtE,CAAC","sourcesContent":["import type { NSVElement, NSVViewFlags } from '../dom';\n\nexport type NSVElementResolver = () => any;\n\nexport type NSVModelDescriptor = {\n prop: string;\n event: string;\n};\n\nexport interface NSVViewMeta {\n viewFlags: NSVViewFlags;\n nodeOps?: {\n insert(child: NSVElement, parent: NSVElement, atIndex?: number): void;\n remove(child: NSVElement, parent: NSVElement): void;\n };\n model?: NSVModelDescriptor;\n overwriteExisting?: boolean;\n}\n\nexport interface NSVElementDescriptor {\n meta: NSVViewMeta;\n resolver?: NSVElementResolver;\n}\n\nexport let defaultViewMeta: NSVViewMeta = {\n viewFlags: 0, // NSVViewFlags.NONE - circular dependency, using constant value instead\n};\n\nlet elementMap: Record<string, NSVElementDescriptor> = {};\n\nexport function getViewMeta(elementName: string): NSVViewMeta {\n // console.log(`->getViewMeta(${elementName})`)\n\n const normalizedName = normalizeElementName(elementName);\n\n const entry = elementMap[normalizedName];\n\n if (!entry) {\n throw new Error(`No known component for element ${elementName}.`);\n }\n\n return entry.meta;\n}\n\nlet unknownViewResolver;\n\nexport function registerUnknownViewResolver(resolver: (name: string) => any) {\n unknownViewResolver = resolver;\n}\n\nexport function getViewClass(elementName: string): any {\n // console.log(`->getViewClass(${elementName})`)\n const normalizedName = normalizeElementName(elementName);\n const entry = elementMap[normalizedName];\n\n if (!entry) {\n const resolved = unknownViewResolver?.(elementName);\n\n if (resolved) {\n return resolved;\n }\n\n throw new Error(`No known component for element ${elementName}.`);\n }\n\n try {\n return entry.resolver!();\n } catch (e) {\n throw new Error(`Could not load view for: ${elementName}. ${e}`);\n }\n}\n\nexport function normalizeElementName(elementName: string): string {\n return elementName.replace(/-/g, '').toLowerCase();\n}\n\nexport function registerElement(\n elementName: string,\n resolver?: NSVElementResolver,\n meta?: Partial<NSVViewMeta>,\n) {\n const normalizedName = normalizeElementName(elementName);\n const mergedMeta = Object.assign({}, defaultViewMeta, meta);\n\n if (elementMap[normalizedName] && !mergedMeta.overwriteExisting) {\n throw new Error(\n `Element for ${elementName} already registered.\\n` +\n `If this is intentional set 'overwriteExisting: true' in 'meta'`,\n );\n }\n\n elementMap[normalizedName] = {\n meta: mergedMeta,\n resolver,\n };\n // console.log(`->registerElement(${elementName})`)\n}\n\nexport function isKnownView(elementName: string) {\n return elementMap.hasOwnProperty(normalizeElementName(elementName));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;IACrC,SAAS;IACT,GAAG,OAAO;CACX,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;IACrC,SAAS;IACT,GAAG,OAAO;CACX,CAAC,CAAC","sourcesContent":["import { createRenderer } from '@vue/runtime-core';\n\nimport { patchProp } from './patchProp';\nimport { nodeOps } from './nodeOps';\n\nexport const renderer = createRenderer({\n patchProp,\n ...nodeOps,\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isBoolean, isAndroidKey, isIOSKey } from '../../runtimeHelpers';
|
|
1
|
+
import { isBoolean, isAndroidKey, isIOSKey, stripPlatformPrefix, } from '../../runtimeHelpers';
|
|
2
2
|
import { isAndroid, isIOS } from '../../nativescript';
|
|
3
3
|
export function patchAttr(el, key, prevValue, nextValue) {
|
|
4
4
|
if (isAndroidKey(key)) {
|
|
@@ -6,26 +6,45 @@ export function patchAttr(el, key, prevValue, nextValue) {
|
|
|
6
6
|
// if we encounter an android key, and we are not on android we can safely ignore it
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
|
-
key = key
|
|
9
|
+
key = stripPlatformPrefix(key, 'android');
|
|
10
10
|
}
|
|
11
11
|
else if (isIOSKey(key)) {
|
|
12
12
|
if (!isIOS) {
|
|
13
13
|
// if we encounter an ios key, and we are not on ios we can safely ignore it
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
key = key
|
|
17
|
-
}
|
|
18
|
-
// detect expandable attrs for boolean values
|
|
19
|
-
// see https://vuejs.org/v2/guide/components-props.html#Passing-a-Boolean
|
|
20
|
-
if (isBoolean(el.getAttribute(key)) && nextValue === '') {
|
|
21
|
-
nextValue = true;
|
|
16
|
+
key = stripPlatformPrefix(key, 'ios');
|
|
22
17
|
}
|
|
23
18
|
if (nextValue === null) {
|
|
24
19
|
// if the nextValue is null, we are removing the attribute
|
|
25
20
|
el.removeAttribute(key);
|
|
26
21
|
}
|
|
22
|
+
else if (nextValue === '') {
|
|
23
|
+
setBooleanShorthand(el, key);
|
|
24
|
+
}
|
|
27
25
|
else {
|
|
28
26
|
el.setAttribute(key, nextValue);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* `<Page actionBarHidden />` compiles to an empty string, which means true
|
|
31
|
+
* for a boolean property but is a legitimate value for a string one. Core
|
|
32
|
+
* keeps a property's converter private, so a boolean property is recognised
|
|
33
|
+
* either by its current value or by its converter rejecting the string.
|
|
34
|
+
*/
|
|
35
|
+
function setBooleanShorthand(el, key) {
|
|
36
|
+
if (isBoolean(el.getAttribute(key))) {
|
|
37
|
+
el.setAttribute(key, true);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
el.setAttribute(key, '');
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (!String(e?.message).startsWith('Invalid boolean')) {
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
47
|
+
el.setAttribute(key, true);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
31
50
|
//# sourceMappingURL=attrs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attrs.js","sourceRoot":"","sources":["../../../src/renderer/modules/attrs.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"attrs.js","sourceRoot":"","sources":["../../../src/renderer/modules/attrs.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,UAAU,SAAS,CACvB,EAAc,EACd,GAAW,EACX,SAAc,EACd,SAAc;IAEd,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,oFAAoF;YACpF,OAAO;QACT,CAAC;QACD,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,4EAA4E;YAC5E,OAAO;QACT,CAAC;QACD,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,0DAA0D;QAC1D,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QAC5B,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,EAAc,EAAE,GAAW;IACtD,IAAI,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAE,CAAW,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,CAAC;QACV,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["import { NSVElement } from '../../dom';\nimport {\n isBoolean,\n isAndroidKey,\n isIOSKey,\n stripPlatformPrefix,\n} from '../../runtimeHelpers';\nimport { isAndroid, isIOS } from '../../nativescript';\n\nexport function patchAttr(\n el: NSVElement,\n key: string,\n prevValue: any,\n nextValue: any,\n) {\n if (isAndroidKey(key)) {\n if (!isAndroid) {\n // if we encounter an android key, and we are not on android we can safely ignore it\n return;\n }\n key = stripPlatformPrefix(key, 'android');\n } else if (isIOSKey(key)) {\n if (!isIOS) {\n // if we encounter an ios key, and we are not on ios we can safely ignore it\n return;\n }\n key = stripPlatformPrefix(key, 'ios');\n }\n\n if (nextValue === null) {\n // if the nextValue is null, we are removing the attribute\n el.removeAttribute(key);\n } else if (nextValue === '') {\n setBooleanShorthand(el, key);\n } else {\n el.setAttribute(key, nextValue);\n }\n}\n\n/**\n * `<Page actionBarHidden />` compiles to an empty string, which means true\n * for a boolean property but is a legitimate value for a string one. Core\n * keeps a property's converter private, so a boolean property is recognised\n * either by its current value or by its converter rejecting the string.\n */\nfunction setBooleanShorthand(el: NSVElement, key: string) {\n if (isBoolean(el.getAttribute(key))) {\n el.setAttribute(key, true);\n return;\n }\n\n try {\n el.setAttribute(key, '');\n } catch (e) {\n if (!String((e as Error)?.message).startsWith('Invalid boolean')) {\n throw e;\n }\n el.setAttribute(key, true);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/renderer/modules/class.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAAC,EAAc,EAAE,KAAoB;IAC7D,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/renderer/modules/class.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAAC,EAAc,EAAE,KAAoB;IAC7D,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import { NSVElement } from '../../dom';\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nexport function patchClass(el: NSVElement, value: string | null) {\n if (value == null) {\n value = '';\n }\n el.setAttribute('class', value);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/renderer/modules/events.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,GAE3B,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,UAAU,gBAAgB,CAC9B,EAAc,EACd,KAAa,EACb,OAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/renderer/modules/events.ts"],"names":[],"mappings":"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","sourcesContent":["// import { hyphenate } from '@vue/shared'\nimport { NSVElement } from '../../dom';\nimport {\n callWithAsyncErrorHandling,\n ComponentInternalInstance,\n} from '@vue/runtime-core';\n\ninterface Invoker extends EventListener {\n value: EventValue;\n}\n\ntype EventValue = Function | Function[];\n\nexport function addEventListener(\n el: NSVElement,\n event: string,\n handler: EventListener,\n options: EventListenerOptions = {},\n) {\n el.addEventListener(event, handler, options);\n}\n\nexport function removeEventListener(\n el: NSVElement,\n event: string,\n handler: EventListener,\n options: EventListenerOptions = {},\n) {\n el.removeEventListener(event, handler);\n}\n\nexport function patchEvent(\n el: NSVElement & { _vei?: Record<string, Invoker | undefined> },\n rawName: string,\n prevValue: EventValue | null,\n nextValue: EventValue | null,\n instance: ComponentInternalInstance | null = null,\n) {\n // vei = vue event invokers\n const invokers = el._vei || (el._vei = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n // patch\n existingInvoker.value = nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n // add\n const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n // remove\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = undefined;\n }\n }\n}\n\nconst optionsModifierRE = /(?:Once|Capture)$/;\n\nfunction parseName(name: string): [string, EventListenerOptions | undefined] {\n let options: EventListenerOptions | undefined;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while ((m = name.match(optionsModifierRE))) {\n name = name.slice(0, name.length - m[0].length);\n (options as any)[m[0].toLowerCase()] = true;\n }\n }\n\n // todo: optimise if necessary\n // this isn't technically perfect,\n // since if the event name was UPPER then we'll convert it to uPPER\n // but for the majority of cases, this should be the right thing to do.\n name = name.slice(name.startsWith('on:') ? 3 : 2);\n name = name.charAt(0).toLowerCase() + name.slice(1);\n\n // return event name by removing on prefix. eg. onitemTap -> itemTap\n return [name, options];\n // return [hyphenate(name.slice(2)), options]\n}\n\nfunction createInvoker(\n initialValue: EventValue,\n instance: ComponentInternalInstance | null,\n) {\n const invoker: Invoker = (e: Event) => {\n callWithAsyncErrorHandling(invoker.value, instance, 5, [e]);\n };\n invoker.value = initialValue;\n return invoker;\n}\n"]}
|
|
@@ -33,7 +33,10 @@ function addStyleProperty(el, property, value) {
|
|
|
33
33
|
if (!_sov.has(property)) {
|
|
34
34
|
_sov.set(property, el.style[property]);
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
// every style write re-evaluates the native CSS state, so skip no-ops
|
|
37
|
+
if (el.style[property] !== value) {
|
|
38
|
+
el.style[property] = value;
|
|
39
|
+
}
|
|
37
40
|
}
|
|
38
41
|
function removeStyleProperty(el, property) {
|
|
39
42
|
const _sov = el[STYLE_ORIGINAL_VALUE] ?? (el[STYLE_ORIGINAL_VALUE] = new Map());
|
|
@@ -57,24 +60,18 @@ function removeStyleProperty(el, property) {
|
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
|
-
// todo: perhaps mimic dom version with prefixing stripped out: https://github.com/vuejs/core/blob/main/packages/runtime-dom/src/modules/style.ts
|
|
61
63
|
export function patchStyle(el, prev, next) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
const prevStyle = normalizeStyle(prev) ?? {};
|
|
65
|
+
const nextStyle = normalizeStyle(next) ?? {};
|
|
66
|
+
for (const property in prevStyle) {
|
|
67
|
+
if (!(property in nextStyle)) {
|
|
66
68
|
removeStyleProperty(el, property);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (!next) {
|
|
70
|
-
el.removeAttribute('style');
|
|
69
|
+
}
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
addStyleProperty(el, property, style[property]);
|
|
77
|
-
});
|
|
71
|
+
// next is applied in full rather than diffed against prev: Vue passes the
|
|
72
|
+
// same object for both when a reactive style object is mutated in place
|
|
73
|
+
for (const property in nextStyle) {
|
|
74
|
+
addStyleProperty(el, property, nextStyle[property]);
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
77
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/renderer/modules/style.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,aAAa,CAAC;AAIrB,SAAS,cAAc,CAAC,KAA8B;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,MAAM,CACjB,CACE,eAAgC,EAChC,YAAqC,EACrC,EAAE;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,CAAC,EACD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,KAAwB,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,mFAAmF;QACnF,QAAQ,IAAI,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAEnE,SAAS,gBAAgB,CAAC,EAAc,EAAE,QAAgB,EAAE,KAAU;IACpE,MAAM,IAAI,GACR,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IACrE,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/renderer/modules/style.ts"],"names":[],"mappings":"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","sourcesContent":["import { NSVElement } from '../../dom';\nimport {\n NormalizedStyle,\n parseStringStyle,\n isArray,\n isString,\n isObject,\n} from '@vue/shared';\n\ntype Style = string | Record<string, string | number> | null;\n\nfunction normalizeStyle(style: NormalizedStyle | Style): NormalizedStyle {\n if (!style) {\n return null;\n }\n\n if (isString(style)) {\n if (style.trim().charAt(0) === '{') {\n return JSON.parse(style);\n }\n\n return parseStringStyle(style);\n }\n\n if (isArray(style)) {\n return style.reduce(\n (\n normalizedStyle: NormalizedStyle,\n currentStyle: NormalizedStyle | Style,\n ) => {\n return Object.assign(normalizedStyle, normalizeStyle(currentStyle));\n },\n {},\n );\n }\n\n if (isObject(style)) {\n return style as NormalizedStyle;\n }\n\n return {};\n}\n\nfunction normalizeProperty(property: string) {\n if (property.endsWith('Align')) {\n // NativeScript uses Alignment instead of Align, this ensures that text-align works\n property += 'ment';\n }\n\n return property;\n}\n\nexport const STYLE_ORIGINAL_VALUE = Symbol('style_original_value');\n\nfunction addStyleProperty(el: NSVElement, property: string, value: any) {\n const _sov: Map<string, any> =\n el[STYLE_ORIGINAL_VALUE] ?? (el[STYLE_ORIGINAL_VALUE] = new Map());\n property = normalizeProperty(property);\n\n if (!_sov.has(property)) {\n _sov.set(property, el.style[property]);\n }\n\n // every style write re-evaluates the native CSS state, so skip no-ops\n if (el.style[property] !== value) {\n el.style[property] = value;\n }\n}\n\nfunction removeStyleProperty(el: NSVElement, property: string) {\n const _sov: Map<string, any> =\n el[STYLE_ORIGINAL_VALUE] ?? (el[STYLE_ORIGINAL_VALUE] = new Map());\n property = normalizeProperty(property);\n\n // only delete styles we added\n if (_sov.has(property)) {\n const originalValue = _sov.get(property);\n _sov.delete(property);\n // edge case: if a style property also exists as an attribute (ie backgroundColor)\n // changing the attribute will not update our originalValue, so when removing\n // the previous color will be applied. Fixing this would involve listening to\n // individual attribute changes, and it's not worth the overhead.\n try {\n el.style[property] = originalValue;\n } catch (err) {\n // hack: if the original value is invalid, we can't set it back to it's original value\n // instead we set it to null, which will remove the style, however this may\n // still lead to incorrect styling in some cases.\n el.style[property] = null;\n }\n }\n}\n\nexport function patchStyle(el: NSVElement, prev: Style, next: Style) {\n const prevStyle = normalizeStyle(prev) ?? {};\n const nextStyle = normalizeStyle(next) ?? {};\n\n for (const property in prevStyle) {\n if (!(property in nextStyle)) {\n removeStyleProperty(el, property);\n }\n }\n\n // next is applied in full rather than diffed against prev: Vue passes the\n // same object for both when a reactive style object is mutated in place\n for (const property in nextStyle) {\n addStyleProperty(el, property, nextStyle[property]);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeOps.js","sourceRoot":"","sources":["../../src/renderer/nodeOps.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAW,OAAO,EAAE,MAAM,QAAQ,CAAC;AAElE,MAAM,UAAU,MAAM,CACpB,EAAW,EACX,MAAkB,EAClB,MAAmC;IAEnC,qDAAqD;IACrD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,gCAAgC;QAChC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAW;IAChC,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAC1B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,SAA2B,EAC3B,mBAAwC,EACxC,UAAqE;IAErE,sCAAsC;IACtC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,6BAA6B;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,gCAAgC;IAChC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,IAAY;IACjD,uCAAuC;IACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,IAAY;IAC3D,+CAA+C;IAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,6CAA6C;IAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,MAAkB,EAClB,MAAe,EACf,SAA2B,EAC3B,KAAe,EACf,GAAa;IAEb,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAc,EAAE,OAAe;IACxD,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAuC;IACzD,MAAM;IACN,MAAM;IACN,aAAa;IACb,UAAU;IACV,aAAa;IACb,OAAO;IACP,cAAc;IACd,UAAU;IACV,WAAW;IAEX,SAAS;IACT,mBAAmB;IAEnB,UAAU;IAEV,mBAAmB;CACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"nodeOps.js","sourceRoot":"","sources":["../../src/renderer/nodeOps.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAW,OAAO,EAAE,MAAM,QAAQ,CAAC;AAElE,MAAM,UAAU,MAAM,CACpB,EAAW,EACX,MAAkB,EAClB,MAAmC;IAEnC,qDAAqD;IACrD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,gCAAgC;QAChC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAW;IAChC,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAC1B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,SAA2B,EAC3B,mBAAwC,EACxC,UAAqE;IAErE,sCAAsC;IACtC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,6BAA6B;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,gCAAgC;IAChC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,IAAY;IACjD,uCAAuC;IACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,IAAY;IAC3D,+CAA+C;IAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,6CAA6C;IAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,MAAkB,EAClB,MAAe,EACf,SAA2B,EAC3B,KAAe,EACf,GAAa;IAEb,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAc,EAAE,OAAe;IACxD,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAuC;IACzD,MAAM;IACN,MAAM;IACN,aAAa;IACb,UAAU;IACV,aAAa;IACb,OAAO;IACP,cAAc;IACd,UAAU;IACV,WAAW;IAEX,SAAS;IACT,mBAAmB;IAEnB,UAAU;IAEV,mBAAmB;CACpB,CAAC","sourcesContent":["import {\n VNodeProps,\n RendererOptions,\n ElementNamespace,\n} from '@vue/runtime-core';\n\nimport { NSVComment, NSVElement, NSVNode, NSVText } from '../dom';\n\nexport function insert(\n el: NSVNode,\n parent: NSVElement,\n anchor?: NSVNode | null | undefined,\n): void {\n // console.log(\"insert\", el, parent.tagName, anchor);\n if (anchor !== null) {\n // console.log('insert before!')\n parent.insertBefore(el, anchor);\n } else {\n parent.appendChild(el);\n }\n}\n\nexport function remove(el: NSVNode): void {\n if (el.parentNode != null) {\n el.parentNode.removeChild(el);\n }\n}\n\nexport function createElement(\n type: string,\n namespace: ElementNamespace,\n isCustomizedBuiltIn?: string | undefined,\n vnodeProps?: (VNodeProps & { [key: string]: any }) | null | undefined,\n): NSVElement {\n // console.log(\"createElement\", type);\n return new NSVElement(type);\n}\n\nexport function createText(text: string): NSVNode {\n // console.log(\"createText\");\n return new NSVText(text);\n}\n\nexport function createComment(text: string): NSVNode {\n // console.log(\"createComment\");\n return new NSVComment(text);\n}\n\nexport function setText(node: NSVNode, text: string): void {\n // console.log(\"set text\", node, text);\n node.text = text;\n}\n\nexport function setElementText(node: NSVElement, text: string): void {\n // console.log(\"set element text\", node, text);\n node.text = text;\n}\n\nexport function parentNode(node: NSVNode): NSVElement | null {\n // console.log(\"parentNode?\", node.nodeType);\n return node.parentNode;\n}\n\nexport function nextSibling(node: NSVNode): NSVNode | null {\n return node.nextSibling;\n}\n\nexport function cloneNode(node: NSVNode): NSVNode {\n console.log('CLONE NODE');\n return node;\n}\n\nexport function insertStaticContent(\n content: string,\n parent: NSVElement,\n anchor: NSVNode,\n namespace: ElementNamespace,\n start?: NSVNode,\n end?: NSVNode,\n): [NSVNode, NSVNode] {\n console.log('insert static content - not implemented.');\n\n return [undefined, undefined];\n}\n\nexport function setScopeId(el: NSVElement, scopeId: string) {\n el.setAttribute(scopeId, '');\n}\n\nexport const nodeOps: Omit<RendererOptions, 'patchProp'> = {\n insert,\n remove,\n createElement,\n createText,\n createComment,\n setText,\n setElementText,\n parentNode,\n nextSibling,\n\n cloneNode,\n insertStaticContent,\n\n setScopeId,\n\n // querySelector,\n};\n"]}
|