@shijiu/jsview-vue-samples 2.3.0 → 3.0.0-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 (320) hide show
  1. package/ABImageAlt/App.vue +114 -0
  2. package/ABImageAlt/Item.vue +133 -0
  3. package/{MetroWidgetDemos/SkeletonDiagram/assets/imageList.json → ABImageAlt/assets/imageList.js} +9 -1
  4. package/ABImageAlt/data.js +17 -0
  5. package/AI_Check_Rules.txt +5 -0
  6. package/AnimPicture/App.vue +20 -10
  7. package/ApicSwitch/App.vue +90 -0
  8. package/ApicSwitch/TabItem.vue +65 -0
  9. package/ApicSwitch/WebpShow.vue +24 -0
  10. package/ApicSwitch/data.js +50 -0
  11. package/Basic/AI_skills_update.md +1 -0
  12. package/Basic/components/div/ColorFormatTest.vue +93 -0
  13. package/Basic/components/div/DivRadius.vue +97 -15
  14. package/Basic/components/div/DivTag3Group.vue +30 -0
  15. package/Basic/components/img/ImageType.vue +65 -0
  16. package/Basic/components/panel/Panel2.vue +13 -1
  17. package/Basic/components/text/TextAlign.vue +7 -1
  18. package/BlobLoadTest/App.vue +201 -0
  19. package/BreakLinesApi/App.vue +82 -0
  20. package/CanvasDrawChart/App.vue +11 -0
  21. package/CanvasDrawChart/Graph1.vue +104 -0
  22. package/CanvasDrawChart/Graph2.vue +115 -0
  23. package/CssPreprocessor/Scss/PanelData.js +1 -1
  24. package/CssPreprocessor/Scss/components/scss-group4/ScssMaps.vue +4 -3
  25. package/CssPreprocessor/Scss/components/scss-group5/ScssImporting.vue +2 -2
  26. package/DashPath/App.vue +17 -16
  27. package/DashPath/AppForOperator.vue +2 -4
  28. package/DemoForOperator/AnimPic/AnimPic.vue +24 -2
  29. package/DemoForOperator/Banger/Banger/Banger.vue +73 -9
  30. package/DemoForOperator/Blur/Blur.vue +146 -0
  31. package/DemoForOperator/Blur/BlurInOut/BlurInOut.vue +158 -0
  32. package/DemoForOperator/Blur/BlurInOut/StaticBgSlide.vue +162 -0
  33. package/DemoForOperator/Blur/BlurPopup/BlurPopup.vue +113 -0
  34. package/DemoForOperator/BookFlip/App.vue +115 -0
  35. package/DemoForOperator/BookFlip/BookFlip/FlipPage.vue +179 -0
  36. package/DemoForOperator/BookFlip/BookFlip/FlippingBook.vue +310 -0
  37. package/DemoForOperator/BookFlip/BookFlip/flip.glsl +135 -0
  38. package/DemoForOperator/BookFlip/BookPage.vue +82 -0
  39. package/DemoForOperator/Bounce/Bounce.vue +33 -1
  40. package/DemoForOperator/Bounce/FreeMoveBuilder.js +1 -1
  41. package/DemoForOperator/ChunLian/Couplets.vue +44 -1
  42. package/DemoForOperator/ClickSpriteAnim/App.vue +130 -0
  43. package/DemoForOperator/ClickSpriteAnim/Item.vue +74 -0
  44. package/DemoForOperator/DominantColor/App.vue +187 -0
  45. package/DemoForOperator/EpisodeList/EpisodeList/Controller.vue +0 -3
  46. package/DemoForOperator/EpisodeList/EpisodeList/EpisodeList.vue +76 -2
  47. package/DemoForOperator/Firework1/App.vue +13 -2
  48. package/DemoForOperator/Firework1/Fireworks.vue +68 -11
  49. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +30 -1
  50. package/DemoForOperator/Focus/Alpha/AlphaFocusBox.vue +27 -2
  51. package/DemoForOperator/Focus/Alpha/Item.vue +1 -0
  52. package/DemoForOperator/Focus/Light/Item.vue +1 -0
  53. package/DemoForOperator/Focus/Light/LightFocusBox.vue +42 -1
  54. package/DemoForOperator/Focus/Normal/Item.vue +1 -0
  55. package/DemoForOperator/Focus/Normal/NormalFocusBox.vue +12 -0
  56. package/DemoForOperator/FrameShadow/App.vue +193 -0
  57. package/DemoForOperator/FrameShadow/FrameShadow.vue +61 -0
  58. package/DemoForOperator/FullscreenIn/App.vue +1 -1
  59. package/DemoForOperator/FullscreenIn/FullscreenPoster.vue +18 -3
  60. package/DemoForOperator/Genie/App.vue +20 -6
  61. package/DemoForOperator/Genie/App2.vue +61 -0
  62. package/DemoForOperator/Genie/geniePakcer/GenieImage.vue +298 -0
  63. package/DemoForOperator/Genie/geniePakcer/GenieSlot.vue +292 -0
  64. package/DemoForOperator/Genie/geniePakcer/GenieTools.ts +463 -0
  65. package/DemoForOperator/GrayFilter/GrayFilter.vue +21 -0
  66. package/DemoForOperator/Jigsaw/JigsawFull.vue +58 -11
  67. package/DemoForOperator/Jigsaw/JigsawSingle.vue +47 -9
  68. package/DemoForOperator/LongChatBox/App.vue +36 -0
  69. package/DemoForOperator/LongChatBox/Bubble.vue +116 -0
  70. package/DemoForOperator/LongChatBox/LongChat.vue +205 -0
  71. package/DemoForOperator/LongChatBox/testData.js +14 -0
  72. package/DemoForOperator/Particle/Drop/DropParticle.vue +33 -1
  73. package/DemoForOperator/Particle/Explode/ExplodeParticle.vue +23 -2
  74. package/DemoForOperator/PosterAnim/PosterAnim.js +21 -0
  75. package/DemoForOperator/PosterOverflow/PosterOverflow.vue +16 -0
  76. package/DemoForOperator/Resize/App.vue +157 -0
  77. package/DemoForOperator/Resize/Resize/Item.vue +234 -0
  78. package/DemoForOperator/Resize/Resize/Resize.vue +96 -0
  79. package/DemoForOperator/Ripple/Ripple.vue +16 -1
  80. package/DemoForOperator/ScreenShootScale/App.vue +96 -0
  81. package/DemoForOperator/ScreenShootScale/Back.vue +86 -0
  82. package/DemoForOperator/ScreenShootScale/Front.vue +133 -0
  83. package/DemoForOperator/ScreenShootScale/Item.vue +62 -0
  84. package/DemoForOperator/ScreenShootScale/ScreenShootScale.vue +109 -0
  85. package/DemoForOperator/SmoothSwiper/App.vue +50 -0
  86. package/DemoForOperator/Sound/Bounce/App.vue +56 -0
  87. package/DemoForOperator/Sound/Bounce/Bounce.vue +87 -0
  88. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +146 -0
  89. package/DemoForOperator/Sound/Bounce/bgmusic.mp3 +0 -0
  90. package/DemoForOperator/Sound/Bounce/coin.mp3 +0 -0
  91. package/DemoForOperator/Sound/FocusMove/App.vue +134 -0
  92. package/DemoForOperator/Sound/FocusMove/Item.vue +43 -0
  93. package/DemoForOperator/Sound/FocusMove/move.mp3 +0 -0
  94. package/DemoForOperator/Sound/Rain/App.vue +11 -0
  95. package/DemoForOperator/Sound/Rain/Raining/Rain.vue +69 -0
  96. package/DemoForOperator/Sound/Rain/Raining/RainScene.vue +118 -0
  97. package/DemoForOperator/Sound/Sound/Sound.vue +24 -0
  98. package/DemoForOperator/Sound/Sound/index.js +4 -0
  99. package/DemoForOperator/Sound/Sound/useSound.js +112 -0
  100. package/DemoForOperator/Sprite/Sprite.vue +62 -5
  101. package/DemoForOperator/Stretch/Stretch/Stretch.vue +52 -2
  102. package/DemoForOperator/Swiper/App.vue +101 -0
  103. package/DemoForOperator/Swiper/Item.vue +56 -0
  104. package/DemoForOperator/Swiper/ParallaxSlide.vue +164 -0
  105. package/DemoForOperator/TabContent/TabContent/TabContent.vue +39 -1
  106. package/DemoForOperator/TabContentVertical/App.vue +104 -0
  107. package/DemoForOperator/TabContentVertical/ContentPage.vue +67 -0
  108. package/DemoForOperator/TabContentVertical/Item.vue +94 -0
  109. package/DemoForOperator/TabContentVertical/PageItem.vue +40 -0
  110. package/DemoForOperator/TabContentVertical/TabContent/CreepFocus.vue +160 -0
  111. package/DemoForOperator/TabContentVertical/TabContent/Item.vue +63 -0
  112. package/DemoForOperator/TabContentVertical/TabContent/TabContent.vue +184 -0
  113. package/DemoForOperator/TabContentVertical/TabContent/TabItem.vue +368 -0
  114. package/DemoForOperator/TabContentVertical/TabContent/TabWidget.vue +259 -0
  115. package/DemoForOperator/TabContentVertical/TabContent/Util.js +3 -0
  116. package/DemoForOperator/TabContentVertical/TabContent/ViewSwiper.vue +110 -0
  117. package/DemoForOperator/TabContentVertical/assets/children_science.png +0 -0
  118. package/DemoForOperator/TabContentVertical/assets/documentary.png +0 -0
  119. package/DemoForOperator/TabContentVertical/assets/free.png +0 -0
  120. package/DemoForOperator/TabContentVertical/assets/game.png +0 -0
  121. package/DemoForOperator/TabContentVertical/assets/home_selected.png +0 -0
  122. package/DemoForOperator/TabContentVertical/assets/movie_ticket.png +0 -0
  123. package/DemoForOperator/TabContentVertical/assets/my_account.png +0 -0
  124. package/DemoForOperator/TabContentVertical/assets/opera.png +0 -0
  125. package/DemoForOperator/TabContentVertical/assets/sports.png +0 -0
  126. package/DemoForOperator/TabContentVertical/assets/tv_drama.png +0 -0
  127. package/DemoForOperator/TabContentVertical/assets/variety_show.png +0 -0
  128. package/DemoForOperator/TabContentVertical/assets/vip.png +0 -0
  129. package/DemoForOperator/TabContentVertical/testData.js +76 -0
  130. package/DemoForOperator/Vortex/Vortex/Vortex.vue +26 -0
  131. package/DemoForOperator/routeList.js +125 -2
  132. package/DemoHomepage/App.vue +74 -1
  133. package/DemoHomepage/components/BodyFrame.vue +1 -0
  134. package/DemoHomepage/components/Item.vue +11 -0
  135. package/DemoHomepage/components/TabFrame.vue +1 -1
  136. package/DemoHomepage/router.js +772 -135
  137. package/DemoHomepage/views/Homepage.vue +60 -2
  138. package/DemoHomepage/watchTest.vue +50 -0
  139. package/FilterDemo/AnimatePic.vue +63 -17
  140. package/FilterDemo/App.vue +3 -3
  141. package/FlexCellDemo/AI_skills_update.md +4 -0
  142. package/FlexCellDemo/TestFrame1.vue +12 -2
  143. package/FlexCellDemo/TestFrame2.vue +10 -1
  144. package/FlexCellDemo/TestFrame3.vue +114 -59
  145. package/FpsLimit/App.vue +102 -0
  146. package/FreeMoveChildAttract/App.vue +18 -8
  147. package/FreeMoveLink/App.vue +49 -20
  148. package/GiftRain/components/SpriteTranslate.vue +68 -48
  149. package/HashHistory/App.vue +2 -2
  150. package/HashHistory/router.js +1 -1
  151. package/Hover/App.vue +144 -0
  152. package/HttpRequestSSE/SSEReader.js +200 -0
  153. package/ImpactStop/App.vue +2 -2
  154. package/Input/FullKeyboard.vue +3 -3
  155. package/Input/InputPanel.vue +63 -3
  156. package/JsvLine/App.vue +53 -38
  157. package/LatexDemo/App.vue +3 -1
  158. package/LatexFormula/App.vue +196 -0
  159. package/LongImage/App.vue +1 -1
  160. package/LongImage/LongImageScroll.vue +100 -47
  161. package/LongImage/Scroll.vue +28 -9
  162. package/LongText/LongTextScroll.vue +1 -0
  163. package/Markdown/App.vue +36 -0
  164. package/Markdown/Bubble.vue +109 -0
  165. package/Markdown/LongChat.vue +206 -0
  166. package/Markdown/Markdown/Markdown.vue +156 -0
  167. package/Markdown/Markdown/index.ts +1 -0
  168. package/Markdown/Markdown/marked/LICENSE.md +45 -0
  169. package/Markdown/Markdown/marked/index.ts +2 -0
  170. package/Markdown/Markdown/marked/marked.d.ts +756 -0
  171. package/Markdown/Markdown/marked/marked.js +71 -0
  172. package/Markdown/Markdown/parser.ts +1365 -0
  173. package/Markdown/data.js +581 -0
  174. package/MetroWidgetDemos/AI_skills_update.md +2 -0
  175. package/MetroWidgetDemos/ListExpand/ChildItem.vue +130 -0
  176. package/MetroWidgetDemos/ListExpand/ExpandItem.vue +375 -0
  177. package/MetroWidgetDemos/ListExpand/ExpandItem1.vue +403 -0
  178. package/MetroWidgetDemos/ListExpand/assets/arrow-down.png +0 -0
  179. package/MetroWidgetDemos/ListExpand/assets/up-arrow.png +0 -0
  180. package/MetroWidgetDemos/ListExpand/components/WidgetListHandler.vue +150 -0
  181. package/MetroWidgetDemos/ListExpand/index.vue +88 -0
  182. package/MetroWidgetDemos/ListExpand/list.js +2421 -0
  183. package/MetroWidgetDemos/RefreshDemo/App.vue +14 -1
  184. package/MetroWidgetDemos/RenderAccelerate/App.vue +142 -0
  185. package/MetroWidgetDemos/RenderAccelerate/AppPage.vue +78 -0
  186. package/MetroWidgetDemos/RenderAccelerate/AppTab.vue +62 -0
  187. package/MetroWidgetDemos/RenderAccelerate/ContentItem.vue +409 -0
  188. package/MetroWidgetDemos/{TripleWidget → RenderAccelerate}/Item.vue +6 -3
  189. package/MetroWidgetDemos/RenderAccelerate/TabItem.vue +100 -0
  190. package/MetroWidgetDemos/RenderAccelerate/ViewSwiper.vue +215 -0
  191. package/MetroWidgetDemos/RenderAccelerate/WidgetItem.vue +107 -0
  192. package/MetroWidgetDemos/SkeletonDiagram/App.vue +35 -8
  193. package/MetroWidgetDemos/SkeletonDiagram/Item.vue +11 -2
  194. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.js +245 -0
  195. package/MetroWidgetDemos/SkeletonDiagram/data.js +3 -3
  196. package/MetroWidgetDemos/SpatialNav/App.vue +177 -0
  197. package/MetroWidgetDemos/SpatialNav/Buttons.vue +83 -0
  198. package/MetroWidgetDemos/SpatialNav/CustomFocus.vue +57 -0
  199. package/MetroWidgetDemos/SpatialNav/Item.vue +71 -0
  200. package/MetroWidgetDemos/SpatialNav/SimpleFloor.vue +86 -0
  201. package/MetroWidgetDemos/SpatialNav/StepMw.vue +113 -0
  202. package/MetroWidgetDemos/SpatialNav/TabContent/TabContent.vue +185 -0
  203. package/MetroWidgetDemos/SpatialNav/TripleSection/TripleSection.vue +69 -0
  204. package/MetroWidgetDemos/SpatialNav/TripleSection/WidgetItem.vue +100 -0
  205. package/MetroWidgetDemos/SpatialNav/TvSection/List.vue +75 -0
  206. package/MetroWidgetDemos/SpatialNav/TvSection/TvSection.vue +91 -0
  207. package/MetroWidgetDemos/basic2/App.vue +407 -0
  208. package/MetroWidgetDemos/basic2/Item.vue +68 -0
  209. package/MetroWidgetDemos/direction/App.vue +22 -0
  210. package/MetroWidgetDemos/gazeFocusDiff/App.vue +126 -0
  211. package/MetroWidgetDemos/gazeFocusDiff/Item.vue +87 -0
  212. package/MetroWidgetDemos/minimalUsage/App.vue +66 -0
  213. package/MetroWidgetDemos/minimalUsage/Item.vue +54 -0
  214. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +22 -7
  215. package/MetroWidgetDemos/ninePatchFocusPage/Item.vue +7 -5
  216. package/MetroWidgetDemos/ninePatchFocusPage/focusConstants.js +2 -0
  217. package/MetroWidgetDemos/routeList.js +216 -8
  218. package/MetroWidgetDemos/slideSetting/App.vue +288 -99
  219. package/MetroWidgetDemos/zIndex/App.vue +117 -0
  220. package/MetroWidgetDemos/zIndex/Item.vue +61 -0
  221. package/NinePatchTester/App.vue +24 -31
  222. package/PosterPacker/App.vue +2 -2
  223. package/PreDecode/App.vue +140 -0
  224. package/ReactiveTest/App.vue +115 -0
  225. package/ReactiveTest/Item.vue +92 -0
  226. package/ReactiveTest/assets/imageList.js +245 -0
  227. package/ReactiveTest/component/TestSmartDiv.vue +50 -0
  228. package/ReactiveTest/component/TestSmartDivSrcList.vue +74 -0
  229. package/ReactiveTest/component/TestSmartImage.vue +46 -0
  230. package/ReactiveTest/component/TestSmartImageSrcList.vue +90 -0
  231. package/ReactiveTest/component/TestSmartImageStyle.vue +41 -0
  232. package/ReactiveTest/data.js +49 -0
  233. package/ScreenToBlob/App.vue +250 -0
  234. package/SecTorTest/App.vue +9 -3
  235. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +3 -3
  236. package/SyncDecode/App.vue +137 -0
  237. package/TextSizeLimit/App.vue +211 -0
  238. package/TransitPage/App.vue +2 -0
  239. package/ViewOpacity/App.vue +19 -0
  240. package/assets/logo.png +0 -0
  241. package/package.json +5 -5
  242. package/DashPath/DashPath.vue +0 -118
  243. package/DemoForOperator/Genie/geniePakcer/Genie.vue +0 -699
  244. package/DemoForOperator/ScalePoster/App.vue +0 -4
  245. package/DemoForOperator/ScalePoster/ScalePoster.vue +0 -0
  246. package/DivMetroPerformance/App.vue +0 -157
  247. package/DivMetroPerformance/Item.vue +0 -58
  248. package/DivMetroPerformance/assets/bg.jpg +0 -0
  249. package/DivMetroPerformance/assets/coupon_content.png +0 -0
  250. package/DivMetroPerformance/assets/coupon_left.png +0 -0
  251. package/DivMetroPerformance/assets/coupon_mid.png +0 -0
  252. package/DivMetroPerformance/assets/coupon_right.png +0 -0
  253. package/DivMetroPerformance/assets/focus_border.png +0 -0
  254. package/DivMetroPerformance/assets/holder_logo.png +0 -0
  255. package/DivMetroPerformance/assets/jrbm.png +0 -0
  256. package/DivMetroPerformance/assets/line_left.png +0 -0
  257. package/DivMetroPerformance/assets/line_mid.png +0 -0
  258. package/DivMetroPerformance/assets/line_right.png +0 -0
  259. package/DivMetroPerformance/assets/loading.png +0 -0
  260. package/DivMetroPerformance/assets/logo.png +0 -0
  261. package/DivMetroPerformance/assets/mcjx.png +0 -0
  262. package/DivMetroPerformance/assets/tao.png +0 -0
  263. package/DivMetroPerformance/assets/tmall.png +0 -0
  264. package/DivMetroPerformance/border.png +0 -0
  265. package/DivMetroPerformance/components/ContentItem.vue +0 -384
  266. package/DivMetroPerformance/components/MyTab.vue +0 -129
  267. package/DivMetroPerformance/data.js +0 -124
  268. package/DivMetroPerformance/utils/GridItem.vue +0 -28
  269. package/DivMetroPerformance/utils/GridPlate.vue +0 -85
  270. package/MediaDemo/App.vue +0 -127
  271. package/MediaDemo/assets/audio-poster.png +0 -0
  272. package/MediaDemo/components/Button.vue +0 -69
  273. package/MediaDemo/components/Controllor.vue +0 -286
  274. package/MediaDemo/components/StatusBar.vue +0 -100
  275. package/MediaDemo/components/frames/AudioFrame.vue +0 -39
  276. package/MediaDemo/components/frames/AudioPoster.vue +0 -48
  277. package/MediaDemo/components/frames/MediaFrame.vue +0 -153
  278. package/MediaDemo/components/frames/VideoFrame.vue +0 -39
  279. package/MetroWidgetDemos/TripleWidget/App.vue +0 -81
  280. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +0 -93
  281. package/MetroWidgetDemos/TripleWidget/WidgetItem.vue +0 -111
  282. package/Parkour/App.vue +0 -13
  283. package/Parkour/Common/Context.js +0 -21
  284. package/Parkour/Common/MatchmanInfo.js +0 -62
  285. package/Parkour/Common/Random.js +0 -61
  286. package/Parkour/Common/Sound.js +0 -50
  287. package/Parkour/appConfig/HOW_TO_CONFIG.md +0 -20
  288. package/Parkour/appConfig/app.config.mjs +0 -5
  289. package/Parkour/appConfig/app_sign_private_key_sample.crt +0 -28
  290. package/Parkour/appConfig/app_sign_public_key_sample.pem +0 -9
  291. package/Parkour/appConfig/jsview.config.mjs +0 -39
  292. package/Parkour/assets/Bgimages/bg1.png +0 -0
  293. package/Parkour/assets/Bgimages/bg2.png +0 -0
  294. package/Parkour/assets/Bgimages/bg3.png +0 -0
  295. package/Parkour/assets/Bgimages/bg4.png +0 -0
  296. package/Parkour/assets/Bgimages/bg5.png +0 -0
  297. package/Parkour/assets/audio/jump.mp3 +0 -0
  298. package/Parkour/assets/audio/lose.mp3 +0 -0
  299. package/Parkour/assets/role_skin1/fail.json +0 -44
  300. package/Parkour/assets/role_skin1/fail.png +0 -0
  301. package/Parkour/assets/role_skin1/jump_down.json +0 -20
  302. package/Parkour/assets/role_skin1/jump_down.png +0 -0
  303. package/Parkour/assets/role_skin1/jump_up.json +0 -44
  304. package/Parkour/assets/role_skin1/jump_up.png +0 -0
  305. package/Parkour/assets/role_skin1/roll.json +0 -44
  306. package/Parkour/assets/role_skin1/roll.png +0 -0
  307. package/Parkour/assets/role_skin1/run.json +0 -52
  308. package/Parkour/assets/role_skin1/run.png +0 -0
  309. package/Parkour/components/Backdrop.vue +0 -61
  310. package/Parkour/components/GameSence.vue +0 -602
  311. package/Parkour/components/Matchman.vue +0 -85
  312. package/ThrowMoveDemo/AccelerateDemo.vue +0 -85
  313. package/ThrowMoveDemo/App.vue +0 -104
  314. package/ThrowMoveDemo/LRParabolicDemo.vue +0 -101
  315. package/ThrowMoveDemo/TargetDemo.vue +0 -87
  316. package/ThrowMoveDemo/UDParabolicDemo.vue +0 -92
  317. /package/{AnimPicture/assets → assets}/animated_webp.webp +0 -0
  318. /package/{AnimPicture/assets → assets}/ball_3.webp +0 -0
  319. /package/{AnimPicture/assets → assets}/girl_run.gif +0 -0
  320. /package/{AnimPicture/assets → assets}/quan.webp +0 -0
@@ -0,0 +1,250 @@
1
+ <script setup>
2
+ import { shallowRef, ref, onBeforeUnmount } from "vue";
3
+ import { JsvTextureStoreApi, JsvPreload, buildPreloadInfo, BlobApi } from "jsview";
4
+
5
+ // 与 DominantColor 示例保持一致的两张图片
6
+ const Image1 =
7
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/panda.jpeg";
8
+ const Image2 =
9
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/owl.jpeg";
10
+
11
+ // 需要截屏的区域
12
+ const vToCapture = shallowRef(null);
13
+
14
+ // 左侧资源统一收拢到一个非响应式对象中,便于集中管理回收逻辑
15
+ const cLeftResource = {
16
+ // Blob 显示用的 URL
17
+ blobUrl: ref(null),
18
+ // 当前 object URL,用于释放
19
+ currentObjectUrl: null,
20
+ // 全局 BitPalette 句柄,用于在 unmount 时统一回收
21
+ activeBitPalette: null,
22
+ };
23
+
24
+ // 截屏 cancel 句柄
25
+ let captureTextureHandle = null;
26
+
27
+ function handleLoadDone() {
28
+ console.log("图片预加载完成");
29
+ doCaptureAndToBlob();
30
+ }
31
+
32
+ async function doCaptureAndToBlob() {
33
+ try {
34
+ console.log("ScreenToBlob: doCaptureAndToBlob");
35
+
36
+ if (!vToCapture.value) {
37
+ console.warn("ScreenToBlob: vToCapture 为空");
38
+ return;
39
+ }
40
+
41
+ // 截屏生成 texture
42
+ captureTextureHandle = JsvTextureStoreApi.capture2Texture(
43
+ vToCapture.value,
44
+ async (textureName, autoRecycle, w, h) => {
45
+ console.log("ScreenToBlob capture2Texture", textureName, autoRecycle, w, h);
46
+ if (!textureName || textureName.length === 0) {
47
+ console.warn("ScreenToBlob: capture2Texture 返回空 textureName");
48
+ return;
49
+ }
50
+
51
+ const src = `jsvtexturestore://${textureName}`;
52
+ let bitPalette = null;
53
+ try {
54
+ // 若已有未完成的 BitPalette,先回收
55
+ cLeftResource.activeBitPalette?.recycle();
56
+
57
+ // 使用 getBitPalette 获取 BitPalette,并保存为全局句柄
58
+ bitPalette = JsvTextureStoreApi.getBitPalette(src);
59
+ cLeftResource.activeBitPalette = bitPalette;
60
+
61
+ await bitPalette.Ready;
62
+
63
+ // 通过 BitPaletteCtrl.toBlob 获得 Blob
64
+ const blob = await bitPalette.Ctrl?.toBlob();
65
+ if (!blob) {
66
+ console.warn("ScreenToBlob: toBlob 返回空 Blob");
67
+ return;
68
+ }
69
+
70
+ // 释放旧的 object URL
71
+ if (cLeftResource.currentObjectUrl) {
72
+ BlobApi.revokeObjectURL(cLeftResource.currentObjectUrl);
73
+ cLeftResource.currentObjectUrl = null;
74
+ }
75
+
76
+ // 创建新的 object URL,并用于展示
77
+ cLeftResource.currentObjectUrl = await BlobApi.createObjectURL(blob);
78
+ cLeftResource.blobUrl.value = cLeftResource.currentObjectUrl;
79
+ } catch (error) {
80
+ console.error("ScreenToBlob: BitPalette 处理失败", error);
81
+ } finally {
82
+ // 释放 BitPalette 资源,并清理全局句柄
83
+ if (cLeftResource.activeBitPalette === bitPalette) {
84
+ bitPalette?.recycle();
85
+ cLeftResource.activeBitPalette = null;
86
+ }
87
+ // 手动删除截图纹理,防止泄漏
88
+ JsvTextureStoreApi.deleteTexture(textureName);
89
+ }
90
+ },
91
+ false // 手动deleteTexture进行回收而非自动回收, JsvTextureStoreApi.getBitPalette 的需求
92
+ );
93
+ } catch (error) {
94
+ console.error("ScreenToBlob: capture2Texture 调用失败", error);
95
+ }
96
+ }
97
+
98
+ // 处理右边区域的Blob展示, 右边区域使用图片src直接展示
99
+ const cRightResource = {
100
+ // Blob 显示用的 URL
101
+ blobUrl: ref(null),
102
+ // 当前 object URL,用于释放
103
+ currentObjectUrl: null,
104
+ // 全局 BitPalette 句柄,用于在 unmount 时统一回收
105
+ activeBitPalette: null,
106
+ };
107
+ async function handleRightBlob(src) {
108
+ // 使用 getBitPalette 获取 BitPalette,并保存为全局句柄
109
+ const bitPalette = JsvTextureStoreApi.getBitPalette(src);
110
+ cRightResource.activeBitPalette = bitPalette;
111
+
112
+ await bitPalette.Ready;
113
+
114
+ // 通过 BitPaletteCtrl.toBlob 获得 Blob
115
+ const blob = await bitPalette.Ctrl?.toBlob();
116
+ if (!blob) {
117
+ console.warn("ScreenToBlob: toBlob 返回空 Blob");
118
+ return;
119
+ }
120
+
121
+ // 释放旧的 object URL
122
+ if (cRightResource.currentObjectUrl) {
123
+ BlobApi.revokeObjectURL(cRightResource.currentObjectUrl);
124
+ cRightResource.currentObjectUrl = null;
125
+ }
126
+
127
+ // 创建新的 object URL,并用于展示
128
+ cRightResource.currentObjectUrl = await BlobApi.createObjectURL(blob);
129
+ cRightResource.blobUrl.value = cRightResource.currentObjectUrl;
130
+ }
131
+ handleRightBlob(Image2);
132
+
133
+ onBeforeUnmount(() => {
134
+
135
+ // ------- 先处理左边资源的回收 -------
136
+
137
+ // 取消截屏, 回收resource
138
+ captureTextureHandle?.recycle();
139
+
140
+ // 回收仍在进行中的 BitPalette - 左侧
141
+ cLeftResource.activeBitPalette?.recycle();
142
+ cLeftResource.activeBitPalette = null;
143
+
144
+ // 释放 object URL - 左侧
145
+ if (cLeftResource.currentObjectUrl) {
146
+ BlobApi.revokeObjectURL(cLeftResource.currentObjectUrl);
147
+ cLeftResource.currentObjectUrl = null;
148
+ console.log("ScreenToBlob: 已释放 object URL (左侧)");
149
+ }
150
+
151
+ // ------- 再处理右边资源的回收 -------
152
+ // 回收仍在进行中的 BitPalette - 右侧
153
+ cRightResource.activeBitPalette?.recycle();
154
+ cRightResource.activeBitPalette = null;
155
+
156
+ // 释放 object URL - 右侧
157
+ if (cRightResource.currentObjectUrl) {
158
+ BlobApi.revokeObjectURL(cRightResource.currentObjectUrl);
159
+ cRightResource.currentObjectUrl = null;
160
+ console.log("ScreenToBlob: 已释放 object URL (右侧)");
161
+ }
162
+ });
163
+ </script>
164
+
165
+ <template>
166
+ <!-- 背景,与 DominantColor 保持一致 -->
167
+ <div
168
+ :style="{
169
+ left: 0,
170
+ top: 0,
171
+ width: 1280,
172
+ height: 720,
173
+ backgroundColor: '#FFFFFF',
174
+ }"
175
+ ></div>
176
+
177
+ <div
178
+ :style="{
179
+ textAlign: 'center',
180
+ fontSize: 30,
181
+ lineHeight: 50,
182
+ color: '#ffffff',
183
+ left: 140,
184
+ top: 20,
185
+ width: 1000,
186
+ height: 50,
187
+ backgroundColor: 'rgba(27,38,151,0.8)',
188
+ }"
189
+ >
190
+ 下方为blob显示,1为截图blob, 2为给定url的blob
191
+ </div>
192
+
193
+ <!-- 截屏区域, 等图片加载完成后进行截屏动作 -->
194
+ <div
195
+ ref="vToCapture"
196
+ :style="{
197
+ left: 0,
198
+ top: 80,
199
+ width: 640,
200
+ height: 360,
201
+ }"
202
+ >
203
+ <img
204
+ :style="{
205
+ width: 640,
206
+ height: 360,
207
+ }"
208
+ :onLoad="handleLoadDone"
209
+ :src="Image1"
210
+ />
211
+ <div
212
+ :style="{
213
+ width: 300,
214
+ height: 300,
215
+ backgroundColor: '#007788',
216
+ }"
217
+ ></div>
218
+ </div>
219
+
220
+
221
+ <!-- Blob 结果展示区域,仿照 BlobLoadTest,在绘制内容下方展示 -->
222
+ <div
223
+ v-if="cLeftResource.blobUrl.value"
224
+ :style="{
225
+ top: 450,
226
+ left: 0,
227
+ }"
228
+ >
229
+ <img
230
+ :src="cLeftResource.blobUrl.value"
231
+ :style="{
232
+ width: 640,
233
+ height: 250,
234
+ objectFit: 'contain',
235
+ }"
236
+ />
237
+ </div>
238
+
239
+ <!-- 右侧图片展示 -->
240
+ <div
241
+ :style="{
242
+ left: 640,
243
+ top: 450,
244
+ width: 320,
245
+ height: 180,
246
+ backgroundImage: `url(${cRightResource.blobUrl.value})`,
247
+ }"
248
+ />
249
+ </template>
250
+
@@ -4,13 +4,14 @@
4
4
  <JsvPieChart
5
5
  :centerPosition="center"
6
6
  :radius="360"
7
+ :subRadius="300"
7
8
  :data="data"
8
- :animationTime="0.5"
9
+ :animationTime="0.8"
9
10
  ></JsvPieChart>
10
11
  <!-- 文字说明 -->
11
12
  <div class="text">
12
13
  {{
13
- "图为圆心在(400,400)位置,半径为360的饼图。此样例限制最多六个扇形。"
14
+ "图为圆心在(400,400)位置,半径为360-300的环形图(300为0时则为扇形饼图)。此样例限制最多六个扇形。"
14
15
  }}
15
16
  </div>
16
17
  <!-- 操作说明 -->
@@ -34,22 +35,27 @@ const center = {
34
35
  let data = shallowRef([
35
36
  {
36
37
  percent: 23.33,
38
+ // color: "#0000FF7F",
37
39
  color: "#0000FF",
38
40
  },
39
41
  {
40
42
  percent: 24.67,
43
+ // color: "#FFFF007F",
41
44
  color: "#FFFF00",
42
45
  },
43
46
  {
44
47
  percent: 15,
48
+ // color: "#FF12FF7F",
45
49
  color: "#FF12FF",
46
50
  },
47
51
  {
48
52
  percent: 13,
53
+ // color: "#FF12137F",
49
54
  color: "#FF1213",
50
55
  },
51
56
  {
52
57
  percent: 24,
58
+ // color: "#6EFFE17F",
53
59
  color: "#6EFFE1",
54
60
  },
55
61
  ]);
@@ -209,7 +215,7 @@ let actionDefines = {
209
215
  }
210
216
  .text {
211
217
  width: 500;
212
- height: 60;
218
+ height: 90;
213
219
  left: 700;
214
220
  top: 300;
215
221
  background-color: rgba(255, 255, 255, 0.5);
@@ -59,8 +59,8 @@ const sWallConditionName = "wallCond";
59
59
  export function buildBounce(
60
60
  cmds,// FreeMove的cmds句柄
61
61
  condGroupId,
62
- startX, // 起始位置和目标位置的偏差, 单位px
63
- startY, // 起始位置和目标位置的偏差, 单位px
62
+ startX, // 起始位置和目标位置的偏差, 单位px, 目标位置固定为0
63
+ startY, // 起始位置和目标位置的偏差, 单位px, 目标位置固定为0
64
64
  times, // 整数,落点数(弹起次数-1)
65
65
  gravity, // y轴的加速度, 建议设置成0.8
66
66
  onEnd,
@@ -119,7 +119,7 @@ export function buildBounce(
119
119
  cmds.state().removeConditionByGroup(condGroupId),
120
120
 
121
121
  // wallPosition用于规避运动路程计算超出(times越大超出越多)时,解决动画结尾的回弹问题
122
- cmds.condition(condGroupId, true, sWallConditionName).wallPosition(wallname, 0, undefined).then([
122
+ cmds.condition(condGroupId, true, sWallConditionName).wallPosition(wallname, 0).then([
123
123
  cmds.action().teleportTo(0, undefined),
124
124
  cmds.action().setSpdAndAccel(0, undefined, undefined, undefined),
125
125
  ]),
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <jsv-focus-block
3
+ :onAction="{ onKeyDown }"
4
+ autoFocus
5
+ :style="{
6
+ width: 1280,
7
+ height: 720,
8
+ backgroundColor: '#007788',
9
+ }"
10
+ >
11
+ <JsvPreload :downloadList="downloadInfo" :onDownloadDone="onDownloadDone" />
12
+ <div
13
+ :style="{
14
+ left: rootLeft,
15
+ transition: 'left 0.5s ease-in-out',
16
+ }"
17
+ @transitionend="onTransitionEnd"
18
+ >
19
+ <JsvPosterImage
20
+ v-if="showImg == 0"
21
+ :style="{
22
+ left: 0,
23
+ width: 1280,
24
+ height: 720,
25
+ }"
26
+ :syncDraw="true"
27
+ :src="ImageLongmao"
28
+ >
29
+ </JsvPosterImage>
30
+ <JsvPosterImage
31
+ v-if="showImg == 1"
32
+ :style="{
33
+ left: 1280,
34
+ width: 1280,
35
+ height: 720,
36
+ }"
37
+ :syncDraw="true"
38
+ :src="ImageOwl"
39
+ >
40
+ </JsvPosterImage>
41
+ <JsvPosterImage
42
+ v-if="showImg == 2"
43
+ :style="{
44
+ left: 2560,
45
+ width: 1280,
46
+ height: 720,
47
+ }"
48
+ :syncDraw="true"
49
+ :src="ImagePanda"
50
+ >
51
+ </JsvPosterImage>
52
+ </div>
53
+
54
+ <div
55
+ :style="{
56
+ width: 1280,
57
+ height: 40,
58
+ backgroundColor: '#00000088',
59
+ top: 100,
60
+ color: '#ffffff',
61
+ fontSize: 30,
62
+ textAlign: 'center',
63
+ }"
64
+ >
65
+ 按左右键, 看图片解码时间的延迟
66
+ </div>
67
+
68
+ <div
69
+ :style="{
70
+ left: 100,
71
+ top: 100,
72
+ width: 100,
73
+ height: 100,
74
+ backgroundColor: '#ff0000',
75
+ animation: 'rotate 5s linear infinite',
76
+ }"
77
+ ></div>
78
+ </jsv-focus-block>
79
+ </template>
80
+
81
+ <script setup>
82
+ import { ref, onMounted } from "vue";
83
+ import { JsvPosterImage, JsvPreload, buildDownloadInfo } from "jsview";
84
+
85
+ const rootLeft = ref(0);
86
+ const showImg = ref(0);
87
+ const ImageLongmao =
88
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/DemoHomepage/App/BackgroundLongmao.jpg";
89
+ const ImagePanda =
90
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/panda.jpeg";
91
+ const ImageOwl =
92
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/owl.jpeg";
93
+
94
+ const downloadInfo = [
95
+ buildDownloadInfo(ImageLongmao),
96
+ buildDownloadInfo(ImagePanda),
97
+ buildDownloadInfo(ImageOwl),
98
+ ];
99
+
100
+ const onKeyDown = (ev) => {
101
+ switch (ev.keyCode) {
102
+ case 37:
103
+ if (showImg.value > 0) {
104
+ showImg.value = showImg.value - 1;
105
+ rootLeft.value = rootLeft.value + 1280;
106
+ }
107
+ break;
108
+ case 39:
109
+ if (showImg.value < 2) {
110
+ showImg.value = showImg.value + 1;
111
+ rootLeft.value = rootLeft.value - 1280;
112
+ }
113
+ break;
114
+ }
115
+ };
116
+
117
+ const onDownloadDone = (info) => {
118
+ console.log("onDownloadDone", info);
119
+ };
120
+
121
+ const onTransitionEnd = () => {
122
+ console.log("onAnimationEnd clear resource");
123
+ window.JsvCoreApi?.triggerTextureRecycle?.();
124
+ };
125
+
126
+ </script>
127
+
128
+ <style>
129
+ @keyframes rotate {
130
+ from {
131
+ transform: rotate3d(0, 0, 1, 0deg);
132
+ }
133
+ to {
134
+ transform: rotate3d(0, 0, 1, 360deg);
135
+ }
136
+ }
137
+ </style>
@@ -0,0 +1,211 @@
1
+ <script setup>
2
+ import { JsvTextBox, JsvFlexDiv } from "jsview";
3
+ </script>
4
+
5
+ <template>
6
+ <div :style="{
7
+ width: 1280,
8
+ height: 720,
9
+ backgroundColor: '#007788',
10
+ }"></div>
11
+ <jsv-flex-div
12
+ :style="{
13
+ left: 20,
14
+ top: 20,
15
+ width: 700,
16
+ height: 60,
17
+ backgroundColor: '#030303',
18
+ }"
19
+ >
20
+ <jsv-text-box
21
+ syncDraw="sync"
22
+ :enableLatex="true"
23
+ :style="{
24
+ backgroundColor: '#999999',
25
+ fontSize: 20,
26
+ color: '#00ff00',
27
+ textOverflow: 'clip',
28
+ height: 26,
29
+ lineHeight: 26,
30
+ }"
31
+ :minWidth="400"
32
+ >
33
+ {{ "\\textcolor{#FF0000}{最小宽度400},顶住后方的flex div" }}
34
+ </jsv-text-box>
35
+ <div
36
+ :style="{
37
+ width: 100,
38
+ height: 26,
39
+ fontSize: 20,
40
+ color: '#000000',
41
+ backgroundColor: '#009999',
42
+ }"
43
+ >{{ "后续文字" }}</div>
44
+ </jsv-flex-div>
45
+
46
+ <jsv-flex-div
47
+ :style="{
48
+ left: 20,
49
+ top: 90,
50
+ width: 700,
51
+ height: 60,
52
+ backgroundColor: '#030303',
53
+ }">
54
+ <jsv-text-box
55
+ syncDraw="sync"
56
+ :enableLatex="true"
57
+ :style="{
58
+ backgroundColor: '#999999',
59
+ fontSize: 20,
60
+ color: '#00ff00',
61
+ textOverflow: 'clip',
62
+ lineHeight: 26,
63
+ }"
64
+ :maxWidth="500"
65
+ >
66
+ {{ "\\textcolor{#FF0000}{最大宽度500},文字不足500时,以实际为主" }}
67
+ </jsv-text-box>
68
+ <div
69
+ :style="{
70
+ width: 100,
71
+ height: 26,
72
+ fontSize: 20,
73
+ color: '#000000',
74
+ backgroundColor: '#009999',
75
+ }"
76
+ >{{ "后续文字" }}</div>
77
+ </jsv-flex-div>
78
+
79
+ <jsv-flex-div
80
+ :style="{
81
+ left: 20,
82
+ top: 160,
83
+ width: 700,
84
+ height: 60,
85
+ backgroundColor: '#030303',
86
+ }">
87
+ <jsv-text-box
88
+ syncDraw="sync"
89
+ :enableLatex="true"
90
+ :style="{
91
+ backgroundColor: '#999999',
92
+ fontSize: 20,
93
+ color: '#00ff00',
94
+ textOverflow: 'clip',
95
+ lineHeight: 26,
96
+ }"
97
+ :maxWidth="500"
98
+ >
99
+ {{ "\\textcolor{#FF0000}{最大宽度500},文字超过500时,自动换行显示,补充文字1,补充文字2,补充文字3" }}
100
+ </jsv-text-box>
101
+ </jsv-flex-div>
102
+
103
+ <jsv-flex-div
104
+ :style="{
105
+ left: 20,
106
+ top: 230,
107
+ width: 200,
108
+ height: 300,
109
+ backgroundColor: '#030303',
110
+ flexDirection: 'column',
111
+ alignItems: 'flex-start',
112
+ }">
113
+ <jsv-text-box
114
+ syncDraw="sync"
115
+ :enableLatex="true"
116
+ :style="{
117
+ backgroundColor: '#999999',
118
+ width: 200,
119
+ fontSize: 20,
120
+ color: '#00ff00',
121
+ textOverflow: 'clip',
122
+ lineHeight: 26,
123
+ }"
124
+ :minHeight="200"
125
+ >
126
+ {{ "宽度固定200,\\textcolor{#FF0000}{最小高度200},文字不足以撑起高度时,自动补足高度,顶住下面的flex div" }}
127
+ </jsv-text-box>
128
+ <div
129
+ :style="{
130
+ width: 100,
131
+ height: 26,
132
+ fontSize: 20,
133
+ color: '#000000',
134
+ backgroundColor: '#009999',
135
+ }"
136
+ >{{ "后续文字" }}</div>
137
+ </jsv-flex-div>
138
+
139
+ <jsv-flex-div
140
+ :style="{
141
+ left: 300,
142
+ top: 230,
143
+ width: 200,
144
+ height: 300,
145
+ backgroundColor: '#030303',
146
+ flexDirection: 'column',
147
+ alignItems: 'flex-start',
148
+ }">
149
+ <jsv-text-box
150
+ syncDraw="sync"
151
+ :enableLatex="true"
152
+ :style="{
153
+ backgroundColor: '#999999',
154
+ width: 200,
155
+ fontSize: 20,
156
+ color: '#00ff00',
157
+ textOverflow: 'clip',
158
+ lineHeight: 26,
159
+ }"
160
+ :maxHeight="200"
161
+ >
162
+ {{ "宽度固定200,\\textcolor{#FF0000}{最大高度200},文字不足以撑起高度时,按照实际高度绘制,顶住下面的flex div" }}
163
+ </jsv-text-box>
164
+ <div
165
+ :style="{
166
+ width: 100,
167
+ height: 26,
168
+ fontSize: 20,
169
+ color: '#000000',
170
+ backgroundColor: '#009999',
171
+ }"
172
+ >{{ "后续文字" }}</div>
173
+ </jsv-flex-div>
174
+
175
+ <jsv-flex-div
176
+ :style="{
177
+ left: 520,
178
+ top: 230,
179
+ width: 200,
180
+ height: 300,
181
+ backgroundColor: '#030303',
182
+ flexDirection: 'column',
183
+ alignItems: 'flex-start',
184
+ }">
185
+ <jsv-text-box
186
+ syncDraw="sync"
187
+ :enableLatex="true"
188
+ :style="{
189
+ backgroundColor: '#999999',
190
+ width: 200,
191
+ fontSize: 20,
192
+ color: '#00ff00',
193
+ textOverflow: 'ellipsis',
194
+ lineHeight: 26,
195
+ }"
196
+ :maxHeight="200"
197
+ >
198
+ {{ "宽度固定200,\\textcolor{#FF0000}{最大高度200},文字超过最大高度,进行超出处理,\\textcolor{#FF0000}{高度为整行的倍数(以不超过200的7*26=182)},补充文字1,补充文字2,补充文字3,补充文字4,补充文字5,补充文字6,补充文字7,补充文字8,补充文字9,补充文字10" }}
199
+ </jsv-text-box>
200
+ <div
201
+ :style="{
202
+ width: 100,
203
+ height: 26,
204
+ fontSize: 20,
205
+ color: '#000000',
206
+ backgroundColor: '#009999',
207
+ }"
208
+ >{{ "后续文字" }}</div>
209
+ </jsv-flex-div>
210
+
211
+ </template>
@@ -4,6 +4,8 @@ import ActivityApp from "../MetroWidgetDemos/PerformanceTest/App.vue"; // TODO
4
4
  import { jJsvRuntimeBridge } from "jsview";
5
5
  import { ref, onMounted } from "vue";
6
6
 
7
+ // 本用例测试deepLink启动场景
8
+
7
9
  const getShowMode = () => {
8
10
  let showMode = 0;
9
11
  // showMode信息可被URL中的?后缀信息替换
@@ -81,6 +81,25 @@ onUnmounted(() => {
81
81
  />
82
82
  </div>
83
83
  </div>
84
+ <div class="block">
85
+ <div :style="{ left: 120, top: 320 }">
86
+ <img
87
+ :style="{
88
+ ...style1,
89
+ }"
90
+ :src="test1"
91
+ />
92
+ </div>
93
+
94
+ <div :style="{ left: 500, top: 320 }">
95
+ <img
96
+ :style="{
97
+ ...style1,
98
+ }"
99
+ :src="test2"
100
+ />
101
+ </div>
102
+ </div>
84
103
  </div>
85
104
  </jsv-focus-block>
86
105
  </template>
Binary file