@drincs/pixi-vn 0.8.4 → 0.8.5

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 (232) hide show
  1. package/README.md +36 -27
  2. package/dist/{chunk-WJ5SUJTD.js → chunk-7TH27DDS.js} +22 -3
  3. package/dist/{chunk-M6X6FHCH.js → chunk-ATJOKACB.js} +2 -2
  4. package/dist/{chunk-ENMHDS5Q.js → chunk-C3CICOHN.js} +2 -2
  5. package/dist/{chunk-66F5CGHV.js → chunk-DPUSONJ3.js} +1 -1
  6. package/dist/{chunk-6SZOXEOR.js → chunk-FHNQBWIZ.js} +1 -1
  7. package/dist/{chunk-2FSBBQFF.js → chunk-IWJD3C4Y.js} +2 -2
  8. package/dist/{chunk-UWXYEVOE.js → chunk-LZHBFVRK.js} +1 -1
  9. package/dist/{chunk-T4KKYU4J.js → chunk-OBQXJNCS.js} +2 -2
  10. package/dist/{chunk-FYCYVQTG.js → chunk-P5XNCVKG.js} +3 -1
  11. package/dist/{chunk-D3NHF5OS.js → chunk-PIYIZHZL.js} +1 -1
  12. package/dist/{chunk-7IWXRHUU.js → chunk-RAQZR6CM.js} +2 -2
  13. package/dist/{chunk-DI77NC2O.js → chunk-REITIQ75.js} +3 -3
  14. package/dist/{chunk-3FJYYZOP.js → chunk-RUYEWYEH.js} +127 -17
  15. package/dist/{chunk-II324FA5.js → chunk-TFGPTMIQ.js} +12 -12
  16. package/dist/{chunk-MKN3AKFV.js → chunk-VIQQNPPV.js} +2 -2
  17. package/dist/{chunk-CUYGFKNS.js → chunk-XWOKK2Z4.js} +2 -2
  18. package/dist/classes/CharacterBaseModel.cjs +41 -14
  19. package/dist/classes/CharacterBaseModel.js +5 -5
  20. package/dist/classes/CharacterStoredClass.cjs +41 -14
  21. package/dist/classes/CharacterStoredClass.js +5 -5
  22. package/dist/classes/ChoiceMenuOption.cjs +40 -13
  23. package/dist/classes/ChoiceMenuOption.js +5 -5
  24. package/dist/classes/Sound.cjs +40 -13
  25. package/dist/classes/Sound.js +5 -5
  26. package/dist/classes/StoredClassModel.cjs +41 -14
  27. package/dist/classes/StoredClassModel.js +5 -5
  28. package/dist/classes/canvas/CanvasAVideo.cjs +40 -13
  29. package/dist/classes/canvas/CanvasAVideo.d.cts +5 -8
  30. package/dist/classes/canvas/CanvasAVideo.d.ts +5 -8
  31. package/dist/classes/canvas/CanvasAVideo.js +5 -5
  32. package/dist/classes/canvas/CanvasBase.d.cts +4 -2
  33. package/dist/classes/canvas/CanvasBase.d.ts +4 -2
  34. package/dist/classes/canvas/CanvasContainer.cjs +40 -13
  35. package/dist/classes/canvas/CanvasContainer.d.cts +7 -6
  36. package/dist/classes/canvas/CanvasContainer.d.ts +7 -6
  37. package/dist/classes/canvas/CanvasContainer.js +5 -5
  38. package/dist/classes/canvas/CanvasImage.cjs +40 -13
  39. package/dist/classes/canvas/CanvasImage.d.cts +6 -8
  40. package/dist/classes/canvas/CanvasImage.d.ts +6 -8
  41. package/dist/classes/canvas/CanvasImage.js +5 -5
  42. package/dist/classes/canvas/CanvasSprite.cjs +40 -13
  43. package/dist/classes/canvas/CanvasSprite.d.cts +7 -8
  44. package/dist/classes/canvas/CanvasSprite.d.ts +7 -8
  45. package/dist/classes/canvas/CanvasSprite.js +5 -5
  46. package/dist/classes/canvas/CanvasText.cjs +40 -13
  47. package/dist/classes/canvas/CanvasText.d.cts +7 -7
  48. package/dist/classes/canvas/CanvasText.d.ts +7 -7
  49. package/dist/classes/canvas/CanvasText.js +5 -5
  50. package/dist/classes/index.cjs +41 -14
  51. package/dist/classes/index.d.cts +2 -7
  52. package/dist/classes/index.d.ts +2 -7
  53. package/dist/classes/index.js +5 -5
  54. package/dist/classes/ticker/FadeAlphaTicker.cjs +40 -13
  55. package/dist/classes/ticker/FadeAlphaTicker.js +5 -5
  56. package/dist/classes/ticker/MoveTicker.cjs +40 -13
  57. package/dist/classes/ticker/MoveTicker.js +5 -5
  58. package/dist/classes/ticker/RotateTicker.cjs +40 -13
  59. package/dist/classes/ticker/RotateTicker.js +5 -5
  60. package/dist/classes/ticker/TickerBase.cjs +40 -13
  61. package/dist/classes/ticker/TickerBase.js +5 -5
  62. package/dist/classes/ticker/ZoomTicker.cjs +40 -13
  63. package/dist/classes/ticker/ZoomTicker.js +5 -5
  64. package/dist/classes/ticker/index.cjs +40 -13
  65. package/dist/classes/ticker/index.js +5 -5
  66. package/dist/constants.cjs +3 -0
  67. package/dist/constants.d.cts +5 -1
  68. package/dist/constants.d.ts +5 -1
  69. package/dist/constants.js +3 -1
  70. package/dist/decorators/canvas-element-decorator.cjs +40 -13
  71. package/dist/decorators/canvas-element-decorator.d.cts +3 -1
  72. package/dist/decorators/canvas-element-decorator.d.ts +3 -1
  73. package/dist/decorators/canvas-element-decorator.js +5 -5
  74. package/dist/decorators/event-decorator.d.cts +2 -1
  75. package/dist/decorators/event-decorator.d.ts +2 -1
  76. package/dist/decorators/index.cjs +40 -13
  77. package/dist/decorators/index.d.cts +3 -2
  78. package/dist/decorators/index.d.ts +3 -2
  79. package/dist/decorators/index.js +5 -5
  80. package/dist/decorators/label-decorator.cjs +40 -13
  81. package/dist/decorators/label-decorator.js +5 -5
  82. package/dist/functions/canvas/canvas-effect.cjs +61814 -0
  83. package/dist/functions/canvas/canvas-effect.d.cts +15 -0
  84. package/dist/functions/canvas/canvas-effect.d.ts +15 -0
  85. package/dist/functions/canvas/canvas-effect.js +40 -0
  86. package/dist/functions/canvas/canvas-memory-utility.cjs +40 -13
  87. package/dist/functions/canvas/canvas-memory-utility.d.cts +5 -3
  88. package/dist/functions/canvas/canvas-memory-utility.d.ts +5 -3
  89. package/dist/functions/canvas/canvas-memory-utility.js +5 -5
  90. package/dist/functions/canvas/canvas-transition.cjs +2214 -2187
  91. package/dist/functions/canvas/canvas-transition.d.cts +6 -8
  92. package/dist/functions/canvas/canvas-transition.d.ts +6 -8
  93. package/dist/functions/canvas/canvas-transition.js +5 -5
  94. package/dist/functions/canvas/canvas-utility.cjs +40 -13
  95. package/dist/functions/canvas/canvas-utility.d.cts +2 -2
  96. package/dist/functions/canvas/canvas-utility.d.ts +2 -2
  97. package/dist/functions/canvas/canvas-utility.js +5 -5
  98. package/dist/functions/canvas/image-utility.cjs +40 -13
  99. package/dist/functions/canvas/image-utility.d.cts +2 -4
  100. package/dist/functions/canvas/image-utility.d.ts +2 -4
  101. package/dist/functions/canvas/image-utility.js +5 -5
  102. package/dist/functions/canvas/video-utility.cjs +40 -13
  103. package/dist/functions/canvas/video-utility.d.cts +3 -6
  104. package/dist/functions/canvas/video-utility.d.ts +3 -6
  105. package/dist/functions/canvas/video-utility.js +5 -5
  106. package/dist/functions/dialogue-utility.cjs +40 -13
  107. package/dist/functions/dialogue-utility.js +5 -5
  108. package/dist/functions/diff-utility.cjs +1 -1
  109. package/dist/functions/diff-utility.js +2 -2
  110. package/dist/functions/export-utility.cjs +1 -1
  111. package/dist/functions/export-utility.js +1 -1
  112. package/dist/functions/flags-utility.cjs +40 -13
  113. package/dist/functions/flags-utility.js +5 -5
  114. package/dist/functions/game-utility.cjs +40 -13
  115. package/dist/functions/game-utility.js +5 -5
  116. package/dist/functions/index.cjs +273 -160
  117. package/dist/functions/index.d.cts +9 -10
  118. package/dist/functions/index.d.ts +9 -10
  119. package/dist/functions/index.js +7 -5
  120. package/dist/functions/saves-utility.cjs +40 -13
  121. package/dist/functions/saves-utility.d.cts +4 -2
  122. package/dist/functions/saves-utility.d.ts +4 -2
  123. package/dist/functions/saves-utility.js +5 -5
  124. package/dist/index.cjs +144 -14
  125. package/dist/index.d.cts +6 -9
  126. package/dist/index.d.ts +6 -9
  127. package/dist/index.js +20 -16
  128. package/dist/interface/IHistoryStep.d.cts +4 -2
  129. package/dist/interface/IHistoryStep.d.ts +4 -2
  130. package/dist/interface/ISaveData.d.cts +4 -2
  131. package/dist/interface/ISaveData.d.ts +4 -2
  132. package/dist/interface/SoundOptions.d.cts +1 -1
  133. package/dist/interface/SoundOptions.d.ts +1 -1
  134. package/dist/interface/TickerHistory.d.cts +1 -1
  135. package/dist/interface/TickerHistory.d.ts +1 -1
  136. package/dist/interface/canvas/{ITextureMemory.cjs → TextureMemory.cjs} +3 -3
  137. package/dist/interface/canvas/TextureMemory.d.cts +8 -0
  138. package/dist/interface/canvas/TextureMemory.d.ts +8 -0
  139. package/dist/interface/canvas/{ITransitionProps.cjs → canvas-memory.cjs} +3 -3
  140. package/dist/interface/canvas/canvas-memory.d.cts +51 -0
  141. package/dist/interface/canvas/canvas-memory.d.ts +51 -0
  142. package/dist/interface/canvas/{ICanvasBaseMemory.cjs → effect-props.cjs} +3 -3
  143. package/dist/interface/canvas/effect-props.d.cts +36 -0
  144. package/dist/interface/canvas/effect-props.d.ts +36 -0
  145. package/dist/interface/canvas/{ICanvasImageMemory.cjs → transition-props.cjs} +3 -3
  146. package/dist/interface/canvas/{ITransitionProps.d.cts → transition-props.d.cts} +8 -6
  147. package/dist/interface/canvas/{ITransitionProps.d.ts → transition-props.d.ts} +8 -6
  148. package/dist/interface/export/ExportedCanvas.d.cts +5 -2
  149. package/dist/interface/export/ExportedCanvas.d.ts +5 -2
  150. package/dist/interface/export/ExportedStep.d.cts +4 -2
  151. package/dist/interface/export/ExportedStep.d.ts +4 -2
  152. package/dist/interface/index.d.cts +4 -8
  153. package/dist/interface/index.d.ts +4 -8
  154. package/dist/labels/BaseCanvasElementTestLabel.cjs +41 -14
  155. package/dist/labels/BaseCanvasElementTestLabel.js +7 -7
  156. package/dist/labels/CanvasEventsTestLabel.cjs +41 -14
  157. package/dist/labels/CanvasEventsTestLabel.d.cts +2 -3
  158. package/dist/labels/CanvasEventsTestLabel.d.ts +2 -3
  159. package/dist/labels/CanvasEventsTestLabel.js +7 -7
  160. package/dist/labels/CustomTickerCanvasElementTestLabel.cjs +41 -14
  161. package/dist/labels/CustomTickerCanvasElementTestLabel.js +7 -7
  162. package/dist/labels/ImagesAnimationsTestLabel.cjs +140 -14
  163. package/dist/labels/ImagesAnimationsTestLabel.js +7 -7
  164. package/dist/labels/InputTestLabel.cjs +41 -14
  165. package/dist/labels/InputTestLabel.js +7 -7
  166. package/dist/labels/MarkdownTest.cjs +41 -14
  167. package/dist/labels/MarkdownTest.js +7 -7
  168. package/dist/labels/SoundTestLabel.cjs +41 -14
  169. package/dist/labels/SoundTestLabel.js +7 -7
  170. package/dist/labels/StartLabel.cjs +140 -14
  171. package/dist/labels/StartLabel.js +16 -16
  172. package/dist/labels/StepLabelTest.cjs +41 -14
  173. package/dist/labels/StepLabelTest.js +7 -7
  174. package/dist/labels/TestConstant.cjs +41 -14
  175. package/dist/labels/TestConstant.js +6 -6
  176. package/dist/labels/VideoTestLabel.cjs +41 -14
  177. package/dist/labels/VideoTestLabel.js +7 -7
  178. package/dist/labels/index.cjs +140 -14
  179. package/dist/labels/index.js +16 -16
  180. package/dist/managers/CanvasManager.cjs +40 -13
  181. package/dist/managers/CanvasManager.d.cts +5 -3
  182. package/dist/managers/CanvasManager.d.ts +5 -3
  183. package/dist/managers/CanvasManager.js +5 -5
  184. package/dist/managers/CanvasManagerStatic.d.cts +3 -1
  185. package/dist/managers/CanvasManagerStatic.d.ts +3 -1
  186. package/dist/managers/NarrationManager.cjs +40 -13
  187. package/dist/managers/NarrationManager.d.cts +4 -2
  188. package/dist/managers/NarrationManager.d.ts +4 -2
  189. package/dist/managers/NarrationManager.js +5 -5
  190. package/dist/managers/NarrationManagerStatic.cjs +40 -13
  191. package/dist/managers/NarrationManagerStatic.d.cts +4 -2
  192. package/dist/managers/NarrationManagerStatic.d.ts +4 -2
  193. package/dist/managers/NarrationManagerStatic.js +5 -5
  194. package/dist/managers/SoundManager.cjs +40 -13
  195. package/dist/managers/SoundManager.js +5 -5
  196. package/dist/managers/StorageManager.cjs +40 -13
  197. package/dist/managers/StorageManager.js +5 -5
  198. package/dist/managers/StorageManagerStatic.cjs +1 -1
  199. package/dist/managers/StorageManagerStatic.js +2 -2
  200. package/dist/managers/index.cjs +40 -13
  201. package/dist/managers/index.d.cts +5 -3
  202. package/dist/managers/index.d.ts +5 -3
  203. package/dist/managers/index.js +5 -5
  204. package/dist/types/StepLabelType.d.cts +1 -1
  205. package/dist/types/StepLabelType.d.ts +1 -1
  206. package/package.json +1 -1
  207. package/dist/interface/canvas/ICanvasBaseMemory.d.cts +0 -8
  208. package/dist/interface/canvas/ICanvasBaseMemory.d.ts +0 -8
  209. package/dist/interface/canvas/ICanvasContainerMemory.cjs +0 -18
  210. package/dist/interface/canvas/ICanvasContainerMemory.d.cts +0 -11
  211. package/dist/interface/canvas/ICanvasContainerMemory.d.ts +0 -11
  212. package/dist/interface/canvas/ICanvasImageMemory.d.cts +0 -14
  213. package/dist/interface/canvas/ICanvasImageMemory.d.ts +0 -14
  214. package/dist/interface/canvas/ICanvasSpriteMemory.cjs +0 -18
  215. package/dist/interface/canvas/ICanvasSpriteMemory.d.cts +0 -18
  216. package/dist/interface/canvas/ICanvasSpriteMemory.d.ts +0 -18
  217. package/dist/interface/canvas/ICanvasTextTextMemory.cjs +0 -18
  218. package/dist/interface/canvas/ICanvasTextTextMemory.d.cts +0 -14
  219. package/dist/interface/canvas/ICanvasTextTextMemory.d.ts +0 -14
  220. package/dist/interface/canvas/ICanvasTextTextMemory.js +0 -0
  221. package/dist/interface/canvas/ICanvasVideoMemory.cjs +0 -18
  222. package/dist/interface/canvas/ICanvasVideoMemory.d.cts +0 -17
  223. package/dist/interface/canvas/ICanvasVideoMemory.d.ts +0 -17
  224. package/dist/interface/canvas/ICanvasVideoMemory.js +0 -0
  225. package/dist/interface/canvas/ITextureMemory.d.cts +0 -8
  226. package/dist/interface/canvas/ITextureMemory.d.ts +0 -8
  227. package/dist/interface/canvas/ITextureMemory.js +0 -0
  228. package/dist/interface/canvas/ITransitionProps.js +0 -0
  229. /package/dist/interface/canvas/{ICanvasBaseMemory.js → TextureMemory.js} +0 -0
  230. /package/dist/interface/canvas/{ICanvasContainerMemory.js → canvas-memory.js} +0 -0
  231. /package/dist/interface/canvas/{ICanvasImageMemory.js → effect-props.js} +0 -0
  232. /package/dist/interface/canvas/{ICanvasSpriteMemory.js → transition-props.js} +0 -0
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
1
  # Pixi'VN - PixiJS Visual Novel Engine
2
2
 
3
- Pixi’VN is a npm package that provides various features for creating visual novels, has functions to manage story steps, saving and loading, variable storage, dialogues, character,canvas management, and much more.
3
+ ![pixi-vn-cover](https://github.com/user-attachments/assets/28c41fe1-c539-4ebb-b7d4-8cb9f79e089e)
4
4
 
5
- Pixi’VN + [Templates](#project-initialization) provides a complete solution and is in effect a visual novel engine.
5
+ Pixi’VN is a very versatile and powerful visual novel/2D game engine. It is based on JavaScript/TypeScript and uses the [Pixi.js](https://pixijs.com/) library for rendering.
6
6
 
7
- It is designed for web developers, with basic experience in JavaScript/TypeScript, who want to create a visual novel with a modern 2D rendering engine and their favorite JavaScript framework.
7
+ Its great versatility is due to the fact that Pixi’VN is a npm package, that provides various core features to manage story steps, dialogues, character, canvas management, variable storage, saving and loading, and much more. This means that it can be used both to create visual novels and to create other types of 2D games (such as Point and Click Adventure Games, RPGs, etc...), with your favorite JavaScript framework (React, Vue, Angular, etc...).
8
+
9
+ Pixi’VN provides the ability to use [Templates](#project-initialization) to get started quickly. Less experienced developers can use these templates to create a visual novel without much knowledge of JavaScript/TypeScript.
8
10
 
9
11
  With the [PixiVNJson](https://pixi-vn.web.app/advanced/pixi-vn-json.html) implementation you have the option to use various types of narrative languages ​​(in addition to JavaScript/TypeScript). Currently you can use the following:
10
12
 
11
- * [Ink](https://pixi-vn.web.app/ink/ink.html)
13
+ * [*ink*](https://pixi-vn.web.app/ink/ink.html)
12
14
  * [Ren'Py](https://pixi-vn.web.app/renpy/renpy.html)
13
15
 
14
- It is based on [Pixi.js](https://pixijs.com/), a rendering engine that allows you to create fast 2D graphics. It is based on WebGL and is very fast and efficient. It is used by many developers to create games, websites, and applications.
15
-
16
16
  Pixi’VN offers the possibility of adding an HTML Element with the same dimensions as the [PixiJS Canvas](https://pixi-vn.web.app/start/canvas.html) to add an **UI** with JavaScript frameworks.
17
17
 
18
18
  By "UI" is meant the elements that are above the canvas, such as buttons, forms, etc.
@@ -27,31 +27,36 @@ This allows the use of systems such as React, Vue, Angular, etc. to create much
27
27
 
28
28
  ## Wiki
29
29
 
30
- For more information, visit the [Web Page](https://pixi-vn.web.app/)
31
-
32
30
  * [Why Pixi’VN?](https://pixi-vn.web.app/start/why.html)
33
31
  * [Get Started](https://pixi-vn.web.app/start/getting-started.html)
34
32
 
35
33
  ### First steps
36
34
 
37
35
  * [Characters](https://pixi-vn.web.app/start/character.html)
38
- * [Narration (JS/TS)](https://pixi-vn.web.app/start/narration.html):
39
- * [Dialogue](https://pixi-vn.web.app/start/dialogue.html)
40
- * [Label and Game Step](https://pixi-vn.web.app/start/labels.html)
41
- * [Choice Menus](https://pixi-vn.web.app/start/choices.html)
42
- * [Input](https://pixi-vn.web.app/start/input.html)
43
- * [History](https://pixi-vn.web.app/start/history.html)
44
- * [Translating](https://pixi-vn.web.app/start/translate.html)
45
- * [Typewriter effect](https://pixi-vn.web.app/start/typewriter.html)
46
- * [Style Text (Markdown)](https://pixi-vn.web.app/start/markdown.html)
47
- * [Narration with Ink](https://pixi-vn.web.app/ink/ink.html):
48
- * [Characters](https://pixi-vn.web.app/ink/ink-character.html)
49
- * [Style Text (Markdown)](https://pixi-vn.web.app/ink/ink-markdown.html)
50
- * [Input](https://pixi-vn.web.app/ink/ink-input.html)
51
- * [Canvas](https://pixi-vn.web.app/ink/ink-canvas.html)
52
- * [Sounds and Music](https://pixi-vn.web.app/ink/ink-sound.html)
53
- * [Translating](https://pixi-vn.web.app/ink/ink-translate.html)
54
- * [Narration with Ren’Py](https://pixi-vn.web.app/renpy/renpy.html)
36
+ * [Narration](https://pixi-vn.web.app/start/narration.html):
37
+ * [Narration with ink](https://pixi-vn.web.app/ink/ink.html):
38
+ * [Characters](https://pixi-vn.web.app/ink/ink-character.html)
39
+ * [Open a knot](https://pixi-vn.web.app/ink/ink-label.html)
40
+ * [Variables](https://pixi-vn.web.app/ink/ink-variables.html)
41
+ * [Style Text (Markdown)](https://pixi-vn.web.app/ink/ink-markdown.html)
42
+ * [Input](https://pixi-vn.web.app/ink/ink-input.html)
43
+ * [Canvas](https://pixi-vn.web.app/ink/ink-canvas.html)
44
+ * [Sounds and Music](https://pixi-vn.web.app/ink/ink-sound.html)
45
+ * [Pause](https://pixi-vn.web.app/ink/ink-pause.html)
46
+ * [Translating](https://pixi-vn.web.app/ink/ink-translate.html)
47
+ * [Text replacement](https://pixi-vn.web.app/ink/ink-replacement.html)
48
+ * [Custom Hashtag Script](https://pixi-vn.web.app/ink/ink-hashtag.html)
49
+ * [Narration with Ren’Py](https://pixi-vn.web.app/renpy/renpy.html)
50
+ * Narration with JS/TS:
51
+ * [Dialogue](https://pixi-vn.web.app/start/dialogue.html)
52
+ * [Label and Game Step](https://pixi-vn.web.app/start/labels.html)
53
+ * [Choice Menus](https://pixi-vn.web.app/start/choices.html)
54
+ * [Input](https://pixi-vn.web.app/start/input.html)
55
+ * [History](https://pixi-vn.web.app/start/history.html)
56
+ * [Translating](https://pixi-vn.web.app/start/translate.html)
57
+ * [Typewriter effect](https://pixi-vn.web.app/start/typewriter.html)
58
+ * [Style Text (Markdown)](https://pixi-vn.web.app/start/markdown.html)
59
+ * [Other features](https://pixi-vn.web.app/start/other-narrative-features.html)
55
60
  * [PixiJS Canvas](https://pixi-vn.web.app/start/canvas.html):
56
61
  * [Images](https://pixi-vn.web.app/start/images.html)
57
62
  * [Video](https://pixi-vn.web.app/start/videos.html)
@@ -73,11 +78,15 @@ For more information, visit the [Web Page](https://pixi-vn.web.app/)
73
78
 
74
79
  * [Intecept Events](https://pixi-vn.web.app/advanced/intercept-events.html)
75
80
  * [Distribution](https://pixi-vn.web.app/advanced/distribution.html)
76
- * [Mobile distribution](https://pixi-vn.web.app/advanced/distribution%E2%80%90mobile.html)
77
- * [Pixi’VN + Json](https://pixi-vn.web.app/advanced/pixi-vn-json.html)
81
+ * [Website distribution](https://pixi-vn.web.app/advanced/distribution-website.html)
82
+ * [Desktop distribution](https://pixi-vn.web.app/advanced/distribution-desktop.html)
83
+ * [Mobile distribution](https://pixi-vn.web.app/advanced/distribution-mobile.html)
84
+ * [Pixi’VN + Json](pixi-vn-json)
78
85
 
79
86
  ## Prerequisites
80
87
 
88
+ Before starting, you must have the following tools installed:
89
+
81
90
  * [Node.js](https://nodejs.org/) version 18 or higher.
82
91
  * Text Editor with TypeScript support.
83
92
  * [Visual Studio Code](https://code.visualstudio.com/) is recommended.
@@ -8,7 +8,7 @@ import {
8
8
  juliette,
9
9
  skullyImage,
10
10
  skullyName
11
- } from "./chunk-UWXYEVOE.js";
11
+ } from "./chunk-LZHBFVRK.js";
12
12
  import {
13
13
  CanvasImage,
14
14
  ChoiceMenuOption,
@@ -26,16 +26,18 @@ import {
26
26
  newLabel,
27
27
  removeWithDissolveTransition,
28
28
  removeWithFadeTransition,
29
+ shakeEffect,
29
30
  showImage,
30
31
  showWithDissolveTransition,
31
32
  showWithFadeTransition,
32
33
  zoomIn,
33
34
  zoomOut
34
- } from "./chunk-3FJYYZOP.js";
35
+ } from "./chunk-RUYEWYEH.js";
35
36
  import {
37
+ CANVAS_APP_STAGE_ALIAS,
36
38
  Pause,
37
39
  Repeat
38
- } from "./chunk-FYCYVQTG.js";
40
+ } from "./chunk-P5XNCVKG.js";
39
41
 
40
42
  // src/labels/ImagesAnimationsTestLabel.ts
41
43
  var IMAGE_ANIMAIONS_TEST_LABEL = "___pixi_vn_images_animations_test___";
@@ -69,6 +71,7 @@ var imagesAnimationsTest = newLabel(IMAGE_ANIMAIONS_TEST_LABEL, [
69
71
  new ChoiceMenuOption("Zoom", imagesZoomTest, {}),
70
72
  new ChoiceMenuOption("Move in/out", imagesMoveInOutTest, {}),
71
73
  new ChoiceMenuOption("Zoom in/out", imagesZoomInOutTest, {}),
74
+ new ChoiceMenuOption("Shake", shakeStageTest, {}),
72
75
  new ChoiceMenuOption("Add same alias", imagesAddSameAliasTestLabel, {}),
73
76
  new ChoiceMenuOptionClose("Cancel", { closeCurrentLabel: true })
74
77
  ];
@@ -444,6 +447,22 @@ var imagesAddSameAliasTestLabel = newLabel("___pixi_vn_images_add_same_tag_test_
444
447
  async () => await moveIn("eggHead", eggHeadImage, { speed: 100 }),
445
448
  async () => await zoomIn("eggHead", eggHeadImage)
446
449
  ]);
450
+ var shakeStageTest = newLabel("___pixi_vn_images_shake_stage_test___", [
451
+ () => {
452
+ narration.dialogue = {
453
+ character: juliette,
454
+ text: `Ok this is a test for the shake effect. The ${eggHeadName} will shake.`
455
+ };
456
+ shakeEffect("eggHead");
457
+ },
458
+ () => {
459
+ narration.dialogue = {
460
+ character: juliette,
461
+ text: `Now the whole stage will shake.`
462
+ };
463
+ shakeEffect(CANVAS_APP_STAGE_ALIAS);
464
+ }
465
+ ]);
447
466
 
448
467
  export {
449
468
  imagesAnimationsTest
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  juliette
3
- } from "./chunk-UWXYEVOE.js";
3
+ } from "./chunk-LZHBFVRK.js";
4
4
  import {
5
5
  narration,
6
6
  newLabel
7
- } from "./chunk-3FJYYZOP.js";
7
+ } from "./chunk-RUYEWYEH.js";
8
8
 
9
9
  // src/labels/StepLabelTest.ts
10
10
  var STEP_LABEL_TEST_LABEL = "___pixi_vn_step_label_test___";
@@ -2,13 +2,13 @@ import {
2
2
  bunnyImage,
3
3
  bunnyName,
4
4
  juliette
5
- } from "./chunk-UWXYEVOE.js";
5
+ } from "./chunk-LZHBFVRK.js";
6
6
  import {
7
7
  CanvasSprite,
8
8
  canvas,
9
9
  narration,
10
10
  newLabel
11
- } from "./chunk-3FJYYZOP.js";
11
+ } from "./chunk-RUYEWYEH.js";
12
12
  import {
13
13
  eventDecorator
14
14
  } from "./chunk-LEMOIFSV.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createExportableElement
3
- } from "./chunk-D3NHF5OS.js";
3
+ } from "./chunk-PIYIZHZL.js";
4
4
 
5
5
  // src/managers/StorageManagerStatic.ts
6
6
  var StorageManagerStatic = class _StorageManagerStatic {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createExportableElement
3
- } from "./chunk-D3NHF5OS.js";
3
+ } from "./chunk-PIYIZHZL.js";
4
4
 
5
5
  // src/functions/diff-utility.ts
6
6
  function restoreDeepDiffChanges(data, differences) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  bunnyImage,
3
3
  juliette
4
- } from "./chunk-UWXYEVOE.js";
4
+ } from "./chunk-LZHBFVRK.js";
5
5
  import {
6
6
  CanvasContainer,
7
7
  CanvasSprite,
@@ -10,7 +10,7 @@ import {
10
10
  canvas,
11
11
  narration,
12
12
  newLabel
13
- } from "./chunk-3FJYYZOP.js";
13
+ } from "./chunk-RUYEWYEH.js";
14
14
  import {
15
15
  Assets
16
16
  } from "./chunk-2PXN34ON.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CharacterBaseModel
3
- } from "./chunk-3FJYYZOP.js";
3
+ } from "./chunk-RUYEWYEH.js";
4
4
  import {
5
5
  saveCharacter
6
6
  } from "./chunk-WX267JP2.js";
@@ -2,7 +2,7 @@ import {
2
2
  eggHeadImage,
3
3
  eggHeadName,
4
4
  juliette
5
- } from "./chunk-UWXYEVOE.js";
5
+ } from "./chunk-LZHBFVRK.js";
6
6
  import {
7
7
  CanvasSprite,
8
8
  TickerBase,
@@ -10,7 +10,7 @@ import {
10
10
  canvasElementDecorator,
11
11
  narration,
12
12
  newLabel
13
- } from "./chunk-3FJYYZOP.js";
13
+ } from "./chunk-RUYEWYEH.js";
14
14
  import {
15
15
  tickerDecorator
16
16
  } from "./chunk-JTQGULTR.js";
@@ -122,11 +122,13 @@ var videoFormats = [
122
122
  "asf",
123
123
  "vob"
124
124
  ];
125
+ var CANVAS_APP_STAGE_ALIAS = "_stage_";
125
126
 
126
127
  export {
127
128
  PIXIVN_VERSION,
128
129
  Repeat,
129
130
  Pause,
130
131
  filters,
131
- videoFormats
132
+ videoFormats,
133
+ CANVAS_APP_STAGE_ALIAS
132
134
  };
@@ -7,7 +7,7 @@ function createExportableElement(element) {
7
7
  let elementString = JSON.stringify(element);
8
8
  return JSON.parse(elementString);
9
9
  } catch (e) {
10
- console.error("[Pixi\u2019VN] Error creating exportable element", e);
10
+ console.error("[Pixi\u2019VN] Error creating exportable element", element, e);
11
11
  throw new Error("[Pixi\u2019VN] Error creating exportable element");
12
12
  }
13
13
  }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  juliette,
3
3
  videoLink
4
- } from "./chunk-UWXYEVOE.js";
4
+ } from "./chunk-LZHBFVRK.js";
5
5
  import {
6
6
  canvas,
7
7
  narration,
8
8
  newLabel,
9
9
  showWithDissolveTransition
10
- } from "./chunk-3FJYYZOP.js";
10
+ } from "./chunk-RUYEWYEH.js";
11
11
 
12
12
  // src/labels/VideoTestLabel.ts
13
13
  var VIDEO_TEST_LABEL = "___pixi_vn_video_test___";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  juliette,
3
3
  musicalAudio
4
- } from "./chunk-UWXYEVOE.js";
4
+ } from "./chunk-LZHBFVRK.js";
5
5
  import {
6
6
  narration,
7
7
  newLabel,
8
8
  sound
9
- } from "./chunk-3FJYYZOP.js";
9
+ } from "./chunk-RUYEWYEH.js";
10
10
  import {
11
11
  filters
12
- } from "./chunk-FYCYVQTG.js";
12
+ } from "./chunk-P5XNCVKG.js";
13
13
 
14
14
  // src/labels/SoundTestLabel.ts
15
15
  var SOUND_TEST_LABEL = "___pixi_vn_sound_test___";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-I6TNJEE3.js";
7
7
  import {
8
8
  StorageManagerStatic
9
- } from "./chunk-66F5CGHV.js";
9
+ } from "./chunk-DPUSONJ3.js";
10
10
  import {
11
11
  CanvasManagerStatic
12
12
  } from "./chunk-P44J5BE2.js";
@@ -33,20 +33,21 @@ import {
33
33
  } from "./chunk-JTQGULTR.js";
34
34
  import {
35
35
  restoreDeepDiffChanges
36
- } from "./chunk-6SZOXEOR.js";
36
+ } from "./chunk-FHNQBWIZ.js";
37
37
  import {
38
38
  createExportableElement
39
- } from "./chunk-D3NHF5OS.js";
39
+ } from "./chunk-PIYIZHZL.js";
40
40
  import {
41
41
  getEventInstanceById,
42
42
  getEventTypeById
43
43
  } from "./chunk-LEMOIFSV.js";
44
44
  import {
45
+ CANVAS_APP_STAGE_ALIAS,
45
46
  PIXIVN_VERSION,
46
47
  Pause,
47
48
  Repeat,
48
49
  videoFormats
49
- } from "./chunk-FYCYVQTG.js";
50
+ } from "./chunk-P5XNCVKG.js";
50
51
  import {
51
52
  Sound,
52
53
  SoundLibrary,
@@ -805,6 +806,10 @@ var CanvasManager = class {
805
806
  * ```
806
807
  */
807
808
  add(alias, canvasElement, options = {}) {
809
+ if (alias === CANVAS_APP_STAGE_ALIAS) {
810
+ console.error(`[Pixi\u2019VN] The alias ${CANVAS_APP_STAGE_ALIAS} is reserved`);
811
+ return;
812
+ }
808
813
  let ignoreOldStyle = options?.ignoreOldStyle;
809
814
  let oldCanvasElement = this.find(alias);
810
815
  if (oldCanvasElement) {
@@ -835,6 +840,10 @@ var CanvasManager = class {
835
840
  * ```
836
841
  */
837
842
  remove(alias, options = {}) {
843
+ if (alias === CANVAS_APP_STAGE_ALIAS) {
844
+ console.error(`[Pixi\u2019VN] The alias ${CANVAS_APP_STAGE_ALIAS} is reserved`);
845
+ return;
846
+ }
838
847
  let ignoreTickers = options.ignoreTickers;
839
848
  if (typeof alias === "string") {
840
849
  alias = [alias];
@@ -863,6 +872,9 @@ var CanvasManager = class {
863
872
  * ```
864
873
  */
865
874
  find(alias) {
875
+ if (alias === CANVAS_APP_STAGE_ALIAS) {
876
+ return this.app.stage;
877
+ }
866
878
  return CanvasManagerStatic._children[alias];
867
879
  }
868
880
  /**
@@ -973,12 +985,16 @@ var CanvasManager = class {
973
985
  pushTicker(id, tickerData, ticker) {
974
986
  CanvasManagerStatic._currentTickers[id] = tickerData;
975
987
  tickerData.fn = (t) => {
976
- if (tickerData.createdByTicketSteps && this.isTickerPaused(tickerData.createdByTicketSteps.canvasElementAlias, tickerData.createdByTicketSteps.id)) {
977
- return;
978
- }
979
988
  let data = CanvasManagerStatic._currentTickers[id];
980
989
  if (data) {
981
- let canvasElementAliases = data.canvasElementAliases.filter((alias) => !this.isTickerPaused(alias, id));
990
+ let canvasElementAliases = data.canvasElementAliases;
991
+ if (tickerData.createdByTicketSteps) {
992
+ if (this.isTickerPaused(tickerData.createdByTicketSteps.canvasElementAlias, tickerData.createdByTicketSteps.id)) {
993
+ return;
994
+ }
995
+ } else {
996
+ canvasElementAliases = canvasElementAliases.filter((alias) => !this.isTickerPaused(alias, id));
997
+ }
982
998
  ticker?.fn(t, data.args, canvasElementAliases, id);
983
999
  }
984
1000
  };
@@ -1325,15 +1341,19 @@ var CanvasManager = class {
1325
1341
  });
1326
1342
  CanvasManagerStatic._tickersMustBeCompletedBeforeNextStep.stepAlias.forEach(({ alias, id }) => {
1327
1343
  let ticker = CanvasManagerStatic._currentTickersSteps[alias];
1328
- if (ticker && ticker[id] && !ticker[id].steps.includes(Repeat)) {
1329
- ticker[id].steps.forEach((step) => {
1330
- if (typeof step === "object" && "ticker" in step) {
1331
- let ticker2 = geTickerInstanceById(step.ticker, step.args, step.duration, step.priority);
1332
- if (ticker2) {
1333
- ticker2.onEndOfTicker([alias], id, step.args);
1344
+ if (ticker && ticker[id]) {
1345
+ if (ticker[id].steps.includes(Repeat)) {
1346
+ console.error(`[Pixi\u2019VN] The ticker alias: ${alias} id: ${id} contains a RepeatType, so it can't be forced to complete`, ticker[id]);
1347
+ } else {
1348
+ ticker[id].steps.forEach((step) => {
1349
+ if (typeof step === "object" && "ticker" in step) {
1350
+ let ticker2 = geTickerInstanceById(step.ticker, step.args, step.duration, step.priority);
1351
+ if (ticker2) {
1352
+ ticker2.onEndOfTicker([alias], id, step.args);
1353
+ }
1334
1354
  }
1335
- }
1336
- });
1355
+ });
1356
+ }
1337
1357
  }
1338
1358
  });
1339
1359
  CanvasManagerStatic._tickersMustBeCompletedBeforeNextStep = { tikersIds: [], stepAlias: [] };
@@ -1374,6 +1394,7 @@ var CanvasManager = class {
1374
1394
  tickers: createExportableElement(CanvasManagerStatic.currentTickersWithoutCreatedBySteps),
1375
1395
  tickersSteps: createExportableElement(CanvasManagerStatic._currentTickersSteps),
1376
1396
  elements: createExportableElement(currentElements),
1397
+ stage: createExportableElement(getMemoryContainer(this.app.stage)),
1377
1398
  elementAliasesOrder: createExportableElement(CanvasManagerStatic.childrenAliasesOrder),
1378
1399
  tickersOnPause: createExportableElement(CanvasManagerStatic._tickersOnPause)
1379
1400
  };
@@ -1392,6 +1413,11 @@ var CanvasManager = class {
1392
1413
  import(data) {
1393
1414
  this.clear();
1394
1415
  try {
1416
+ if (data.hasOwnProperty("stage") && data.hasOwnProperty("stage")) {
1417
+ setMemoryContainer(this.app.stage, data["stage"]);
1418
+ } else {
1419
+ console.error("[Pixi\u2019VN] The data does not have the properties stage");
1420
+ }
1395
1421
  let tickersOnPause = data["tickersOnPause"] || {};
1396
1422
  if (data.hasOwnProperty("elementAliasesOrder") && data.hasOwnProperty("elements")) {
1397
1423
  let currentElements = data["elements"];
@@ -1940,6 +1966,88 @@ ZoomTicker = __decorateClass([
1940
1966
  tickerDecorator()
1941
1967
  ], ZoomTicker);
1942
1968
 
1969
+ // src/functions/canvas/canvas-effect.ts
1970
+ async function shakeEffect(alias, props = {}, priority) {
1971
+ let elemet = canvas.find(alias);
1972
+ if (!elemet) {
1973
+ console.error(`[Pixi\u2019VN] The element with the alias ${alias} does not exist. So the shake effect can't be applied.`);
1974
+ return;
1975
+ }
1976
+ let position = { x: elemet.position.x, y: elemet.position.y };
1977
+ let speed = props.speed || 20;
1978
+ let speedProgression = props.speedProgression || void 0;
1979
+ let startOnlyIfHaveTexture = props.startOnlyIfHaveTexture || false;
1980
+ let type = props.type || "horizontal";
1981
+ let maximumShockSize = props.maximumShockSize || 10;
1982
+ let shocksNumber = (props.shocksNumber || 10) - 1;
1983
+ if (shocksNumber < 2) {
1984
+ console.error("[Pixi\u2019VN] The number of shocks must be at least 3.");
1985
+ return;
1986
+ }
1987
+ let upshocksNumber = Math.floor(shocksNumber / 2);
1988
+ let downshocksNumber = Math.ceil(shocksNumber / 2);
1989
+ let moveTickers = [];
1990
+ for (let i = 0; i < upshocksNumber; i++) {
1991
+ let destination = { x: position.x, y: position.y };
1992
+ let shockSize = maximumShockSize * (i + 1) / upshocksNumber;
1993
+ if (type === "horizontal") {
1994
+ if (i % 2 !== 0) {
1995
+ destination.x = position.x + shockSize;
1996
+ } else {
1997
+ destination.x = position.x - shockSize;
1998
+ }
1999
+ } else {
2000
+ if (i % 2 !== 0) {
2001
+ destination.y = position.y + shockSize;
2002
+ } else {
2003
+ destination.y = position.y - shockSize;
2004
+ }
2005
+ }
2006
+ moveTickers.push(new MoveTicker({
2007
+ destination,
2008
+ speed,
2009
+ speedProgression,
2010
+ startOnlyIfHaveTexture
2011
+ }, void 0, priority));
2012
+ }
2013
+ let lastItemIsLeft = upshocksNumber % 2 === 0;
2014
+ for (let i = downshocksNumber; i > 0; i--) {
2015
+ let destination = { x: position.x, y: position.y };
2016
+ let shockSize = maximumShockSize * (i + 1) / (downshocksNumber - 1);
2017
+ if (type === "horizontal") {
2018
+ if (i % 2 === 0 && !lastItemIsLeft || i % 2 !== 0 && lastItemIsLeft) {
2019
+ destination.x = position.x - shockSize;
2020
+ } else {
2021
+ destination.x = position.x + shockSize;
2022
+ }
2023
+ } else {
2024
+ if (i % 2 === 0 && !lastItemIsLeft || i % 2 !== 0 && lastItemIsLeft) {
2025
+ destination.y = position.y - shockSize;
2026
+ } else {
2027
+ destination.y = position.y + shockSize;
2028
+ }
2029
+ }
2030
+ moveTickers.push(new MoveTicker({
2031
+ destination,
2032
+ speed,
2033
+ speedProgression,
2034
+ startOnlyIfHaveTexture
2035
+ }, void 0, priority));
2036
+ }
2037
+ moveTickers.push(new MoveTicker({
2038
+ destination: position,
2039
+ speed,
2040
+ speedProgression,
2041
+ startOnlyIfHaveTexture,
2042
+ tickerAliasToResume: alias
2043
+ }, void 0, priority));
2044
+ let id = canvas.addTickersSteps(alias, moveTickers);
2045
+ if (id) {
2046
+ canvas.addTickerMustBeCompletedBeforeNextStep({ id, alias });
2047
+ canvas.putOnPauseTicker(alias, id);
2048
+ }
2049
+ }
2050
+
1943
2051
  // src/functions/canvas/image-utility.ts
1944
2052
  function addImage(alias, imageUrl) {
1945
2053
  let image = new CanvasImage();
@@ -2519,6 +2627,7 @@ var NarrationManagerStatic = class _NarrationManagerStatic {
2519
2627
  canvas: {
2520
2628
  elementAliasesOrder: [],
2521
2629
  elements: {},
2630
+ stage: {},
2522
2631
  tickers: {},
2523
2632
  tickersSteps: {},
2524
2633
  tickersOnPause: {}
@@ -4245,7 +4354,7 @@ var StoredClassModel = class {
4245
4354
  if (Object.keys(storageValue[this.id]).length === 0) {
4246
4355
  delete storageValue[this.id];
4247
4356
  }
4248
- storageValue.setVariable(this.categoryId, storageValue);
4357
+ storage.setVariable(this.categoryId, storageValue);
4249
4358
  }
4250
4359
  /**
4251
4360
  * Get a property from the storage.
@@ -4705,6 +4814,7 @@ export {
4705
4814
  MoveTicker,
4706
4815
  RotateTicker,
4707
4816
  ZoomTicker,
4817
+ shakeEffect,
4708
4818
  addImage,
4709
4819
  loadImage,
4710
4820
  showImage,
@@ -1,42 +1,42 @@
1
1
  import {
2
2
  imagesAnimationsTest
3
- } from "./chunk-WJ5SUJTD.js";
3
+ } from "./chunk-7TH27DDS.js";
4
4
  import {
5
5
  inputTestLabel
6
- } from "./chunk-MKN3AKFV.js";
6
+ } from "./chunk-VIQQNPPV.js";
7
7
  import {
8
8
  markdownTest
9
- } from "./chunk-CUYGFKNS.js";
9
+ } from "./chunk-XWOKK2Z4.js";
10
10
  import {
11
11
  soundTestLabel
12
- } from "./chunk-DI77NC2O.js";
12
+ } from "./chunk-REITIQ75.js";
13
13
  import {
14
14
  stepLabelTestLAbel
15
- } from "./chunk-M6X6FHCH.js";
15
+ } from "./chunk-ATJOKACB.js";
16
16
  import {
17
17
  videoTest
18
- } from "./chunk-7IWXRHUU.js";
18
+ } from "./chunk-RAQZR6CM.js";
19
19
  import {
20
20
  baseCanvasElementTestLabel
21
- } from "./chunk-2FSBBQFF.js";
21
+ } from "./chunk-IWJD3C4Y.js";
22
22
  import {
23
23
  canvasEventsTestLabel
24
- } from "./chunk-ENMHDS5Q.js";
24
+ } from "./chunk-C3CICOHN.js";
25
25
  import {
26
26
  customTickerCanvasElementTestLabel
27
- } from "./chunk-T4KKYU4J.js";
27
+ } from "./chunk-OBQXJNCS.js";
28
28
  import {
29
29
  juliette
30
- } from "./chunk-UWXYEVOE.js";
30
+ } from "./chunk-LZHBFVRK.js";
31
31
  import {
32
32
  ChoiceMenuOption,
33
33
  canvas,
34
34
  narration,
35
35
  newLabel
36
- } from "./chunk-3FJYYZOP.js";
36
+ } from "./chunk-RUYEWYEH.js";
37
37
  import {
38
38
  PIXIVN_VERSION
39
- } from "./chunk-FYCYVQTG.js";
39
+ } from "./chunk-P5XNCVKG.js";
40
40
 
41
41
  // src/labels/StartLabel.ts
42
42
  var pixivnTestStartLabel = newLabel(
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  juliette
3
- } from "./chunk-UWXYEVOE.js";
3
+ } from "./chunk-LZHBFVRK.js";
4
4
  import {
5
5
  narration,
6
6
  newLabel
7
- } from "./chunk-3FJYYZOP.js";
7
+ } from "./chunk-RUYEWYEH.js";
8
8
 
9
9
  // src/labels/InputTestLabel.ts
10
10
  var INPUT_TEST_LABEL = "___pixi_vn_input_test___";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  juliette
3
- } from "./chunk-UWXYEVOE.js";
3
+ } from "./chunk-LZHBFVRK.js";
4
4
  import {
5
5
  narration,
6
6
  newLabel
7
- } from "./chunk-3FJYYZOP.js";
7
+ } from "./chunk-RUYEWYEH.js";
8
8
 
9
9
  // src/labels/MarkdownTest.ts
10
10
  var MARKDOWN_TEST_LABEL = "___pixi_vn_markdown_test___";