@shijiu/jsview-vue 2.1.23 → 2.1.200-next-vue.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 (80) hide show
  1. package/package.json +1 -1
  2. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
  3. package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
  4. package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
  5. package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
  6. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
  7. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
  8. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
  9. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
  10. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
  11. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
  12. package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
  13. package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
  14. package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
  15. package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
  16. package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
  17. package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
  18. package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
  19. package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
  20. package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
  21. package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
  22. package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
  23. package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
  24. package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
  25. package/utils/JsViewPlugin/index.js +2 -1
  26. package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
  27. package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
  28. package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
  29. package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
  30. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
  31. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
  32. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
  33. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
  34. package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
  35. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
  36. package/utils/JsViewVueTools/index.js +3 -0
  37. package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
  38. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
  39. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
  40. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
  41. package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
  42. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
  43. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
  44. package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
  45. package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
  46. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
  47. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
  48. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
  49. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
  50. package/utils/JsViewVueWidget/JsvHole.js +1 -1
  51. package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
  52. package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
  53. package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
  54. package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
  55. package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
  56. package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
  57. package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
  58. package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
  59. package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
  60. package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
  61. package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
  62. package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
  63. package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
  64. package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
  65. package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
  66. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
  67. package/utils/JsViewVueWidget/JsvSector.vue +107 -0
  68. package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
  69. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
  70. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
  71. package/utils/JsViewVueWidget/index.js +15 -7
  72. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
  73. package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
  74. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
  75. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
  76. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
  77. package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
  78. package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
  79. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
  80. /package/utils/{JsViewVueWidget → JsViewPlugin/JsvAudio/BrowserAudio}/JsvSystemAudio.vue +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shijiu/jsview-vue",
3
- "version": "2.1.23",
3
+ "version": "2.1.200-next-vue.0",
4
4
  "license": "MIT",
5
5
  "repository": "system/jsview-framework",
6
6
  "author": "mengxk",
@@ -227,7 +227,7 @@ onActivated(() => {
227
227
  });
228
228
 
229
229
  onDeactivated(() => {
230
- focusNodeRef?.onUnMount();
230
+ focusNodeRef?.onUnMount(true);
231
231
  if (focusNodeRef?.jsvVueComponent) {
232
232
  focusNodeRef.jsvVueComponent = undefined;
233
233
  }
@@ -0,0 +1,123 @@
1
+
2
+
3
+ class FocusHubApi {
4
+ private _FocusHub: any; // JsvFocusableNode中的class Hub
5
+
6
+ constructor(focusableHubRef: any) {
7
+ this._FocusHub = focusableHubRef;
8
+ }
9
+
10
+ // 内部接口
11
+ public getOrigin(): Object {
12
+ return this._FocusHub;
13
+ }
14
+
15
+ /**
16
+ * setFocus
17
+ *
18
+ * 设置焦点,在焦点对应的 JsvFocusBlock 完成mounted之前设置的话,
19
+ * 会在JsvFocusBlock完成mounted后立即设上焦点
20
+ *
21
+ * @param {string} focusName
22
+ * 当前命名空间的名字/全局命名空间的名字。
23
+ * 当前命名空间的名字: 是指和当前节点相同命名空间的名字(首字符不为".")。
24
+ * 对于二级命名空间,可以使用 "{namespace}.{name}"的方式。
25
+ * 全局命名空间的名字: 是指通过getName()函数获取后再附加下级节点的名字。
26
+ * *请注意: 请避免手写的全局命名空间名字,防止在二次集成时可能会出现名字找不到的问题。
27
+ * @param {boolean} passToChild 保持/恢复子焦点的聚焦状态(若此焦点的子焦点为聚焦状态,
28
+ * 当本焦点从失焦状态恢复为聚焦状态时,子焦点也自动回复为聚焦状态),默认为不保持/恢复。
29
+ */
30
+ public setFocus(focusName: string, passToChild: boolean = false) {
31
+ this._FocusHub.setFocus(focusName, passToChild);
32
+ }
33
+
34
+ /**
35
+ * returnFocusToParent
36
+ *
37
+ * 将焦点从当前节点还给其父JsvFocusBlock节点
38
+ */
39
+ public returnFocusToParent() {
40
+ this._FocusHub.returnFocusToParent();
41
+ }
42
+
43
+ /**
44
+ * getCurrentFocus
45
+ *
46
+ * 获取当前焦点的的 focusName 信息,用于后续的进行的 setFocus 操作
47
+ * (注意, 不带NameSpace)
48
+ *
49
+ * @return {string} 当前焦点的focusName
50
+ */
51
+ public getCurrentFocus(): string {
52
+ return this._FocusHub.getCurrentFocus();
53
+ }
54
+
55
+ /**
56
+ * getLastFocus
57
+ *
58
+ * 获得切到到当前焦点前的上一个焦点的name(注意, 不带NameSpace),
59
+ * 注意:如果上一次的焦点已经不在dom树时, 返回null
60
+ *
61
+ * @return {string} 焦点的focusName
62
+ */
63
+ public getLastFocus(): string {
64
+ return this._FocusHub.getLastFocus();
65
+ }
66
+
67
+ /**
68
+ * getDeactivedPageFocus
69
+ *
70
+ * 在对一个keep-alive的界面进行deactive后,为了未来将其active时恢复离开时的焦点时使用。
71
+ * 在 onDeactive 回调中调用
72
+ * 注意: 只有当一个有焦点的keep-alive倍deactive时才能获得
73
+ *
74
+ * @return {string} 焦点的focusName
75
+ */
76
+ public getDeactivedPageFocus(): string {
77
+ return this._FocusHub.getDeactivedPageFocus();
78
+ }
79
+
80
+ /**
81
+ * getNameSpace
82
+ *
83
+ * 获取当前FocusHub的nameSpace
84
+ *
85
+ * @return {string} 当前FocusHub的nameSpace
86
+ */
87
+ public getNameSpace(): string {
88
+ return this._FocusHub.getNameSpace();
89
+ }
90
+
91
+ /**
92
+ * enableFocusTrace
93
+ *
94
+ * 调试API: 启用焦点变化时的回调日志,通过console.log打出,其中含产生此行为的调用堆栈
95
+ *
96
+ * @param {boolean} needCallStack 是否打印焦点变化时产生变化的api调用的堆栈,例如setFocus, unmount之类
97
+ */
98
+ public enableFocusTrace(needCallStack: boolean = true) {
99
+ this._FocusHub.enableFocusTrace(needCallStack);
100
+ }
101
+
102
+ /**
103
+ * printAllFocusable
104
+ *
105
+ * 调试API: console.log当前 Hub 中所有的节点引用,只打印当前NameSpace的内容
106
+ */
107
+ public printAllFocusable() {
108
+ this._FocusHub.printAllFocusable();
109
+ }
110
+
111
+ /**
112
+ * getCurrentFocusStack
113
+ *
114
+ * 调试API: console.log当前焦点的焦点链条(从root到此节点的链条)
115
+ *
116
+ * @return {Array} 当前焦点的链条队列
117
+ */
118
+ public getCurrentFocusStack(): Array<Object> {
119
+ return this._FocusHub.getCurrentFocusStack();
120
+ }
121
+ }
122
+
123
+ export default FocusHubApi;
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable no-prototype-builtins */
2
2
 
3
3
  import JsvFocusBlock from "./JsvFocusBlock.vue";
4
+ import JsvFocusHubApi from "./JsvFocusHub.ts";
4
5
  import { inject } from "vue";
5
6
 
6
7
  const ROOT_HUB_PROVIDE_NAME = "__jsvFocusRootHub__";
@@ -11,7 +12,7 @@ const useFocusHub = (withNameSpace) => {
11
12
  let nameSpace = inject(HUB_NS_PROVIDE_NAME); // nameSpace变更由JsvFocusBlock设置namespace时变更
12
13
  if (nameSpace && nameSpace.length > 0) {
13
14
  // 使用带有namespace的hub
14
- return (inject(ROOT_HUB_PROVIDE_NAME)).wrapWithNameSpace(nameSpace);
15
+ return new JsvFocusHubApi((inject(ROOT_HUB_PROVIDE_NAME)).getOrigin().wrapWithNameSpace(nameSpace));
15
16
  }
16
17
  }
17
18
 
@@ -20,7 +21,7 @@ const useFocusHub = (withNameSpace) => {
20
21
  };
21
22
 
22
23
  export class JsvFocusManager {
23
- constructor() {}
24
+ constructor() { }
24
25
 
25
26
  install(app, ...options) {
26
27
  console.log("JsvFocusManager install");
@@ -41,7 +42,7 @@ export class JsvFocusManager {
41
42
  app.config.globalProperties.$jsvFocusManager = this;
42
43
 
43
44
  app.provide(HUB_NS_PROVIDE_NAME, null);
44
- app.provide(ROOT_HUB_PROVIDE_NAME, this.$_topFDiv.getHub());
45
+ app.provide(ROOT_HUB_PROVIDE_NAME, new JsvFocusHubApi(this.$_topFDiv.getHub()));
45
46
  }
46
47
 
47
48
  getCurrentFocusStack() {
@@ -1,72 +1,166 @@
1
1
  import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
2
+ import { ShallowRef, watch, ref, Ref } from "vue";
2
3
 
3
- export class AnimationManager {
4
- private animList: Set<AnimationNode> = new Set();
5
- private frameCount: number = 0;
4
+ export enum TaskType {
5
+ RESIZE_ITEM,
6
+ SLIDE
7
+ }
6
8
 
7
- public tryStartAnim(count: number, anim: AnimationNode, index: number) {
8
- if (count > this.frameCount) {
9
- for (let a of this.animList) {
10
- a.stop();
11
- }
12
- this.animList.clear();
13
- this.frameCount = count;
14
- this.animList.add(anim);
15
- anim.start();
16
- } else if (count == this.frameCount) {
17
- this.animList.add(anim);
18
- anim.start();
9
+ interface Task {
10
+ frameCount: number,
11
+ type: TaskType,
12
+ params: any,
13
+ }
14
+
15
+ type TaskCallback = (tasks: Array<Task>) => void;
16
+
17
+ export class MacroEndTaskManager {
18
+ private taskList: Array<Task> = [];
19
+ private frameCount: number;
20
+ private customerOnFlushTakEnd: TaskCallback;
21
+ private customerOnBreak: TaskCallback;
22
+ private mTaskToken: Ref<number> = ref(0);
23
+ private mToken: number = 0;
24
+
25
+ constructor(onFlushTask: TaskCallback, onBreak: TaskCallback) {
26
+ this.customerOnBreak = onBreak;
27
+ this.customerOnFlushTakEnd = onFlushTask;
28
+ watch(
29
+ () => this.mTaskToken.value,
30
+ () => {
31
+ this.onFlushTask();
32
+ },
33
+ {
34
+ flush: 'post'
35
+ })
36
+ }
37
+
38
+ private getToken(): number {
39
+ if (this.mToken < Number.MAX_SAFE_INTEGER) {
40
+ ++this.mToken;
19
41
  } else {
20
- // console.log("anim expired")
42
+ this.mToken = 1;
21
43
  }
44
+ return this.mToken;
22
45
  }
23
- }
24
46
 
25
- export class AnimationTools {
26
- public static getDivSlideAnim(div: any, fromX: number, fromY: number, toX: number, toY: number, animInfo: any): AnimationNode {
27
- if (animInfo) {
28
- let duration: number;
29
- if (typeof animInfo.duration == "number") {
30
- duration = animInfo.duration;
31
- } else if (typeof animInfo.speed == "number") {
32
- const deltaX = Math.abs(fromX - toX);
33
- const deltaY = Math.abs(fromY - toY);
34
- duration = Math.round(deltaX === 0 ? deltaY / animInfo.speed : deltaX / animInfo.speed);
35
- } else {
36
- throw new Error("animation duration not set.")
47
+ public addTask(type: TaskType, params: any) {
48
+ this.taskList.push({
49
+ type,
50
+ params,
51
+ frameCount: Forge.sFrameCount.count,
52
+ });
53
+ if (this.frameCount !== Forge.sFrameCount.count) {
54
+ this.frameCount = Forge.sFrameCount.count;
55
+ const breakList: Array<Task> = [];
56
+ for (let i = this.taskList.length - 1; i >= 0; --i) {
57
+ if (this.taskList[i].frameCount != this.frameCount) {
58
+ let t = this.taskList.splice(i, 1);
59
+ breakList.push(t[0]);
60
+ }
37
61
  }
62
+ this.onBreak(breakList);
63
+ this.mTaskToken.value = this.getToken();
64
+ }
65
+ }
38
66
 
39
- let slideAnimation = new Forge.TranslateAnimation(
40
- fromX,
41
- toX,
42
- fromY,
43
- toY,
44
- duration,
45
- animInfo.easing
46
- );
47
- slideAnimation.SetAnimationListener(
48
- new Forge.AnimationListener(animInfo.onStart, animInfo.onEnd, null)
49
- );
50
- return new AnimationNode(div, slideAnimation);
51
- } else {
52
- throw new Error("animInfo is null.")
67
+ private onFlushTask() {
68
+ if (this.taskList.length > 0) {
69
+ this.customerOnFlushTakEnd(this.taskList);
70
+ this.taskList = [];
53
71
  }
54
72
  }
73
+
74
+ private onBreak(taskList: Array<Task>) {
75
+ this.customerOnBreak(taskList);
76
+ }
77
+ }
78
+
79
+ interface AnimSetting {
80
+ easing?: string | null;
81
+ onStart?: () => void;
82
+ onEnd?: (done: boolean) => void;
83
+ duration?: number,
84
+ speed?: number,
55
85
  }
56
86
 
57
- class AnimationNode {
58
- private mDiv: any;
59
- private mAnimation: any;
60
- constructor(div: any, anim: any) {
61
- this.mDiv = div;
62
- this.mAnimation = anim;
87
+ class AnimObject {
88
+ private frameCount: number;
89
+ private forgeAnim: any;
90
+ private element: any;
91
+ private animSetting: AnimSetting;
92
+
93
+ constructor(frameCount: number,
94
+ element: any,
95
+ from: [number, number],
96
+ to: [number, number],
97
+ setting: AnimSetting) {
98
+ this.frameCount = frameCount;
99
+ this.animSetting = setting;
100
+ this.element = element;
101
+
102
+ let duration = 0;
103
+ if (typeof setting.duration == "number") {
104
+ duration = setting.duration;
105
+ } else if (typeof setting.speed == "number") {
106
+ duration = Math.round(Math.max(Math.abs(to[0] - from[0]), Math.abs(to[1] - from[1])) / setting.speed);
107
+ }
108
+ this.forgeAnim = new Forge.TranslateAnimation(
109
+ from[0],
110
+ to[0],
111
+ from[1],
112
+ to[1],
113
+ duration,
114
+ setting.easing
115
+ );
116
+ this.forgeAnim.SetAnimationListener(
117
+ new Forge.AnimationListener(this.onStart.bind(this), this.onEnd.bind(this), null)
118
+ );
63
119
  }
64
120
 
65
121
  public start() {
66
- this.mDiv.jsvGetProxyView(true).StartAnimation(this.mAnimation);
122
+ this.element?.jsvGetProxyView(true).StartAnimation(this.forgeAnim);
67
123
  }
68
124
 
69
125
  public stop() {
70
- this.mDiv.jsvGetProxyView(true).StopAnimation();
126
+ this.element?.jsvGetProxyView(true).StopAnimation();
127
+ }
128
+
129
+ public getFrameCount() {
130
+ return this.frameCount;
131
+ }
132
+
133
+ private onStart() {
134
+ this.animSetting?.onStart?.();
135
+ }
136
+
137
+ private onEnd(done: boolean) {
138
+ this.animSetting?.onEnd?.(done);
139
+ }
140
+ }
141
+
142
+ export class AnimationManager {
143
+ private animList: Array<AnimObject> = [];
144
+ private frameCount: number = 0;
145
+
146
+ public startSlideAnim(element: any, from: [number, number], to: [number, number], setting: AnimSetting) {
147
+ let curFrameCount = Forge.sFrameCount.count;
148
+ if (curFrameCount != this.frameCount) {
149
+ this.tryCleanOldAnim();
150
+ this.frameCount = curFrameCount;
151
+ }
152
+ const obj = new AnimObject(curFrameCount, element, from, to, setting);
153
+ this.animList.push(obj);
154
+ obj.start();
155
+ }
156
+
157
+ private tryCleanOldAnim() {
158
+ for (let i = this.animList.length - 1; i >= 0; --i) {
159
+ const anim = this.animList[i];
160
+ if (anim.getFrameCount() != this.frameCount) {
161
+ this.animList.splice(i, 1);
162
+ anim.stop();
163
+ }
164
+ }
71
165
  }
72
166
  }
@@ -3,12 +3,13 @@
3
3
  -->
4
4
  <script setup>
5
5
  import { ref, shallowRef, computed } from "vue";
6
- import { setup, RENDER_ITEM_BREAK_KEY } from "./MetroWidgetSetup";
6
+ import { setup } from "./MetroWidgetSetup";
7
7
  import {
8
8
  VERTICAL,
9
9
  HORIZONTAL,
10
10
  SlideSetting,
11
11
  SeamlessSlide,
12
+ RENDER_ITEM_BREAK_KEY,
12
13
  } from "../WidgetCommon";
13
14
 
14
15
  const props = defineProps({
@@ -55,10 +56,6 @@ const props = defineProps({
55
56
  type: Boolean,
56
57
  default: false,
57
58
  },
58
- enableTouch: {
59
- type: Boolean,
60
- default: false,
61
- },
62
59
  flingPageWidth: {
63
60
  type: Number,
64
61
  default: -1,
@@ -67,9 +64,6 @@ const props = defineProps({
67
64
  type: Number,
68
65
  default: 1 / 4,
69
66
  },
70
- dispatcher: {
71
- type: Object,
72
- },
73
67
  measures: {
74
68
  type: Function,
75
69
  required: true,
@@ -149,20 +143,26 @@ const props = defineProps({
149
143
  });
150
144
 
151
145
  const renderBreakKey = props.enableItemRenderBreak ? RENDER_ITEM_BREAK_KEY : "";
152
- const touchContainerW = ref(0);
153
- const touchContainerH = ref(0);
154
146
  const itemRender = ref(!props.enableItemRenderBreak);
155
147
  const locateDiv = shallowRef(null);
156
148
  const renderData = shallowRef([]);
157
149
  const slideDiv = shallowRef(null);
158
150
  const slideDivLeft = ref(0);
159
151
  const slideDivTop = ref(0);
160
- const itemResizeSlideDiv = shallowRef(null);
161
- const itemResizeSlideLeft = ref(0);
162
- const itemResizeSlideTop = ref(0);
163
152
  const focusNode = shallowRef(null);
164
153
  const pageUpdateToken = ref(0);
165
154
 
155
+ const normalizedPlaceHolder = computed(() => {
156
+ return {
157
+ gap: props.placeHolderSetting.gap ?? 0,
158
+ borderRadius: props.placeHolderSetting.borderRadius ?? 0,
159
+ backgroundColor: props.placeHolderSetting.backgroundColor,
160
+ focusBackgroundColor:
161
+ props.placeHolderSetting.focusBackgroundColor ??
162
+ props.placeHolderSetting.backgroundColor,
163
+ };
164
+ });
165
+
166
166
  const {
167
167
  widgetRectInfo,
168
168
  focusBlockOnFocus,
@@ -173,17 +173,12 @@ const {
173
173
  exportObject,
174
174
  } = setup(
175
175
  props,
176
- touchContainerW,
177
- touchContainerH,
178
176
  itemRender,
179
177
  locateDiv,
180
178
  renderData,
181
179
  slideDiv,
182
180
  slideDivLeft,
183
181
  slideDivTop,
184
- itemResizeSlideDiv,
185
- itemResizeSlideLeft,
186
- itemResizeSlideTop,
187
182
  focusNode,
188
183
  pageUpdateToken,
189
184
  "list"
@@ -210,13 +205,11 @@ defineExpose(exportObject);
210
205
  >
211
206
  <div
212
207
  id="slideDiv"
213
- key="touchcontainer"
208
+ key="slideDiv"
214
209
  ref="slideDiv"
215
210
  :style="{
216
211
  left: slideDivLeft,
217
212
  top: slideDivTop,
218
- width: touchContainerW,
219
- height: touchContainerH,
220
213
  }"
221
214
  >
222
215
  <div>
@@ -234,55 +227,49 @@ defineExpose(exportObject);
234
227
  }"
235
228
  >
236
229
  <div
237
- id="itemResizeSlide"
238
- key="itemResizeSlide"
239
- ref="itemResizeSlideDiv"
230
+ v-for="item in renderData"
231
+ :key="pageUpdateToken + '_' + item.index"
232
+ :ref="item.divRef"
240
233
  :style="{
241
- left: itemResizeSlideLeft,
242
- top: itemResizeSlideTop,
234
+ left: item.templateInfo.left,
235
+ top: item.templateInfo.top,
236
+ width: item.templateInfo.width,
237
+ height: item.templateInfo.height,
238
+ zIndex: item.renderStyle.zIndex,
243
239
  }"
244
240
  >
245
241
  <div
246
- v-for="item in renderData"
247
- :key="pageUpdateToken + '_' + item.index"
248
- :ref="item.divRef"
249
- :style="{
250
- ...item.renderStyle,
251
- }"
242
+ v-if="
243
+ !enableItemRenderBreak || item.mounted.value || itemRender
244
+ "
245
+ :key="renderBreakKey"
246
+ :ref="item.slotRef"
252
247
  >
253
- <div
254
- v-if="!enableItemRenderBreak || item.mounted.value || itemRender"
255
- :key="renderBreakKey"
256
- :ref="item.slotRef"
257
- >
258
- <slot
259
- name="renderItem"
260
- :key="renderBreakKey"
261
- :data="item.customerData"
262
- :onEdge="_onFocusableItemEdge"
263
- :onAction="item.registerObj"
264
- :query="item.query"
265
- :onItemEdge="_onFocusableItemEdge"
266
- ></slot>
267
- </div>
268
- <div
269
- v-if="
270
- enableItemRenderBreak &&
271
- placeHolderSetting &&
272
- !item.mounted.value
273
- "
274
- :style="{
275
- width:
276
- item.renderStyle.width -
277
- (placeHolderSetting.gap ? placeHolderSetting.gap : 0),
278
- height:
279
- item.renderStyle.height -
280
- (placeHolderSetting.gap ? placeHolderSetting.gap : 0),
281
- backgroundColor: placeHolderSetting.backgroundColor,
282
- borderRadius: placeHolderSetting.borderRadius,
283
- }"
284
- ></div>
248
+ <slot
249
+ name="renderItem"
250
+ :data="item.customerData"
251
+ :onEdge="_onFocusableItemEdge"
252
+ :onAction="item.registerObj"
253
+ :query="item.query"
254
+ :onItemEdge="_onFocusableItemEdge"
255
+ ></slot>
285
256
  </div>
257
+ <div
258
+ v-if="
259
+ enableItemRenderBreak &&
260
+ placeHolderSetting &&
261
+ !item.mounted.value
262
+ "
263
+ :style="{
264
+ width: item.renderStyle.width - normalizedPlaceHolder.gap,
265
+ height: item.renderStyle.height - normalizedPlaceHolder.gap,
266
+ backgroundColor:
267
+ exportObject.getCurrentFocusIndex() == item.index
268
+ ? normalizedPlaceHolder.focusBackgroundColor
269
+ : normalizedPlaceHolder.backgroundColor,
270
+ borderRadius: normalizedPlaceHolder.borderRadius,
271
+ }"
272
+ ></div>
286
273
  </div>
287
274
  </jsv-focus-block>
288
275
  </div>