nativescript-vue 3.0.3 → 3.1.0

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.
Files changed (68) hide show
  1. package/README.md +37 -2
  2. package/devtools.js +100 -24
  3. package/dist/components/ActionBar.js +1 -1
  4. package/dist/components/ActionBar.js.map +1 -1
  5. package/dist/components/ListView.d.ts +9 -3
  6. package/dist/components/ListView.js +46 -14
  7. package/dist/components/ListView.js.map +1 -1
  8. package/dist/components/Platform.d.ts +8 -0
  9. package/dist/components/Platform.js +15 -0
  10. package/dist/components/Platform.js.map +1 -0
  11. package/dist/components/index.d.ts +16 -5
  12. package/dist/components/index.js +4 -1
  13. package/dist/components/index.js.map +1 -1
  14. package/dist/directives/vShow.js.map +1 -1
  15. package/dist/dom/index.d.ts +14 -1
  16. package/dist/dom/index.js +58 -19
  17. package/dist/dom/index.js.map +1 -1
  18. package/dist/index.d.ts +6 -2
  19. package/dist/index.js +52 -6
  20. package/dist/index.js.map +1 -1
  21. package/dist/nativescript/elements.js +61 -43
  22. package/dist/nativescript/elements.js.map +1 -1
  23. package/dist/nativescript/index.js.map +1 -1
  24. package/dist/plugins/modals.d.ts +4 -1
  25. package/dist/plugins/modals.js +85 -15
  26. package/dist/plugins/modals.js.map +1 -1
  27. package/dist/plugins/navigation.d.ts +7 -2
  28. package/dist/plugins/navigation.js +45 -7
  29. package/dist/plugins/navigation.js.map +1 -1
  30. package/dist/registry/index.js.map +1 -1
  31. package/dist/renderer/index.js.map +1 -1
  32. package/dist/renderer/modules/attrs.js +27 -8
  33. package/dist/renderer/modules/attrs.js.map +1 -1
  34. package/dist/renderer/modules/class.js.map +1 -1
  35. package/dist/renderer/modules/events.js +0 -1
  36. package/dist/renderer/modules/events.js.map +1 -1
  37. package/dist/renderer/modules/style.js +13 -16
  38. package/dist/renderer/modules/style.js.map +1 -1
  39. package/dist/renderer/nodeOps.js.map +1 -1
  40. package/dist/renderer/patchProp.js +38 -16
  41. package/dist/renderer/patchProp.js.map +1 -1
  42. package/dist/renderer/runtimeDomOverrides.d.ts +11 -0
  43. package/dist/renderer/runtimeDomOverrides.js +23 -0
  44. package/dist/renderer/runtimeDomOverrides.js.map +1 -1
  45. package/dist/runtimeHelpers.d.ts +12 -1
  46. package/dist/runtimeHelpers.js +27 -3
  47. package/dist/runtimeHelpers.js.map +1 -1
  48. package/dist/util/logger.js.map +1 -1
  49. package/nativescript.webpack.js +199 -54
  50. package/package.json +49 -19
  51. package/dist/compiler-sfc/index.d.ts +0 -1
  52. package/dist/compiler-sfc/index.js +0 -2
  53. package/dist/compiler-sfc/index.js.map +0 -1
  54. package/dist/compiler.d.ts +0 -4
  55. package/dist/compiler.js +0 -32
  56. package/dist/compiler.js.map +0 -1
  57. package/dist/directives/vModel.d.ts +0 -8
  58. package/dist/directives/vModel.js +0 -38
  59. package/dist/directives/vModel.js.map +0 -1
  60. package/dist/plugins/templates.d.ts +0 -10
  61. package/dist/plugins/templates.js +0 -12
  62. package/dist/plugins/templates.js.map +0 -1
  63. package/dist/types.d.ts +0 -15
  64. package/dist/types.js +0 -2
  65. package/dist/types.js.map +0 -1
  66. package/dist/withCompiler.d.ts +0 -3
  67. package/dist/withCompiler.js +0 -6
  68. package/dist/withCompiler.js.map +0 -1
@@ -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
- $modal: {
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 {};
@@ -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
- const modalTarget = resolveModalTarget(options.target ?? Application.getRootView());
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
- view.unmount();
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
- // remove view from modalStack
78
- modalStack.splice(modalStack.indexOf(view), 1);
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
- openModal();
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
- // todo: either change core Frame to add frames to the stack when they are created
24
- // or do as we did in 2.x - handle a Map of frames.
25
- // right now, empty frames can't be navigated as they are not recognized by `getFrameById`
26
- return Frame.getFrameById(ob);
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.substring(8);
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.substring(4);
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,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzE,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,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,4EAA4E;YAC5E,OAAO;QACT,CAAC;QACD,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,6CAA6C;IAC7C,yEAAyE;IACzE,IAAI,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACxD,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,0DAA0D;QAC1D,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
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"]}
@@ -36,7 +36,6 @@ function parseName(name) {
36
36
  while ((m = name.match(optionsModifierRE))) {
37
37
  name = name.slice(0, name.length - m[0].length);
38
38
  options[m[0].toLowerCase()] = true;
39
- options;
40
39
  }
41
40
  }
42
41
  // todo: optimise if necessary
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/renderer/modules/events.ts"],"names":[],"mappings":"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"}
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,OAAO,GAAyB,EAAE;IAElC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,EAAc,EACd,KAAa,EACb,OAAsB,EACtB,OAAO,GAAyB,EAAE;IAElC,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,EAA+D,EAC/D,OAAe,EACf,SAA4B,EAC5B,SAA4B,EAC5B,QAAQ,GAAqC,IAAI;IAEjD,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC;QACjC,QAAQ;QACR,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM;YACN,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzE,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,SAAS;YACT,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACxD,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,OAAyC,CAAC;IAC9C,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,kCAAkC;IAClC,mEAAmE;IACnE,uEAAuE;IACvE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpD,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvB,6CAA6C;AAC/C,CAAC;AAED,SAAS,aAAa,CACpB,YAAwB,EACxB,QAA0C;IAE1C,MAAM,OAAO,GAAY,CAAC,CAAQ,EAAE,EAAE;QACpC,0BAA0B,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC","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
- el.style[property] = value;
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
- if (prev) {
63
- const style = normalizeStyle(prev);
64
- // undo old styles
65
- Object.keys(style).forEach((property) => {
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
- else {
73
- // set new styles
74
- const style = normalizeStyle(next);
75
- Object.keys(style).forEach((property) => {
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":"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"}
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"]}