@vived/app 5.3.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/dist/cjs/Babylon/Adapters/showBabylonInspectorAdapter.test.js +3 -0
  2. package/dist/cjs/Babylon/Adapters/showBabylonInspectorAdapter.test.js.map +1 -1
  3. package/dist/cjs/Babylon/Mocks/MockSceneRayPickUC.js.map +1 -1
  4. package/dist/cjs/Babylon/Mocks/ShowBabylonInspectorPmMock.js.map +1 -1
  5. package/dist/cjs/Babylon/PM/ShowBabylonInspectorPM.js +9 -6
  6. package/dist/cjs/Babylon/PM/ShowBabylonInspectorPM.js.map +1 -1
  7. package/dist/cjs/BaseApp/PM/IsAuthoringPM.js +6 -9
  8. package/dist/cjs/BaseApp/PM/IsAuthoringPM.js.map +1 -1
  9. package/dist/cjs/BaseApp/PM/IsAuthoringPM.test.js +2 -6
  10. package/dist/cjs/BaseApp/PM/IsAuthoringPM.test.js.map +1 -1
  11. package/dist/cjs/BaseApp/PM/IsReviewingPM.js +6 -9
  12. package/dist/cjs/BaseApp/PM/IsReviewingPM.js.map +1 -1
  13. package/dist/cjs/BaseApp/PM/IsReviewingPM.test.js +2 -6
  14. package/dist/cjs/BaseApp/PM/IsReviewingPM.test.js.map +1 -1
  15. package/dist/cjs/BaseApp/PM/SlideTextPM.js +6 -5
  16. package/dist/cjs/BaseApp/PM/SlideTextPM.js.map +1 -1
  17. package/dist/cjs/BaseApp/PM/SlideTextPM.test.js +2 -6
  18. package/dist/cjs/BaseApp/PM/SlideTextPM.test.js.map +1 -1
  19. package/dist/cjs/BaseApp/UC/EditSlideTextUC.test.js +1 -0
  20. package/dist/cjs/BaseApp/UC/EditSlideTextUC.test.js.map +1 -1
  21. package/dist/cjs/BaseApp/UC/SerializeBaseAppState.js +1 -1
  22. package/dist/cjs/BaseApp/UC/SerializeBaseAppState.js.map +1 -1
  23. package/dist/cjs/Callouts/Factories/calloutFactory.test.js +6 -0
  24. package/dist/cjs/Callouts/Factories/calloutFactory.test.js.map +1 -1
  25. package/dist/cjs/Callouts/UC/CreateCalloutUndoRedo.test.js +8 -9
  26. package/dist/cjs/Callouts/UC/CreateCalloutUndoRedo.test.js.map +1 -1
  27. package/dist/cjs/Callouts/UC/SerializeCallouts.js +1 -1
  28. package/dist/cjs/Callouts/UC/SerializeCallouts.js.map +1 -1
  29. package/dist/cjs/Callouts/UC/TryAddCallout.test.js.map +1 -1
  30. package/dist/cjs/Challenge/UCs/SerializeChallenge.js +1 -1
  31. package/dist/cjs/Challenge/UCs/SerializeChallenge.js.map +1 -1
  32. package/dist/cjs/Challenge/UCs/ShowChallengeHelpUC.test.js +3 -2
  33. package/dist/cjs/Challenge/UCs/ShowChallengeHelpUC.test.js.map +1 -1
  34. package/dist/cjs/ChannelModel/PMs/ActiveModelPM.js +6 -5
  35. package/dist/cjs/ChannelModel/PMs/ActiveModelPM.js.map +1 -1
  36. package/dist/cjs/ChannelModel/PMs/ActiveModelPM.test.js +2 -6
  37. package/dist/cjs/ChannelModel/PMs/ActiveModelPM.test.js.map +1 -1
  38. package/dist/cjs/ChannelModel/PMs/ModelHasCalloutsPM.js +5 -3
  39. package/dist/cjs/ChannelModel/PMs/ModelHasCalloutsPM.js.map +1 -1
  40. package/dist/cjs/ChannelModel/PMs/ModelHasCalloutsPM.test.js +1 -0
  41. package/dist/cjs/ChannelModel/PMs/ModelHasCalloutsPM.test.js.map +1 -1
  42. package/dist/cjs/ChannelModel/PMs/ModelHasLandmarksPM.js +3 -7
  43. package/dist/cjs/ChannelModel/PMs/ModelHasLandmarksPM.js.map +1 -1
  44. package/dist/cjs/ChannelModel/PMs/ModelHasLandmarksPM.test.js +1 -0
  45. package/dist/cjs/ChannelModel/PMs/ModelHasLandmarksPM.test.js.map +1 -1
  46. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreHiddenPM.js +3 -9
  47. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreHiddenPM.js.map +1 -1
  48. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreHiddenPM.test.js +1 -0
  49. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreHiddenPM.test.js.map +1 -1
  50. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreStickablePM.js +3 -7
  51. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreStickablePM.js.map +1 -1
  52. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreStickablePM.test.js +1 -0
  53. package/dist/cjs/ChannelModel/PMs/ModelObjectsAreStickablePM.test.js.map +1 -1
  54. package/dist/cjs/ChannelModel/PMs/ModelObjectsHaveOverlayPM.js +3 -9
  55. package/dist/cjs/ChannelModel/PMs/ModelObjectsHaveOverlayPM.js.map +1 -1
  56. package/dist/cjs/ChannelModel/PMs/ModelObjectsHaveOverlayPM.test.js +1 -0
  57. package/dist/cjs/ChannelModel/PMs/ModelObjectsHaveOverlayPM.test.js.map +1 -1
  58. package/dist/cjs/ChannelModel/UC/LoadChannelModelUC.test.js +6 -6
  59. package/dist/cjs/ChannelModel/UC/LoadChannelModelUC.test.js.map +1 -1
  60. package/dist/cjs/ChannelModel/UC/SelectChannelModelUC.test.js +1 -1
  61. package/dist/cjs/ChannelModel/UC/SelectChannelModelUC.test.js.map +1 -1
  62. package/dist/cjs/ChannelModel/UC/SerializeActiveModel.js +1 -1
  63. package/dist/cjs/ChannelModel/UC/SerializeActiveModel.js.map +1 -1
  64. package/dist/cjs/Dispatcher/Entities/AppDispatcher.js +7 -0
  65. package/dist/cjs/Dispatcher/Entities/AppDispatcher.js.map +1 -1
  66. package/dist/cjs/Dispatcher/Entities/AppDispatcher.test.js +31 -0
  67. package/dist/cjs/Dispatcher/Entities/AppDispatcher.test.js.map +1 -1
  68. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js +3 -1
  69. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  70. package/dist/cjs/Dispatcher/Mocks/GetAssetBlobURLUCMock.js +1 -1
  71. package/dist/cjs/Dispatcher/Mocks/GetAssetBlobURLUCMock.js.map +1 -1
  72. package/dist/cjs/Dispatcher/Mocks/GetLinkedAssetsUCMock.js +1 -1
  73. package/dist/cjs/Dispatcher/Mocks/GetLinkedAssetsUCMock.js.map +1 -1
  74. package/dist/cjs/Dispatcher/Mocks/MockDispatcher.js +2 -2
  75. package/dist/cjs/Dispatcher/Mocks/MockDispatcher.js.map +1 -1
  76. package/dist/cjs/Dispatcher/Mocks/MockGetAssetFolderURL.js +1 -1
  77. package/dist/cjs/Dispatcher/Mocks/MockGetAssetFolderURL.js.map +1 -1
  78. package/dist/cjs/Dispatcher/Mocks/MockShowAlert.js +1 -1
  79. package/dist/cjs/Dispatcher/Mocks/MockShowAlert.js.map +1 -1
  80. package/dist/cjs/Dispatcher/Mocks/MockShowConfirm.js +1 -1
  81. package/dist/cjs/Dispatcher/Mocks/MockShowConfirm.js.map +1 -1
  82. package/dist/cjs/Dispatcher/Mocks/MockShowMarkdown.js +1 -1
  83. package/dist/cjs/Dispatcher/Mocks/MockShowMarkdown.js.map +1 -1
  84. package/dist/cjs/Dispatcher/Mocks/MockShowSpinner.js +1 -1
  85. package/dist/cjs/Dispatcher/Mocks/MockShowSpinner.js.map +1 -1
  86. package/dist/cjs/Dispatcher/Mocks/MockSubmitResult.js +5 -5
  87. package/dist/cjs/Dispatcher/Mocks/MockSubmitResult.js.map +1 -1
  88. package/dist/cjs/Dispatcher/Mocks/ShowSelectModelUCMock.js +1 -1
  89. package/dist/cjs/Dispatcher/Mocks/ShowSelectModelUCMock.js.map +1 -1
  90. package/dist/cjs/Dispatcher/UC/AppIsReadyUC.test.js +3 -1
  91. package/dist/cjs/Dispatcher/UC/AppIsReadyUC.test.js.map +1 -1
  92. package/dist/cjs/Dispatcher/UC/DispatchStartZSpaceUC.test.js +2 -1
  93. package/dist/cjs/Dispatcher/UC/DispatchStartZSpaceUC.test.js.map +1 -1
  94. package/dist/cjs/Dispatcher/UC/DispatchStateChangeUC.test.js +1 -0
  95. package/dist/cjs/Dispatcher/UC/DispatchStateChangeUC.test.js.map +1 -1
  96. package/dist/cjs/Dispatcher/UC/DispatchStopZSpaceUC.test.js +2 -1
  97. package/dist/cjs/Dispatcher/UC/DispatchStopZSpaceUC.test.js.map +1 -1
  98. package/dist/cjs/Dispatcher/UC/GetAssetBlobURLUC.test.js +3 -1
  99. package/dist/cjs/Dispatcher/UC/GetAssetBlobURLUC.test.js.map +1 -1
  100. package/dist/cjs/Dispatcher/UC/GetAssetFolderURLUC.test.js +3 -1
  101. package/dist/cjs/Dispatcher/UC/GetAssetFolderURLUC.test.js.map +1 -1
  102. package/dist/cjs/Dispatcher/UC/GetAssetMetaUC.test.js +3 -1
  103. package/dist/cjs/Dispatcher/UC/GetAssetMetaUC.test.js.map +1 -1
  104. package/dist/cjs/Dispatcher/UC/GetAssetsForOwnerUC.test.js +3 -1
  105. package/dist/cjs/Dispatcher/UC/GetAssetsForOwnerUC.test.js.map +1 -1
  106. package/dist/cjs/Dispatcher/UC/GetLinkedAssetsUC.test.js +3 -1
  107. package/dist/cjs/Dispatcher/UC/GetLinkedAssetsUC.test.js.map +1 -1
  108. package/dist/cjs/Dispatcher/UC/GoToNextStateUC.test.js +3 -1
  109. package/dist/cjs/Dispatcher/UC/GoToNextStateUC.test.js.map +1 -1
  110. package/dist/cjs/Dispatcher/UC/GoToPreviousStateUC.test.js +3 -1
  111. package/dist/cjs/Dispatcher/UC/GoToPreviousStateUC.test.js.map +1 -1
  112. package/dist/cjs/Dispatcher/UC/HasNextStateUC.test.js +3 -1
  113. package/dist/cjs/Dispatcher/UC/HasNextStateUC.test.js.map +1 -1
  114. package/dist/cjs/Dispatcher/UC/HasPreviousStateUC.test.js +3 -1
  115. package/dist/cjs/Dispatcher/UC/HasPreviousStateUC.test.js.map +1 -1
  116. package/dist/cjs/Dispatcher/UC/IsAssetFetchedUC.test.js +3 -1
  117. package/dist/cjs/Dispatcher/UC/IsAssetFetchedUC.test.js.map +1 -1
  118. package/dist/cjs/Dispatcher/UC/IsZSpaceAvailableUC.test.js +3 -1
  119. package/dist/cjs/Dispatcher/UC/IsZSpaceAvailableUC.test.js.map +1 -1
  120. package/dist/cjs/Dispatcher/UC/RegisterExternalStylesheetsUC.test.js +3 -1
  121. package/dist/cjs/Dispatcher/UC/RegisterExternalStylesheetsUC.test.js.map +1 -1
  122. package/dist/cjs/Dispatcher/UC/RestoreCurrentStateUC.test.js +3 -1
  123. package/dist/cjs/Dispatcher/UC/RestoreCurrentStateUC.test.js.map +1 -1
  124. package/dist/cjs/Dispatcher/UC/StateIsCompleteUC.test.js +3 -1
  125. package/dist/cjs/Dispatcher/UC/StateIsCompleteUC.test.js.map +1 -1
  126. package/dist/cjs/Dispatcher/UC/SubmitActivityAssetUC.test.js +5 -3
  127. package/dist/cjs/Dispatcher/UC/SubmitActivityAssetUC.test.js.map +1 -1
  128. package/dist/cjs/Dispatcher/UC/SubmitResultResultUC.test.js +11 -5
  129. package/dist/cjs/Dispatcher/UC/SubmitResultResultUC.test.js.map +1 -1
  130. package/dist/cjs/Enablement/PM/EnabledStatePM.js +5 -9
  131. package/dist/cjs/Enablement/PM/EnabledStatePM.js.map +1 -1
  132. package/dist/cjs/Enablement/PM/EnabledStatePM.test.js +1 -0
  133. package/dist/cjs/Enablement/PM/EnabledStatePM.test.js.map +1 -1
  134. package/dist/cjs/Environment/UCs/SerializeEnvironment.js +1 -1
  135. package/dist/cjs/Environment/UCs/SerializeEnvironment.js.map +1 -1
  136. package/dist/cjs/Hideable/Factories/setupHideable.test.js +6 -0
  137. package/dist/cjs/Hideable/Factories/setupHideable.test.js.map +1 -1
  138. package/dist/cjs/Hideable/UCs/SerializeHideableObjects.js +1 -1
  139. package/dist/cjs/Hideable/UCs/SerializeHideableObjects.js.map +1 -1
  140. package/dist/cjs/Hideable/UCs/TryHideWithPickUC.test.js.map +1 -1
  141. package/dist/cjs/HoverLabel/UseCases/SerializeAllowHoverLabel.js +1 -1
  142. package/dist/cjs/HoverLabel/UseCases/SerializeAllowHoverLabel.js.map +1 -1
  143. package/dist/cjs/HoverLabel/UseCases/TryShowHoverLabel.test.js.map +1 -1
  144. package/dist/cjs/Label/Controller/submitCustomLabel.test.js +3 -0
  145. package/dist/cjs/Label/Controller/submitCustomLabel.test.js.map +1 -1
  146. package/dist/cjs/Label/Controller/updateCustomLabel.test.js +3 -0
  147. package/dist/cjs/Label/Controller/updateCustomLabel.test.js.map +1 -1
  148. package/dist/cjs/Label/UC/ClearCustomLabelUC.test.js +0 -7
  149. package/dist/cjs/Label/UC/ClearCustomLabelUC.test.js.map +1 -1
  150. package/dist/cjs/Label/UC/SerializeCustomLabels.js +1 -1
  151. package/dist/cjs/Label/UC/SerializeCustomLabels.js.map +1 -1
  152. package/dist/cjs/Label/UC/SetCustomLabelUC.test.js +0 -7
  153. package/dist/cjs/Label/UC/SetCustomLabelUC.test.js.map +1 -1
  154. package/dist/cjs/LabelDrop/Controller/releaseLabelDropAnswerItemScreen.test.js.map +1 -1
  155. package/dist/cjs/LabelDrop/UseCases/SerializeLabelDrop.js +1 -1
  156. package/dist/cjs/LabelDrop/UseCases/SerializeLabelDrop.js.map +1 -1
  157. package/dist/cjs/LabelDrop/UseCases/ToggleLabelDropTargetUC.test.js.map +1 -1
  158. package/dist/cjs/Landmarks/PM/LandmarkSizePM.js +5 -8
  159. package/dist/cjs/Landmarks/PM/LandmarkSizePM.js.map +1 -1
  160. package/dist/cjs/Landmarks/UseCases/SerializeLandmarks.js +1 -1
  161. package/dist/cjs/Landmarks/UseCases/SerializeLandmarks.js.map +1 -1
  162. package/dist/cjs/Landmarks/UseCases/TryAddNewLandmarkUC.test.js +2 -0
  163. package/dist/cjs/Landmarks/UseCases/TryAddNewLandmarkUC.test.js.map +1 -1
  164. package/dist/cjs/ObjectPick/UseCases/SerializeObjectPick.js +1 -1
  165. package/dist/cjs/ObjectPick/UseCases/SerializeObjectPick.js.map +1 -1
  166. package/dist/cjs/ObjectPick/UseCases/TrySelectObjectPickUC.test.js.map +1 -1
  167. package/dist/cjs/ObjectPick/UseCases/TrySubmitObjectPickUC.test.js +1 -0
  168. package/dist/cjs/ObjectPick/UseCases/TrySubmitObjectPickUC.test.js.map +1 -1
  169. package/dist/cjs/OverlayColor/UC/SerializeOverlayColoredObjects.js +1 -1
  170. package/dist/cjs/OverlayColor/UC/SerializeOverlayColoredObjects.js.map +1 -1
  171. package/dist/cjs/Question/UC/SerializeQuestionChallenge.js +1 -1
  172. package/dist/cjs/Question/UC/SerializeQuestionChallenge.js.map +1 -1
  173. package/dist/cjs/Question/UC/SubmitQuestionAnswerUC.test.js +1 -0
  174. package/dist/cjs/Question/UC/SubmitQuestionAnswerUC.test.js.map +1 -1
  175. package/dist/cjs/RequestHandler/Entities/AppHandler.js +4 -0
  176. package/dist/cjs/RequestHandler/Entities/AppHandler.js.map +1 -1
  177. package/dist/cjs/RequestHandler/Entities/AppHandler.test.js +27 -0
  178. package/dist/cjs/RequestHandler/Entities/AppHandler.test.js.map +1 -1
  179. package/dist/cjs/RequestHandler/Factories/RequestHandlerFeatureFactory.js +28 -29
  180. package/dist/cjs/RequestHandler/Factories/RequestHandlerFeatureFactory.js.map +1 -1
  181. package/dist/cjs/RequestHandler/Factories/RequestHandlerFeatureFactory.test.js +128 -0
  182. package/dist/cjs/RequestHandler/Factories/RequestHandlerFeatureFactory.test.js.map +1 -0
  183. package/dist/cjs/RequestHandler/Mocks/MockAppHandlerEntity.js +1 -0
  184. package/dist/cjs/RequestHandler/Mocks/MockAppHandlerEntity.js.map +1 -1
  185. package/dist/cjs/SceneRoot/UC/SerializeSceneRoot.js +1 -1
  186. package/dist/cjs/SceneRoot/UC/SerializeSceneRoot.js.map +1 -1
  187. package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
  188. package/dist/cjs/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
  189. package/dist/cjs/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
  190. package/dist/cjs/StateMachine/Controller/clickRestorePreviousState.js +21 -0
  191. package/dist/cjs/StateMachine/Controller/clickRestorePreviousState.js.map +1 -0
  192. package/dist/cjs/StateMachine/Controller/clickRestorePreviousState.test.js +34 -0
  193. package/dist/cjs/StateMachine/Controller/clickRestorePreviousState.test.js.map +1 -0
  194. package/dist/cjs/StateMachine/Controller/index.js +1 -1
  195. package/dist/cjs/StateMachine/Controller/index.js.map +1 -1
  196. package/dist/cjs/StateMachine/Entities/StateMachineEntity.js +26 -4
  197. package/dist/cjs/StateMachine/Entities/StateMachineEntity.js.map +1 -1
  198. package/dist/cjs/StateMachine/Entities/StateMachineEntity.test.js +23 -4
  199. package/dist/cjs/StateMachine/Entities/StateMachineEntity.test.js.map +1 -1
  200. package/dist/cjs/Stick/UCs/TryStickAppObjectUC.test.js.map +1 -1
  201. package/dist/cjs/StoredView/PM/HasStoredViewPM.js +6 -10
  202. package/dist/cjs/StoredView/PM/HasStoredViewPM.js.map +1 -1
  203. package/dist/cjs/StoredView/PM/HasStoredViewPM.test.js +1 -0
  204. package/dist/cjs/StoredView/PM/HasStoredViewPM.test.js.map +1 -1
  205. package/dist/cjs/StoredView/UC/SerializeStoredView.js +1 -1
  206. package/dist/cjs/StoredView/UC/SerializeStoredView.js.map +1 -1
  207. package/dist/cjs/Stylus/PMs/StylusIsInUsePM.js +7 -6
  208. package/dist/cjs/Stylus/PMs/StylusIsInUsePM.js.map +1 -1
  209. package/dist/cjs/Stylus/PMs/StylusIsInUsePM.test.js +2 -6
  210. package/dist/cjs/Stylus/PMs/StylusIsInUsePM.test.js.map +1 -1
  211. package/dist/cjs/Stylus/UCs/EmulateStylusUC.test.js.map +1 -1
  212. package/dist/cjs/Transform3D/UC/BumpTransformScaleAboutPixelPoint.test.js.map +1 -1
  213. package/dist/cjs/Transform3D/UC/PinchTransform.test.js.map +1 -1
  214. package/dist/cjs/Transform3D/UC/TryPanTransformUC.test.js.map +1 -1
  215. package/dist/cjs/Transparency/UCs/SerializeTransparentObjects.js +1 -1
  216. package/dist/cjs/Transparency/UCs/SerializeTransparentObjects.js.map +1 -1
  217. package/dist/cjs/zSpace/PM/ZSpaceIsEnabledPM.js +6 -5
  218. package/dist/cjs/zSpace/PM/ZSpaceIsEnabledPM.js.map +1 -1
  219. package/dist/cjs/zSpace/PM/ZSpaceIsEnabledPM.test.js +4 -8
  220. package/dist/cjs/zSpace/PM/ZSpaceIsEnabledPM.test.js.map +1 -1
  221. package/dist/cjs/zSpace/PM/ZSpaceIsSupportedPM.js +6 -5
  222. package/dist/cjs/zSpace/PM/ZSpaceIsSupportedPM.js.map +1 -1
  223. package/dist/cjs/zSpace/PM/ZSpaceIsSupportedPM.test.js +1 -0
  224. package/dist/cjs/zSpace/PM/ZSpaceIsSupportedPM.test.js.map +1 -1
  225. package/dist/esm/Babylon/Adapters/showBabylonInspectorAdapter.test.js +3 -0
  226. package/dist/esm/Babylon/Adapters/showBabylonInspectorAdapter.test.js.map +1 -1
  227. package/dist/esm/Babylon/Mocks/MockSceneRayPickUC.js.map +1 -1
  228. package/dist/esm/Babylon/Mocks/ShowBabylonInspectorPmMock.js.map +1 -1
  229. package/dist/esm/Babylon/PM/ShowBabylonInspectorPM.js +9 -6
  230. package/dist/esm/Babylon/PM/ShowBabylonInspectorPM.js.map +1 -1
  231. package/dist/esm/BaseApp/PM/IsAuthoringPM.js +7 -10
  232. package/dist/esm/BaseApp/PM/IsAuthoringPM.js.map +1 -1
  233. package/dist/esm/BaseApp/PM/IsAuthoringPM.test.js +2 -6
  234. package/dist/esm/BaseApp/PM/IsAuthoringPM.test.js.map +1 -1
  235. package/dist/esm/BaseApp/PM/IsReviewingPM.js +7 -10
  236. package/dist/esm/BaseApp/PM/IsReviewingPM.js.map +1 -1
  237. package/dist/esm/BaseApp/PM/IsReviewingPM.test.js +2 -6
  238. package/dist/esm/BaseApp/PM/IsReviewingPM.test.js.map +1 -1
  239. package/dist/esm/BaseApp/PM/SlideTextPM.js +7 -6
  240. package/dist/esm/BaseApp/PM/SlideTextPM.js.map +1 -1
  241. package/dist/esm/BaseApp/PM/SlideTextPM.test.js +2 -6
  242. package/dist/esm/BaseApp/PM/SlideTextPM.test.js.map +1 -1
  243. package/dist/esm/BaseApp/UC/EditSlideTextUC.test.js +1 -0
  244. package/dist/esm/BaseApp/UC/EditSlideTextUC.test.js.map +1 -1
  245. package/dist/esm/BaseApp/UC/SerializeBaseAppState.js +1 -1
  246. package/dist/esm/BaseApp/UC/SerializeBaseAppState.js.map +1 -1
  247. package/dist/esm/Callouts/Factories/calloutFactory.test.js +6 -0
  248. package/dist/esm/Callouts/Factories/calloutFactory.test.js.map +1 -1
  249. package/dist/esm/Callouts/UC/CreateCalloutUndoRedo.test.js +8 -9
  250. package/dist/esm/Callouts/UC/CreateCalloutUndoRedo.test.js.map +1 -1
  251. package/dist/esm/Callouts/UC/SerializeCallouts.js +1 -1
  252. package/dist/esm/Callouts/UC/SerializeCallouts.js.map +1 -1
  253. package/dist/esm/Callouts/UC/TryAddCallout.test.js.map +1 -1
  254. package/dist/esm/Challenge/UCs/SerializeChallenge.js +1 -1
  255. package/dist/esm/Challenge/UCs/SerializeChallenge.js.map +1 -1
  256. package/dist/esm/Challenge/UCs/ShowChallengeHelpUC.test.js +3 -2
  257. package/dist/esm/Challenge/UCs/ShowChallengeHelpUC.test.js.map +1 -1
  258. package/dist/esm/ChannelModel/PMs/ActiveModelPM.js +7 -6
  259. package/dist/esm/ChannelModel/PMs/ActiveModelPM.js.map +1 -1
  260. package/dist/esm/ChannelModel/PMs/ActiveModelPM.test.js +2 -6
  261. package/dist/esm/ChannelModel/PMs/ActiveModelPM.test.js.map +1 -1
  262. package/dist/esm/ChannelModel/PMs/ModelHasCalloutsPM.js +5 -3
  263. package/dist/esm/ChannelModel/PMs/ModelHasCalloutsPM.js.map +1 -1
  264. package/dist/esm/ChannelModel/PMs/ModelHasCalloutsPM.test.js +1 -0
  265. package/dist/esm/ChannelModel/PMs/ModelHasCalloutsPM.test.js.map +1 -1
  266. package/dist/esm/ChannelModel/PMs/ModelHasLandmarksPM.js +3 -7
  267. package/dist/esm/ChannelModel/PMs/ModelHasLandmarksPM.js.map +1 -1
  268. package/dist/esm/ChannelModel/PMs/ModelHasLandmarksPM.test.js +1 -0
  269. package/dist/esm/ChannelModel/PMs/ModelHasLandmarksPM.test.js.map +1 -1
  270. package/dist/esm/ChannelModel/PMs/ModelObjectsAreHiddenPM.js +3 -9
  271. package/dist/esm/ChannelModel/PMs/ModelObjectsAreHiddenPM.js.map +1 -1
  272. package/dist/esm/ChannelModel/PMs/ModelObjectsAreHiddenPM.test.js +1 -0
  273. package/dist/esm/ChannelModel/PMs/ModelObjectsAreHiddenPM.test.js.map +1 -1
  274. package/dist/esm/ChannelModel/PMs/ModelObjectsAreStickablePM.js +3 -7
  275. package/dist/esm/ChannelModel/PMs/ModelObjectsAreStickablePM.js.map +1 -1
  276. package/dist/esm/ChannelModel/PMs/ModelObjectsAreStickablePM.test.js +1 -0
  277. package/dist/esm/ChannelModel/PMs/ModelObjectsAreStickablePM.test.js.map +1 -1
  278. package/dist/esm/ChannelModel/PMs/ModelObjectsHaveOverlayPM.js +3 -9
  279. package/dist/esm/ChannelModel/PMs/ModelObjectsHaveOverlayPM.js.map +1 -1
  280. package/dist/esm/ChannelModel/PMs/ModelObjectsHaveOverlayPM.test.js +1 -0
  281. package/dist/esm/ChannelModel/PMs/ModelObjectsHaveOverlayPM.test.js.map +1 -1
  282. package/dist/esm/ChannelModel/UC/LoadChannelModelUC.test.js +6 -6
  283. package/dist/esm/ChannelModel/UC/LoadChannelModelUC.test.js.map +1 -1
  284. package/dist/esm/ChannelModel/UC/SelectChannelModelUC.test.js +1 -1
  285. package/dist/esm/ChannelModel/UC/SelectChannelModelUC.test.js.map +1 -1
  286. package/dist/esm/ChannelModel/UC/SerializeActiveModel.js +1 -1
  287. package/dist/esm/ChannelModel/UC/SerializeActiveModel.js.map +1 -1
  288. package/dist/esm/Dispatcher/Entities/AppDispatcher.js +7 -0
  289. package/dist/esm/Dispatcher/Entities/AppDispatcher.js.map +1 -1
  290. package/dist/esm/Dispatcher/Entities/AppDispatcher.test.js +31 -0
  291. package/dist/esm/Dispatcher/Entities/AppDispatcher.test.js.map +1 -1
  292. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js +3 -1
  293. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  294. package/dist/esm/Dispatcher/Mocks/GetAssetBlobURLUCMock.js +1 -1
  295. package/dist/esm/Dispatcher/Mocks/GetAssetBlobURLUCMock.js.map +1 -1
  296. package/dist/esm/Dispatcher/Mocks/GetLinkedAssetsUCMock.js +1 -1
  297. package/dist/esm/Dispatcher/Mocks/GetLinkedAssetsUCMock.js.map +1 -1
  298. package/dist/esm/Dispatcher/Mocks/MockDispatcher.js +2 -2
  299. package/dist/esm/Dispatcher/Mocks/MockDispatcher.js.map +1 -1
  300. package/dist/esm/Dispatcher/Mocks/MockGetAssetFolderURL.js +1 -1
  301. package/dist/esm/Dispatcher/Mocks/MockGetAssetFolderURL.js.map +1 -1
  302. package/dist/esm/Dispatcher/Mocks/MockShowAlert.js +1 -1
  303. package/dist/esm/Dispatcher/Mocks/MockShowAlert.js.map +1 -1
  304. package/dist/esm/Dispatcher/Mocks/MockShowConfirm.js +1 -1
  305. package/dist/esm/Dispatcher/Mocks/MockShowConfirm.js.map +1 -1
  306. package/dist/esm/Dispatcher/Mocks/MockShowMarkdown.js +1 -1
  307. package/dist/esm/Dispatcher/Mocks/MockShowMarkdown.js.map +1 -1
  308. package/dist/esm/Dispatcher/Mocks/MockShowSpinner.js +1 -1
  309. package/dist/esm/Dispatcher/Mocks/MockShowSpinner.js.map +1 -1
  310. package/dist/esm/Dispatcher/Mocks/MockSubmitResult.js +5 -5
  311. package/dist/esm/Dispatcher/Mocks/MockSubmitResult.js.map +1 -1
  312. package/dist/esm/Dispatcher/Mocks/ShowSelectModelUCMock.js +1 -1
  313. package/dist/esm/Dispatcher/Mocks/ShowSelectModelUCMock.js.map +1 -1
  314. package/dist/esm/Dispatcher/UC/AppIsReadyUC.test.js +3 -1
  315. package/dist/esm/Dispatcher/UC/AppIsReadyUC.test.js.map +1 -1
  316. package/dist/esm/Dispatcher/UC/DispatchStartZSpaceUC.test.js +2 -1
  317. package/dist/esm/Dispatcher/UC/DispatchStartZSpaceUC.test.js.map +1 -1
  318. package/dist/esm/Dispatcher/UC/DispatchStateChangeUC.test.js +1 -0
  319. package/dist/esm/Dispatcher/UC/DispatchStateChangeUC.test.js.map +1 -1
  320. package/dist/esm/Dispatcher/UC/DispatchStopZSpaceUC.test.js +2 -1
  321. package/dist/esm/Dispatcher/UC/DispatchStopZSpaceUC.test.js.map +1 -1
  322. package/dist/esm/Dispatcher/UC/GetAssetBlobURLUC.test.js +3 -1
  323. package/dist/esm/Dispatcher/UC/GetAssetBlobURLUC.test.js.map +1 -1
  324. package/dist/esm/Dispatcher/UC/GetAssetFolderURLUC.test.js +3 -1
  325. package/dist/esm/Dispatcher/UC/GetAssetFolderURLUC.test.js.map +1 -1
  326. package/dist/esm/Dispatcher/UC/GetAssetMetaUC.test.js +3 -1
  327. package/dist/esm/Dispatcher/UC/GetAssetMetaUC.test.js.map +1 -1
  328. package/dist/esm/Dispatcher/UC/GetAssetsForOwnerUC.test.js +3 -1
  329. package/dist/esm/Dispatcher/UC/GetAssetsForOwnerUC.test.js.map +1 -1
  330. package/dist/esm/Dispatcher/UC/GetLinkedAssetsUC.test.js +3 -1
  331. package/dist/esm/Dispatcher/UC/GetLinkedAssetsUC.test.js.map +1 -1
  332. package/dist/esm/Dispatcher/UC/GoToNextStateUC.test.js +3 -1
  333. package/dist/esm/Dispatcher/UC/GoToNextStateUC.test.js.map +1 -1
  334. package/dist/esm/Dispatcher/UC/GoToPreviousStateUC.test.js +3 -1
  335. package/dist/esm/Dispatcher/UC/GoToPreviousStateUC.test.js.map +1 -1
  336. package/dist/esm/Dispatcher/UC/HasNextStateUC.test.js +3 -1
  337. package/dist/esm/Dispatcher/UC/HasNextStateUC.test.js.map +1 -1
  338. package/dist/esm/Dispatcher/UC/HasPreviousStateUC.test.js +3 -1
  339. package/dist/esm/Dispatcher/UC/HasPreviousStateUC.test.js.map +1 -1
  340. package/dist/esm/Dispatcher/UC/IsAssetFetchedUC.test.js +3 -1
  341. package/dist/esm/Dispatcher/UC/IsAssetFetchedUC.test.js.map +1 -1
  342. package/dist/esm/Dispatcher/UC/IsZSpaceAvailableUC.test.js +3 -1
  343. package/dist/esm/Dispatcher/UC/IsZSpaceAvailableUC.test.js.map +1 -1
  344. package/dist/esm/Dispatcher/UC/RegisterExternalStylesheetsUC.test.js +3 -1
  345. package/dist/esm/Dispatcher/UC/RegisterExternalStylesheetsUC.test.js.map +1 -1
  346. package/dist/esm/Dispatcher/UC/RestoreCurrentStateUC.test.js +3 -1
  347. package/dist/esm/Dispatcher/UC/RestoreCurrentStateUC.test.js.map +1 -1
  348. package/dist/esm/Dispatcher/UC/StateIsCompleteUC.test.js +3 -1
  349. package/dist/esm/Dispatcher/UC/StateIsCompleteUC.test.js.map +1 -1
  350. package/dist/esm/Dispatcher/UC/SubmitActivityAssetUC.test.js +5 -3
  351. package/dist/esm/Dispatcher/UC/SubmitActivityAssetUC.test.js.map +1 -1
  352. package/dist/esm/Dispatcher/UC/SubmitResultResultUC.test.js +11 -5
  353. package/dist/esm/Dispatcher/UC/SubmitResultResultUC.test.js.map +1 -1
  354. package/dist/esm/Enablement/PM/EnabledStatePM.js +5 -9
  355. package/dist/esm/Enablement/PM/EnabledStatePM.js.map +1 -1
  356. package/dist/esm/Enablement/PM/EnabledStatePM.test.js +1 -0
  357. package/dist/esm/Enablement/PM/EnabledStatePM.test.js.map +1 -1
  358. package/dist/esm/Environment/UCs/SerializeEnvironment.js +1 -1
  359. package/dist/esm/Environment/UCs/SerializeEnvironment.js.map +1 -1
  360. package/dist/esm/Hideable/Factories/setupHideable.test.js +6 -0
  361. package/dist/esm/Hideable/Factories/setupHideable.test.js.map +1 -1
  362. package/dist/esm/Hideable/UCs/SerializeHideableObjects.js +1 -1
  363. package/dist/esm/Hideable/UCs/SerializeHideableObjects.js.map +1 -1
  364. package/dist/esm/Hideable/UCs/TryHideWithPickUC.test.js.map +1 -1
  365. package/dist/esm/HoverLabel/UseCases/SerializeAllowHoverLabel.js +1 -1
  366. package/dist/esm/HoverLabel/UseCases/SerializeAllowHoverLabel.js.map +1 -1
  367. package/dist/esm/HoverLabel/UseCases/TryShowHoverLabel.test.js.map +1 -1
  368. package/dist/esm/Label/Controller/submitCustomLabel.test.js +3 -0
  369. package/dist/esm/Label/Controller/submitCustomLabel.test.js.map +1 -1
  370. package/dist/esm/Label/Controller/updateCustomLabel.test.js +3 -0
  371. package/dist/esm/Label/Controller/updateCustomLabel.test.js.map +1 -1
  372. package/dist/esm/Label/UC/ClearCustomLabelUC.test.js +0 -7
  373. package/dist/esm/Label/UC/ClearCustomLabelUC.test.js.map +1 -1
  374. package/dist/esm/Label/UC/SerializeCustomLabels.js +1 -1
  375. package/dist/esm/Label/UC/SerializeCustomLabels.js.map +1 -1
  376. package/dist/esm/Label/UC/SetCustomLabelUC.test.js +0 -7
  377. package/dist/esm/Label/UC/SetCustomLabelUC.test.js.map +1 -1
  378. package/dist/esm/LabelDrop/Controller/releaseLabelDropAnswerItemScreen.test.js.map +1 -1
  379. package/dist/esm/LabelDrop/UseCases/SerializeLabelDrop.js +1 -1
  380. package/dist/esm/LabelDrop/UseCases/SerializeLabelDrop.js.map +1 -1
  381. package/dist/esm/LabelDrop/UseCases/ToggleLabelDropTargetUC.test.js.map +1 -1
  382. package/dist/esm/Landmarks/PM/LandmarkSizePM.js +5 -8
  383. package/dist/esm/Landmarks/PM/LandmarkSizePM.js.map +1 -1
  384. package/dist/esm/Landmarks/UseCases/SerializeLandmarks.js +1 -1
  385. package/dist/esm/Landmarks/UseCases/SerializeLandmarks.js.map +1 -1
  386. package/dist/esm/Landmarks/UseCases/TryAddNewLandmarkUC.test.js +2 -0
  387. package/dist/esm/Landmarks/UseCases/TryAddNewLandmarkUC.test.js.map +1 -1
  388. package/dist/esm/ObjectPick/UseCases/SerializeObjectPick.js +1 -1
  389. package/dist/esm/ObjectPick/UseCases/SerializeObjectPick.js.map +1 -1
  390. package/dist/esm/ObjectPick/UseCases/TrySelectObjectPickUC.test.js.map +1 -1
  391. package/dist/esm/ObjectPick/UseCases/TrySubmitObjectPickUC.test.js +1 -0
  392. package/dist/esm/ObjectPick/UseCases/TrySubmitObjectPickUC.test.js.map +1 -1
  393. package/dist/esm/OverlayColor/UC/SerializeOverlayColoredObjects.js +1 -1
  394. package/dist/esm/OverlayColor/UC/SerializeOverlayColoredObjects.js.map +1 -1
  395. package/dist/esm/Question/UC/SerializeQuestionChallenge.js +1 -1
  396. package/dist/esm/Question/UC/SerializeQuestionChallenge.js.map +1 -1
  397. package/dist/esm/Question/UC/SubmitQuestionAnswerUC.test.js +1 -0
  398. package/dist/esm/Question/UC/SubmitQuestionAnswerUC.test.js.map +1 -1
  399. package/dist/esm/RequestHandler/Entities/AppHandler.js +4 -0
  400. package/dist/esm/RequestHandler/Entities/AppHandler.js.map +1 -1
  401. package/dist/esm/RequestHandler/Entities/AppHandler.test.js +27 -0
  402. package/dist/esm/RequestHandler/Entities/AppHandler.test.js.map +1 -1
  403. package/dist/esm/RequestHandler/Factories/RequestHandlerFeatureFactory.js +28 -29
  404. package/dist/esm/RequestHandler/Factories/RequestHandlerFeatureFactory.js.map +1 -1
  405. package/dist/esm/RequestHandler/Factories/RequestHandlerFeatureFactory.test.js +126 -0
  406. package/dist/esm/RequestHandler/Factories/RequestHandlerFeatureFactory.test.js.map +1 -0
  407. package/dist/esm/RequestHandler/Mocks/MockAppHandlerEntity.js +1 -0
  408. package/dist/esm/RequestHandler/Mocks/MockAppHandlerEntity.js.map +1 -1
  409. package/dist/esm/SceneRoot/UC/SerializeSceneRoot.js +1 -1
  410. package/dist/esm/SceneRoot/UC/SerializeSceneRoot.js.map +1 -1
  411. package/dist/esm/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
  412. package/dist/esm/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
  413. package/dist/esm/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
  414. package/dist/esm/StateMachine/Controller/clickRestorePreviousState.js +17 -0
  415. package/dist/esm/StateMachine/Controller/clickRestorePreviousState.js.map +1 -0
  416. package/dist/esm/StateMachine/Controller/clickRestorePreviousState.test.js +32 -0
  417. package/dist/esm/StateMachine/Controller/clickRestorePreviousState.test.js.map +1 -0
  418. package/dist/esm/StateMachine/Controller/index.js +1 -1
  419. package/dist/esm/StateMachine/Controller/index.js.map +1 -1
  420. package/dist/esm/StateMachine/Entities/StateMachineEntity.js +26 -4
  421. package/dist/esm/StateMachine/Entities/StateMachineEntity.js.map +1 -1
  422. package/dist/esm/StateMachine/Entities/StateMachineEntity.test.js +23 -4
  423. package/dist/esm/StateMachine/Entities/StateMachineEntity.test.js.map +1 -1
  424. package/dist/esm/Stick/UCs/TryStickAppObjectUC.test.js.map +1 -1
  425. package/dist/esm/StoredView/PM/HasStoredViewPM.js +7 -11
  426. package/dist/esm/StoredView/PM/HasStoredViewPM.js.map +1 -1
  427. package/dist/esm/StoredView/PM/HasStoredViewPM.test.js +1 -0
  428. package/dist/esm/StoredView/PM/HasStoredViewPM.test.js.map +1 -1
  429. package/dist/esm/StoredView/UC/SerializeStoredView.js +1 -1
  430. package/dist/esm/StoredView/UC/SerializeStoredView.js.map +1 -1
  431. package/dist/esm/Stylus/PMs/StylusIsInUsePM.js +8 -7
  432. package/dist/esm/Stylus/PMs/StylusIsInUsePM.js.map +1 -1
  433. package/dist/esm/Stylus/PMs/StylusIsInUsePM.test.js +2 -6
  434. package/dist/esm/Stylus/PMs/StylusIsInUsePM.test.js.map +1 -1
  435. package/dist/esm/Stylus/UCs/EmulateStylusUC.test.js.map +1 -1
  436. package/dist/esm/Transform3D/UC/BumpTransformScaleAboutPixelPoint.test.js.map +1 -1
  437. package/dist/esm/Transform3D/UC/PinchTransform.test.js.map +1 -1
  438. package/dist/esm/Transform3D/UC/TryPanTransformUC.test.js.map +1 -1
  439. package/dist/esm/Transparency/UCs/SerializeTransparentObjects.js +1 -1
  440. package/dist/esm/Transparency/UCs/SerializeTransparentObjects.js.map +1 -1
  441. package/dist/esm/zSpace/PM/ZSpaceIsEnabledPM.js +7 -6
  442. package/dist/esm/zSpace/PM/ZSpaceIsEnabledPM.js.map +1 -1
  443. package/dist/esm/zSpace/PM/ZSpaceIsEnabledPM.test.js +4 -8
  444. package/dist/esm/zSpace/PM/ZSpaceIsEnabledPM.test.js.map +1 -1
  445. package/dist/esm/zSpace/PM/ZSpaceIsSupportedPM.js +7 -6
  446. package/dist/esm/zSpace/PM/ZSpaceIsSupportedPM.js.map +1 -1
  447. package/dist/esm/zSpace/PM/ZSpaceIsSupportedPM.test.js +1 -0
  448. package/dist/esm/zSpace/PM/ZSpaceIsSupportedPM.test.js.map +1 -1
  449. package/dist/types/Babylon/PM/ShowBabylonInspectorPM.d.ts +3 -2
  450. package/dist/types/Babylon/PM/ShowBabylonInspectorPM.d.ts.map +1 -1
  451. package/dist/types/BaseApp/PM/IsAuthoringPM.d.ts +2 -2
  452. package/dist/types/BaseApp/PM/IsAuthoringPM.d.ts.map +1 -1
  453. package/dist/types/BaseApp/PM/IsReviewingPM.d.ts +2 -2
  454. package/dist/types/BaseApp/PM/IsReviewingPM.d.ts.map +1 -1
  455. package/dist/types/BaseApp/PM/SlideTextPM.d.ts +2 -2
  456. package/dist/types/BaseApp/PM/SlideTextPM.d.ts.map +1 -1
  457. package/dist/types/BaseApp/UC/SerializeBaseAppState.d.ts +1 -1
  458. package/dist/types/Callouts/Controller/MouseAddCalloutMC.d.ts +1 -1
  459. package/dist/types/Callouts/Controller/MouseAddCalloutMC.d.ts.map +1 -1
  460. package/dist/types/Callouts/Controller/TouchAddCalloutTC.d.ts +1 -1
  461. package/dist/types/Callouts/Controller/TouchAddCalloutTC.d.ts.map +1 -1
  462. package/dist/types/Callouts/UC/SerializeCallouts.d.ts +1 -1
  463. package/dist/types/Challenge/UCs/SerializeChallenge.d.ts +1 -1
  464. package/dist/types/ChannelModel/PMs/ActiveModelPM.d.ts +4 -3
  465. package/dist/types/ChannelModel/PMs/ActiveModelPM.d.ts.map +1 -1
  466. package/dist/types/ChannelModel/UC/SerializeActiveModel.d.ts +2 -2
  467. package/dist/types/Dispatcher/Entities/AppDispatcher.d.ts +1 -0
  468. package/dist/types/Dispatcher/Entities/AppDispatcher.d.ts.map +1 -1
  469. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts +1 -0
  470. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts.map +1 -1
  471. package/dist/types/Dispatcher/Mocks/GetAssetBlobURLUCMock.d.ts +1 -1
  472. package/dist/types/Dispatcher/Mocks/GetAssetBlobURLUCMock.d.ts.map +1 -1
  473. package/dist/types/Dispatcher/Mocks/GetLinkedAssetsUCMock.d.ts +1 -1
  474. package/dist/types/Dispatcher/Mocks/GetLinkedAssetsUCMock.d.ts.map +1 -1
  475. package/dist/types/Dispatcher/Mocks/MockDispatcher.d.ts +2 -2
  476. package/dist/types/Dispatcher/Mocks/MockDispatcher.d.ts.map +1 -1
  477. package/dist/types/Dispatcher/Mocks/MockGetAssetFolderURL.d.ts +1 -1
  478. package/dist/types/Dispatcher/Mocks/MockGetAssetFolderURL.d.ts.map +1 -1
  479. package/dist/types/Dispatcher/Mocks/MockShowAlert.d.ts +1 -1
  480. package/dist/types/Dispatcher/Mocks/MockShowAlert.d.ts.map +1 -1
  481. package/dist/types/Dispatcher/Mocks/MockShowConfirm.d.ts +1 -1
  482. package/dist/types/Dispatcher/Mocks/MockShowConfirm.d.ts.map +1 -1
  483. package/dist/types/Dispatcher/Mocks/MockShowMarkdown.d.ts +1 -1
  484. package/dist/types/Dispatcher/Mocks/MockShowMarkdown.d.ts.map +1 -1
  485. package/dist/types/Dispatcher/Mocks/MockShowSpinner.d.ts +1 -1
  486. package/dist/types/Dispatcher/Mocks/MockShowSpinner.d.ts.map +1 -1
  487. package/dist/types/Dispatcher/Mocks/MockSubmitResult.d.ts +5 -5
  488. package/dist/types/Dispatcher/Mocks/MockSubmitResult.d.ts.map +1 -1
  489. package/dist/types/Dispatcher/Mocks/ShowSelectModelUCMock.d.ts +4 -1
  490. package/dist/types/Dispatcher/Mocks/ShowSelectModelUCMock.d.ts.map +1 -1
  491. package/dist/types/Environment/UCs/SerializeEnvironment.d.ts +1 -1
  492. package/dist/types/Hideable/UCs/SerializeHideableObjects.d.ts +2 -2
  493. package/dist/types/HoverLabel/UseCases/SerializeAllowHoverLabel.d.ts +1 -1
  494. package/dist/types/Label/UC/SerializeCustomLabels.d.ts +1 -2
  495. package/dist/types/Label/UC/SerializeCustomLabels.d.ts.map +1 -1
  496. package/dist/types/LabelDrop/UseCases/SerializeLabelDrop.d.ts +1 -1
  497. package/dist/types/Landmarks/UseCases/SerializeLandmarks.d.ts +1 -1
  498. package/dist/types/ObjectPick/UseCases/SerializeObjectPick.d.ts +1 -1
  499. package/dist/types/OverlayColor/UC/SerializeOverlayColoredObjects.d.ts +2 -2
  500. package/dist/types/Question/UC/SerializeQuestionChallenge.d.ts +1 -1
  501. package/dist/types/RequestHandler/Entities/AppHandler.d.ts +1 -0
  502. package/dist/types/RequestHandler/Entities/AppHandler.d.ts.map +1 -1
  503. package/dist/types/RequestHandler/Factories/RequestHandlerFeatureFactory.d.ts +19 -20
  504. package/dist/types/RequestHandler/Factories/RequestHandlerFeatureFactory.d.ts.map +1 -1
  505. package/dist/types/RequestHandler/Factories/RequestHandlerFeatureFactory.test.d.ts +2 -0
  506. package/dist/types/RequestHandler/Factories/RequestHandlerFeatureFactory.test.d.ts.map +1 -0
  507. package/dist/types/RequestHandler/Mocks/MockAppHandlerEntity.d.ts +1 -0
  508. package/dist/types/RequestHandler/Mocks/MockAppHandlerEntity.d.ts.map +1 -1
  509. package/dist/types/SceneRoot/UC/SerializeSceneRoot.d.ts +1 -1
  510. package/dist/types/StateMachine/Controller/clickRestorePreviousState.d.ts +7 -0
  511. package/dist/types/StateMachine/Controller/clickRestorePreviousState.d.ts.map +1 -0
  512. package/dist/types/StateMachine/Controller/clickRestorePreviousState.test.d.ts +2 -0
  513. package/dist/types/StateMachine/Controller/clickRestorePreviousState.test.d.ts.map +1 -0
  514. package/dist/types/StateMachine/Controller/index.d.ts +1 -1
  515. package/dist/types/StateMachine/Controller/index.d.ts.map +1 -1
  516. package/dist/types/StateMachine/Entities/StateMachineEntity.d.ts +87 -2
  517. package/dist/types/StateMachine/Entities/StateMachineEntity.d.ts.map +1 -1
  518. package/dist/types/StoredView/PM/HasStoredViewPM.d.ts +2 -2
  519. package/dist/types/StoredView/PM/HasStoredViewPM.d.ts.map +1 -1
  520. package/dist/types/StoredView/UC/SerializeStoredView.d.ts +1 -1
  521. package/dist/types/Stylus/PMs/StylusIsInUsePM.d.ts +2 -2
  522. package/dist/types/Stylus/PMs/StylusIsInUsePM.d.ts.map +1 -1
  523. package/dist/types/Transform3D/UC/MoveTransformUC.d.ts +3 -3
  524. package/dist/types/Transform3D/UC/MoveTransformUC.d.ts.map +1 -1
  525. package/dist/types/Transform3D/UC/PanTransformUC.d.ts +3 -3
  526. package/dist/types/Transform3D/UC/PanTransformUC.d.ts.map +1 -1
  527. package/dist/types/Transform3D/UC/TryMoveTransformUC.d.ts +1 -1
  528. package/dist/types/Transform3D/UC/TryMoveTransformUC.d.ts.map +1 -1
  529. package/dist/types/Transform3D/UC/TryPanTransformUC.d.ts +2 -2
  530. package/dist/types/Transform3D/UC/TryPanTransformUC.d.ts.map +1 -1
  531. package/dist/types/Transparency/UCs/SerializeTransparentObjects.d.ts +2 -2
  532. package/dist/types/zSpace/PM/ZSpaceIsEnabledPM.d.ts +2 -2
  533. package/dist/types/zSpace/PM/ZSpaceIsEnabledPM.d.ts.map +1 -1
  534. package/dist/types/zSpace/PM/ZSpaceIsSupportedPM.d.ts +2 -2
  535. package/dist/types/zSpace/PM/ZSpaceIsSupportedPM.d.ts.map +1 -1
  536. package/package.json +4 -3
  537. package/src/Dispatcher/README.md +652 -0
  538. package/src/RequestHandler/README.md +790 -0
  539. package/src/StateMachine/README.md +430 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MousePressOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUCMock } from \"../Mocks/PressAppObjectUCMock\";\nimport { MousePressOnAppObject } from \"./MousePressOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new PressAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MousePressOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Mouse Press Scene Object On App Controller\", () => {\n it(\"Sends a ray to the UC when the left button is pressed\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward()\n );\n });\n\n it(\"Does not send a ray to the UC when the left button is not pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the left button is released\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttonup\"),\n };\n\n controller.onUp(event);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the mouse moves more than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx + 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Does not set pressID to null when the mouse moves less than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx - 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
1
+ {"version":3,"file":"MousePressOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAEvB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAErD,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,kBAAkB,CAAC,eAAe,GAAG,cAAc,CAAC;IAEpD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;IACvD,cAAc,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5B,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAE7B,OAAO;QACL,cAAc;QACd,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,SAAS;KACV,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CACnD,cAAc,CAAC,OAAO,EAAE,CACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC,CAAC;YACV,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAAC;QAErD,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACxB,cAAc,CAAC,kBAA+C,CAAC,SAAS,EAAE,CAAC;QAE5E,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAEzC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;SAClC,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QACF,MAAM,MAAM,GAAoB;YAC9B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACpE,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QACF,MAAM,MAAM,GAAoB;YAC9B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACpE,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAErD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAoB;YAC7B,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;SACpC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUCMock } from \"../Mocks/PressAppObjectUCMock\";\nimport { MousePressOnAppObject } from \"./MousePressOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new PressAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MousePressOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Mouse Press Scene Object On App Controller\", () => {\n it(\"Sends a ray to the UC when the left button is pressed\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward(),\n );\n });\n\n it(\"Does not send a ray to the UC when the left button is not pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the left button is released\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttonup\"),\n };\n\n controller.onUp(event);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the mouse moves more than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx + 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Does not set pressID to null when the mouse moves less than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx - 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MouseSelectAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUCMock } from \"../Mocks/SelectAppObjectUCMock\";\nimport { MouseSelectAppObject } from \"./MouseSelectAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new SelectAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MouseSelectAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Select Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on select\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward()\n );\n });\n\n it(\"Does not send a ray to the UC on click if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onClick(evt);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n});\n"]}
1
+ {"version":3,"file":"MouseSelectAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUCMock } from \"../Mocks/SelectAppObjectUCMock\";\nimport { MouseSelectAppObject } from \"./MouseSelectAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new SelectAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MouseSelectAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Select Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on select\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward(),\n );\n });\n\n it(\"Does not send a ray to the UC on click if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onClick(evt);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n});\n"]}
@@ -0,0 +1,17 @@
1
+ import { StateMachineEntity } from "../Entities";
2
+ export function clickRestorePreviousState(appObjects) {
3
+ const entity = StateMachineEntity.get(appObjects);
4
+ if (entity) {
5
+ entity.restoreLastState();
6
+ }
7
+ else {
8
+ appObjects.submitError("clickRestorePreviousState", "Unable to find StateMachineEntity");
9
+ }
10
+ }
11
+ /**
12
+ * @deprecated Use clickRestorePreviousState instead
13
+ */
14
+ export function clickRestoreScene(appObjects) {
15
+ clickRestorePreviousState(appObjects);
16
+ }
17
+ //# sourceMappingURL=clickRestorePreviousState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickRestorePreviousState.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controller/clickRestorePreviousState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,UAAyB;IACjE,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,WAAW,CACpB,2BAA2B,EAC3B,mCAAmC,CACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAyB;IACzD,yBAAyB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { AppObjectRepo } from \"@vived/core\";\nimport { StateMachineEntity } from \"../Entities\";\n\nexport function clickRestorePreviousState(appObjects: AppObjectRepo) {\n const entity = StateMachineEntity.get(appObjects);\n if (entity) {\n entity.restoreLastState();\n } else {\n appObjects.submitError(\n \"clickRestorePreviousState\",\n \"Unable to find StateMachineEntity\",\n );\n }\n}\n\n/**\n * @deprecated Use clickRestorePreviousState instead\n */\nexport function clickRestoreScene(appObjects: AppObjectRepo) {\n clickRestorePreviousState(appObjects);\n}\n"]}
@@ -0,0 +1,32 @@
1
+ import { makeAppObjectRepo } from "@vived/core";
2
+ import { makeMockStateMachine } from "../Mocks";
3
+ import { clickRestorePreviousState, clickRestoreScene, } from "./clickRestorePreviousState";
4
+ function makeTestRig() {
5
+ const appObjects = makeAppObjectRepo();
6
+ const stateMachine = makeMockStateMachine(appObjects);
7
+ return { appObjects, stateMachine };
8
+ }
9
+ describe("Click Restore Previous State", () => {
10
+ it("Calls restore on the entity", () => {
11
+ const { appObjects, stateMachine } = makeTestRig();
12
+ stateMachine.restoreLastState = jest.fn();
13
+ clickRestorePreviousState(appObjects);
14
+ expect(stateMachine.restoreLastState).toHaveBeenCalled();
15
+ });
16
+ it("Logs an error if the state machine cannot be found", () => {
17
+ const appObjects = makeAppObjectRepo();
18
+ appObjects.submitWarning = jest.fn();
19
+ appObjects.submitError = jest.fn();
20
+ clickRestorePreviousState(appObjects);
21
+ expect(appObjects.submitError).toHaveBeenCalled();
22
+ });
23
+ });
24
+ describe("Click Restore Scene (Deprecated)", () => {
25
+ it("Calls the new clickRestorePreviousState function", () => {
26
+ const { appObjects, stateMachine } = makeTestRig();
27
+ stateMachine.restoreLastState = jest.fn();
28
+ clickRestoreScene(appObjects);
29
+ expect(stateMachine.restoreLastState).toHaveBeenCalled();
30
+ });
31
+ });
32
+ //# sourceMappingURL=clickRestorePreviousState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickRestorePreviousState.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controller/clickRestorePreviousState.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAErC,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC;AAED,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;QAEnD,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1C,yBAAyB,CAAC,UAAU,CAAC,CAAC;QAEtC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QAEvC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEnC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;QAEnD,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1C,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { makeMockStateMachine } from \"../Mocks\";\nimport {\n clickRestorePreviousState,\n clickRestoreScene,\n} from \"./clickRestorePreviousState\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const stateMachine = makeMockStateMachine(appObjects);\n\n return { appObjects, stateMachine };\n}\n\ndescribe(\"Click Restore Previous State\", () => {\n it(\"Calls restore on the entity\", () => {\n const { appObjects, stateMachine } = makeTestRig();\n\n stateMachine.restoreLastState = jest.fn();\n clickRestorePreviousState(appObjects);\n\n expect(stateMachine.restoreLastState).toHaveBeenCalled();\n });\n\n it(\"Logs an error if the state machine cannot be found\", () => {\n const appObjects = makeAppObjectRepo();\n\n appObjects.submitWarning = jest.fn();\n appObjects.submitError = jest.fn();\n\n clickRestorePreviousState(appObjects);\n expect(appObjects.submitError).toHaveBeenCalled();\n });\n});\n\ndescribe(\"Click Restore Scene (Deprecated)\", () => {\n it(\"Calls the new clickRestorePreviousState function\", () => {\n const { appObjects, stateMachine } = makeTestRig();\n\n stateMachine.restoreLastState = jest.fn();\n clickRestoreScene(appObjects);\n\n expect(stateMachine.restoreLastState).toHaveBeenCalled();\n });\n});\n"]}
@@ -1,2 +1,2 @@
1
- export * from "./clickRestoreScene";
1
+ export * from "./clickRestorePreviousState";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controller/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./clickRestoreScene\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/StateMachine/Controller/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC","sourcesContent":["export * from \"./clickRestorePreviousState\";\n"]}
@@ -1,9 +1,27 @@
1
1
  import { getSingletonComponent } from "@vived/core";
2
2
  import { AppObjectEntity } from "@vived/core";
3
+ /**
4
+ * Central entity for managing application state across multiple systems.
5
+ * Coordinates saving, restoring, and transitioning between states with support for:
6
+ * - Multiple independent system states
7
+ * - Versioned serialization
8
+ * - Smooth transitions between states
9
+ * - Backwards compatibility with legacy state formats
10
+ */
3
11
  export class StateMachineEntity extends AppObjectEntity {
4
12
  }
5
13
  StateMachineEntity.type = "StateMachineEntity";
14
+ /**
15
+ * Retrieves the singleton StateMachineEntity instance from the app object repository.
16
+ * @param appObjects - The app object repository to search
17
+ * @returns The StateMachineEntity if found, undefined otherwise
18
+ */
6
19
  StateMachineEntity.get = (appObjects) => getSingletonComponent(StateMachineEntity.type, appObjects);
20
+ /**
21
+ * Factory function to create a new StateMachineEntity instance.
22
+ * @param appObject - The app object to attach the entity to
23
+ * @returns A new StateMachineEntity instance
24
+ */
7
25
  export function makeStateMachineEntity(appObject) {
8
26
  return new StateMachineImp(appObject);
9
27
  }
@@ -19,7 +37,7 @@ class StateMachineImp extends StateMachineEntity {
19
37
  constructor(appObject) {
20
38
  super(appObject, StateMachineEntity.type);
21
39
  this.serializedSystems = new Map();
22
- this.serilizationVersion = 2;
40
+ this.serializationVersion = 2;
23
41
  this.restoreDurationS = 1;
24
42
  this.transitionEaseFunction = (normalizedTime) => {
25
43
  return normalizedTime; // default to a linear function
@@ -56,14 +74,14 @@ class StateMachineImp extends StateMachineEntity {
56
74
  if (!state)
57
75
  return;
58
76
  const systemState = {
59
- seriliziationVersion: system.seriliziationVersion,
77
+ serializationVersion: system.serializationVersion,
60
78
  name: system.name,
61
79
  state,
62
80
  };
63
81
  serializedStates.push(systemState);
64
82
  });
65
83
  return {
66
- version: this.serilizationVersion,
84
+ version: this.serializationVersion,
67
85
  systems: serializedStates,
68
86
  };
69
87
  };
@@ -87,7 +105,11 @@ class StateMachineImp extends StateMachineEntity {
87
105
  this.serializedSystems.forEach((system) => {
88
106
  const systemState = systemStateLookup.get(system.name);
89
107
  if (systemState) {
90
- system.applySystemState(systemState.state, systemState.seriliziationVersion, duration);
108
+ // Support both old misspelling and new correct spelling for backwards compatibility
109
+ const version = systemState.serializationVersion ??
110
+ systemState.seriliziationVersion ??
111
+ 1;
112
+ system.applySystemState(systemState.state, version, duration);
91
113
  }
92
114
  });
93
115
  this.lastState = states;
@@ -1 +1 @@
1
- {"version":3,"file":"StateMachineEntity.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/StateMachineEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSingletonComponent } from \"@vived/core\";\nimport { AppObject } from \"@vived/core\";\nimport { AppObjectEntity } from \"@vived/core\";\nimport { AppObjectRepo } from \"@vived/core\";\n\nexport interface SerializedStates {\n version: number;\n systems: SystemState[];\n}\n\nexport interface SystemState {\n name: string;\n seriliziationVersion: number;\n state: object;\n}\n\nexport interface SerializedSystem {\n name: string;\n seriliziationVersion: number;\n\n getSystemState(): object | undefined;\n\n applySystemState(\n state: object,\n version: number,\n transitionDuration: number,\n ): void;\n\n applyDefaultState(transitionDuration: number): void;\n}\n\nexport abstract class StateMachineEntity extends AppObjectEntity {\n static readonly type = \"StateMachineEntity\";\n\n abstract restoreDurationS: number;\n abstract transitionEaseFunction: (normalizedTime: number) => number;\n\n abstract getSerializedStates(): SerializedStates;\n abstract setSerializedStates(\n state: SerializedStates,\n transitionTime: number,\n ): void;\n\n abstract applySerializedStatesString: (\n state: string,\n duration?: number,\n ) => void;\n abstract restoreLastState(): void;\n\n abstract setDefaultState(transitionTime: number): void;\n\n abstract registerSerializedSystem(serializedSystem: SerializedSystem): void;\n\n static get = (appObjects: AppObjectRepo): StateMachineEntity | undefined =>\n getSingletonComponent(StateMachineEntity.type, appObjects);\n}\n\nexport function makeStateMachineEntity(\n appObject: AppObject,\n): StateMachineEntity {\n return new StateMachineImp(appObject);\n}\n\nclass StateMachineImp extends StateMachineEntity {\n private serializedSystems = new Map<string, SerializedSystem>();\n private serilizationVersion = 2;\n\n private lastState?: SerializedStates;\n restoreDurationS = 1;\n\n public transitionEaseFunction: (normalizedTime: number) => number = (\n normalizedTime: number,\n ) => {\n return normalizedTime; // default to a linear function\n };\n\n applySerializedStatesString = (state: string, duration: number = 0) => {\n if (state === \"\") {\n this.setDefaultState(duration);\n } else {\n try {\n const stateObj = JSON.parse(state) as SerializedStates;\n this.setSerializedStates(stateObj, duration);\n } catch (e) {\n this.setDefaultState(duration);\n const errorMessage = e instanceof Error ? e.message : \"unknown error\";\n this.warn(\n `Failed to deserialize state string ${state} with Error ${errorMessage}`,\n );\n }\n }\n };\n\n restoreLastState(): void {\n if (this.lastState) {\n this.setSerializedStates(this.lastState, this.restoreDurationS);\n } else {\n this.setDefaultState(this.restoreDurationS);\n }\n }\n\n registerSerializedSystem = (serializedSystem: SerializedSystem): void => {\n if (this.serializedSystems.has(serializedSystem.name)) {\n this.warn(\n `Duplicate stateable systems encountered: ${serializedSystem.name}`,\n );\n\n return;\n }\n\n this.serializedSystems.set(serializedSystem.name, serializedSystem);\n return;\n };\n\n getSerializedStates = (): SerializedStates => {\n const systems = Array.from(this.serializedSystems.values());\n\n const serializedStates: SystemState[] = [];\n\n systems.forEach((system) => {\n const state = system.getSystemState();\n\n if (!state) return;\n\n const systemState: SystemState = {\n seriliziationVersion: system.seriliziationVersion,\n name: system.name,\n state,\n };\n\n serializedStates.push(systemState);\n });\n\n return {\n version: this.serilizationVersion,\n systems: serializedStates,\n };\n };\n\n setSerializedStates = (states: SerializedStates, duration: number): void => {\n if (states.version === 2) {\n const systemStateLookup = new Map<string, SystemState>();\n states.systems.forEach((systemState) => {\n if (this.serializedSystems.has(systemState.name)) {\n systemStateLookup.set(systemState.name, systemState);\n } else {\n this.warn(`Unable to find serializedSystem ${systemState.name}`);\n }\n });\n\n // Apply default states first\n this.serializedSystems.forEach((system) => {\n if (!systemStateLookup.has(system.name)) {\n system.applyDefaultState(duration);\n }\n });\n\n this.serializedSystems.forEach((system) => {\n const systemState = systemStateLookup.get(system.name);\n if (systemState) {\n system.applySystemState(\n systemState.state,\n systemState.seriliziationVersion,\n duration,\n );\n }\n });\n\n this.lastState = states;\n\n this.notifyOnChange();\n return;\n }\n // Here is where we will add support for future versions\n else {\n this.warn(`Unsupported serialized state encountered: ${states.version}`);\n return;\n }\n };\n\n setDefaultState = (duration: number): void => {\n this.serializedSystems.forEach((system) => {\n system.applyDefaultState(duration);\n });\n this.lastState = undefined;\n this.notifyOnChange();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StateMachineEntity.type);\n }\n}\n"]}
1
+ {"version":3,"file":"StateMachineEntity.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/StateMachineEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSingletonComponent } from \"@vived/core\";\nimport { AppObject } from \"@vived/core\";\nimport { AppObjectEntity } from \"@vived/core\";\nimport { AppObjectRepo } from \"@vived/core\";\n\n/**\n * Represents a collection of serialized system states with versioning.\n * This is the top-level structure used to save and restore application state.\n */\nexport interface SerializedStates {\n /** Version number of the serialization format */\n version: number;\n /** Array of individual system states */\n systems: SystemState[];\n}\n\n/**\n * Represents the serialized state of a single system.\n */\nexport interface SystemState {\n /** Unique name identifying the system */\n name: string;\n /**\n * Version number of this system's serialization format.\n * Note: Property name corrected from 'seriliziationVersion' but backwards compatible.\n */\n serializationVersion: number;\n /** The serialized state data for this system */\n state: object;\n}\n\n/**\n * Interface for systems that can save and restore their state.\n * Implementing classes must handle serialization and deserialization of their state.\n */\nexport interface SerializedSystem {\n /** Unique name identifying this system */\n name: string;\n /** Version number of this system's serialization format */\n serializationVersion: number;\n\n /**\n * Gets the current state of this system for serialization.\n * @returns The serialized state object, or undefined if state cannot be captured\n */\n getSystemState(): object | undefined;\n\n /**\n * Applies a previously serialized state to this system.\n * @param state - The state object to apply\n * @param version - The serialization version of the state data\n * @param transitionDuration - Duration in seconds for transitioning to the new state\n */\n applySystemState(\n state: object,\n version: number,\n transitionDuration: number,\n ): void;\n\n /**\n * Resets this system to its default state.\n * @param transitionDuration - Duration in seconds for transitioning to default state\n */\n applyDefaultState(transitionDuration: number): void;\n}\n\n/**\n * Central entity for managing application state across multiple systems.\n * Coordinates saving, restoring, and transitioning between states with support for:\n * - Multiple independent system states\n * - Versioned serialization\n * - Smooth transitions between states\n * - Backwards compatibility with legacy state formats\n */\nexport abstract class StateMachineEntity extends AppObjectEntity {\n static readonly type = \"StateMachineEntity\";\n\n /** Duration in seconds for restoring the last saved state */\n abstract restoreDurationS: number;\n /**\n * Easing function for state transitions.\n * Takes normalized time (0-1) and returns eased value (0-1).\n */\n abstract transitionEaseFunction: (normalizedTime: number) => number;\n\n /**\n * Captures the current state of all registered systems.\n * @returns Serialized states object containing all system states\n */\n abstract getSerializedStates(): SerializedStates;\n\n /**\n * Applies a collection of serialized states to registered systems.\n * @param state - The serialized states to apply\n * @param transitionTime - Duration in seconds for state transition\n */\n abstract setSerializedStates(\n state: SerializedStates,\n transitionTime: number,\n ): void;\n\n /**\n * Parses and applies a JSON string of serialized states.\n * Falls back to default state if parsing fails.\n * @param state - JSON string of SerializedStates\n * @param duration - Optional transition duration in seconds (default: 0)\n */\n abstract applySerializedStatesString: (\n state: string,\n duration?: number,\n ) => void;\n\n /**\n * Restores the most recently applied state.\n * If no state has been saved, applies default state instead.\n */\n abstract restoreLastState(): void;\n\n /**\n * Resets all registered systems to their default states.\n * @param transitionTime - Duration in seconds for state transition\n */\n abstract setDefaultState(transitionTime: number): void;\n\n /**\n * Registers a system to participate in state management.\n * @param serializedSystem - The system to register\n */\n abstract registerSerializedSystem(serializedSystem: SerializedSystem): void;\n\n /**\n * Retrieves the singleton StateMachineEntity instance from the app object repository.\n * @param appObjects - The app object repository to search\n * @returns The StateMachineEntity if found, undefined otherwise\n */\n static get = (appObjects: AppObjectRepo): StateMachineEntity | undefined =>\n getSingletonComponent(StateMachineEntity.type, appObjects);\n}\n\n/**\n * Factory function to create a new StateMachineEntity instance.\n * @param appObject - The app object to attach the entity to\n * @returns A new StateMachineEntity instance\n */\nexport function makeStateMachineEntity(\n appObject: AppObject,\n): StateMachineEntity {\n return new StateMachineImp(appObject);\n}\n\nclass StateMachineImp extends StateMachineEntity {\n private serializedSystems = new Map<string, SerializedSystem>();\n private serializationVersion = 2;\n\n private lastState?: SerializedStates;\n restoreDurationS = 1;\n\n public transitionEaseFunction: (normalizedTime: number) => number = (\n normalizedTime: number,\n ) => {\n return normalizedTime; // default to a linear function\n };\n\n applySerializedStatesString = (state: string, duration: number = 0) => {\n if (state === \"\") {\n this.setDefaultState(duration);\n } else {\n try {\n const stateObj = JSON.parse(state) as SerializedStates;\n this.setSerializedStates(stateObj, duration);\n } catch (e) {\n this.setDefaultState(duration);\n const errorMessage = e instanceof Error ? e.message : \"unknown error\";\n this.warn(\n `Failed to deserialize state string ${state} with Error ${errorMessage}`,\n );\n }\n }\n };\n\n restoreLastState(): void {\n if (this.lastState) {\n this.setSerializedStates(this.lastState, this.restoreDurationS);\n } else {\n this.setDefaultState(this.restoreDurationS);\n }\n }\n\n registerSerializedSystem = (serializedSystem: SerializedSystem): void => {\n if (this.serializedSystems.has(serializedSystem.name)) {\n this.warn(\n `Duplicate stateable systems encountered: ${serializedSystem.name}`,\n );\n\n return;\n }\n\n this.serializedSystems.set(serializedSystem.name, serializedSystem);\n return;\n };\n\n getSerializedStates = (): SerializedStates => {\n const systems = Array.from(this.serializedSystems.values());\n\n const serializedStates: SystemState[] = [];\n\n systems.forEach((system) => {\n const state = system.getSystemState();\n\n if (!state) return;\n\n const systemState: SystemState = {\n serializationVersion: system.serializationVersion,\n name: system.name,\n state,\n };\n\n serializedStates.push(systemState);\n });\n\n return {\n version: this.serializationVersion,\n systems: serializedStates,\n };\n };\n\n setSerializedStates = (states: SerializedStates, duration: number): void => {\n if (states.version === 2) {\n const systemStateLookup = new Map<string, SystemState>();\n states.systems.forEach((systemState) => {\n if (this.serializedSystems.has(systemState.name)) {\n systemStateLookup.set(systemState.name, systemState);\n } else {\n this.warn(`Unable to find serializedSystem ${systemState.name}`);\n }\n });\n\n // Apply default states first\n this.serializedSystems.forEach((system) => {\n if (!systemStateLookup.has(system.name)) {\n system.applyDefaultState(duration);\n }\n });\n\n this.serializedSystems.forEach((system) => {\n const systemState = systemStateLookup.get(system.name);\n if (systemState) {\n // Support both old misspelling and new correct spelling for backwards compatibility\n const version =\n systemState.serializationVersion ??\n (systemState as any).seriliziationVersion ??\n 1;\n system.applySystemState(systemState.state, version, duration);\n }\n });\n\n this.lastState = states;\n\n this.notifyOnChange();\n return;\n }\n // Here is where we will add support for future versions\n else {\n this.warn(`Unsupported serialized state encountered: ${states.version}`);\n return;\n }\n };\n\n setDefaultState = (duration: number): void => {\n this.serializedSystems.forEach((system) => {\n system.applyDefaultState(duration);\n });\n this.lastState = undefined;\n this.notifyOnChange();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StateMachineEntity.type);\n }\n}\n"]}
@@ -28,7 +28,7 @@ describe("State Machine Entity", () => {
28
28
  expect(state.systems).toHaveLength(2);
29
29
  const serializeState = state.systems[0];
30
30
  expect(serializeState.name).toEqual("state1");
31
- expect(serializeState.seriliziationVersion).toEqual(1);
31
+ expect(serializeState.serializationVersion).toEqual(1);
32
32
  expect(serializeState.state).toEqual({ foo: "bar" });
33
33
  });
34
34
  it("Skips a serialized state that returns undefined", () => {
@@ -48,6 +48,25 @@ describe("State Machine Entity", () => {
48
48
  foo: "bar1",
49
49
  }, 1, 3);
50
50
  });
51
+ it("Set serialized state with old misspelled property name for backwards compatibility", () => {
52
+ const { stateMachine, mockSerializedSystem1 } = makeTestRig();
53
+ const state = {
54
+ version: 2,
55
+ systems: [
56
+ {
57
+ name: "state1",
58
+ seriliziationVersion: 1,
59
+ state: {
60
+ foo: "bar1",
61
+ },
62
+ },
63
+ ],
64
+ };
65
+ stateMachine.setSerializedStates(state, 3);
66
+ expect(mockSerializedSystem1.applySystemState).toHaveBeenCalledWith({
67
+ foo: "bar1",
68
+ }, 1, 3);
69
+ });
51
70
  it("Submits an warning if trying to deserialize data with a bad version number", () => {
52
71
  const { stateMachine } = makeTestRig();
53
72
  stateMachine.warn = jest.fn();
@@ -147,14 +166,14 @@ function makeSerializedState() {
147
166
  systems: [
148
167
  {
149
168
  name: "state1",
150
- seriliziationVersion: 1,
169
+ serializationVersion: 1,
151
170
  state: {
152
171
  foo: "bar1",
153
172
  },
154
173
  },
155
174
  {
156
175
  name: "state2",
157
- seriliziationVersion: 1,
176
+ serializationVersion: 1,
158
177
  state: {
159
178
  foo: "bar2",
160
179
  },
@@ -164,7 +183,7 @@ function makeSerializedState() {
164
183
  }
165
184
  class MockSerializedSystem {
166
185
  constructor() {
167
- this.seriliziationVersion = 1;
186
+ this.serializationVersion = 1;
168
187
  this.name = "mockSystem";
169
188
  this.getSystemState = () => {
170
189
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"StateMachineEntity.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/StateMachineEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport {\n makeStateMachineEntity,\n SerializedStates,\n SerializedSystem,\n StateMachineEntity,\n} from \"./StateMachineEntity\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const appAO = appObjects.getOrCreate(\"App\");\n\n const stateMachine = makeStateMachineEntity(appAO);\n const stateAppliedObserver = jest.fn();\n stateMachine.addChangeObserver(stateAppliedObserver);\n\n const mockSerializedSystem1 = new MockSerializedSystem();\n mockSerializedSystem1.name = \"state1\";\n stateMachine.registerSerializedSystem(mockSerializedSystem1);\n\n const mockSerializedSystem2 = new MockSerializedSystem();\n mockSerializedSystem2.name = \"state2\";\n stateMachine.registerSerializedSystem(mockSerializedSystem2);\n\n return {\n stateMachine,\n mockSerializedSystem1,\n mockSerializedSystem2,\n stateAppliedObserver,\n appObjects,\n };\n}\n\ndescribe(\"State Machine Entity\", () => {\n it(\"Gets a serialized state\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = stateMachine.getSerializedStates();\n\n expect(state.version).toEqual(2);\n expect(state.systems).toHaveLength(2);\n\n const serializeState = state.systems[0] as any;\n expect(serializeState.name).toEqual(\"state1\");\n expect(serializeState.seriliziationVersion).toEqual(1);\n expect(serializeState.state).toEqual({ foo: \"bar\" });\n });\n\n it(\"Skips a serialized state that returns undefined\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n mockSerializedSystem1.getSystemState = () => {\n return undefined;\n };\n\n const state = stateMachine.getSerializedStates();\n\n expect(state.version).toEqual(2);\n expect(state.systems).toHaveLength(1);\n });\n\n it(\"Set serialized state\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n const state = makeSerializedState();\n\n stateMachine.setSerializedStates(state, 3);\n\n expect(mockSerializedSystem1.applySystemState).toHaveBeenCalledWith(\n {\n foo: \"bar1\",\n },\n 1,\n 3,\n );\n });\n\n it(\"Submits an warning if trying to deserialize data with a bad version number\", () => {\n const { stateMachine } = makeTestRig();\n stateMachine.warn = jest.fn();\n const state: SerializedStates = {\n version: -1,\n systems: [],\n };\n\n stateMachine.setSerializedStates(state, 0);\n\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Sets an empty state\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n stateMachine.setDefaultState(3);\n\n expect(mockSerializedSystem1.applyDefaultState).toHaveBeenCalledWith(3);\n });\n\n it(\"Logs an error if adding two systems with the same name\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n stateMachine.warn = jest.fn();\n stateMachine.registerSerializedSystem(mockSerializedSystem1);\n\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Sets the default state and warns when passing in junk\", () => {\n const { mockSerializedSystem1, stateMachine } = makeTestRig();\n stateMachine.warn = jest.fn();\n stateMachine.applySerializedStatesString(\"your mom goes to college\", 5);\n\n expect(mockSerializedSystem1.applyDefaultState).toHaveBeenCalledWith(5);\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Set to default if a system is not in the saved state \", () => {\n const { stateMachine } = makeTestRig();\n const state = makeSerializedState();\n\n const secondSystem = new MockSerializedSystem();\n secondSystem.name = \"second system\";\n stateMachine.registerSerializedSystem(secondSystem);\n\n stateMachine.setSerializedStates(state, 3);\n\n expect(secondSystem.applyDefaultState).toHaveBeenCalledWith(3);\n });\n\n it(\"Notifies after a state has been applied\", () => {\n const { stateMachine, stateAppliedObserver } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n expect(stateAppliedObserver).toHaveBeenCalled();\n });\n\n it(\"Notifies after an empty state has been set\", () => {\n const { stateMachine, stateAppliedObserver } = makeTestRig();\n\n stateMachine.setDefaultState(3);\n\n expect(stateAppliedObserver).toHaveBeenCalled();\n });\n\n it(\"Gets the entity\", () => {\n const { stateMachine, appObjects } = makeTestRig();\n\n expect(StateMachineEntity.get(appObjects)).toEqual(stateMachine);\n });\n\n it(\"Set serialized state in the order that they are added\", () => {\n const { stateMachine, mockSerializedSystem1, mockSerializedSystem2 } =\n makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n const system1Order =\n mockSerializedSystem1.applySystemState.mock.invocationCallOrder[0];\n const system2Order =\n mockSerializedSystem2.applySystemState.mock.invocationCallOrder[0];\n\n expect(system1Order).toBeLessThan(system2Order);\n });\n\n it(\"Sets the default before setting states\", () => {\n const { stateMachine, mockSerializedSystem1, mockSerializedSystem2 } =\n makeTestRig();\n\n const state = makeSerializedState();\n state.systems = [state.systems[0]]; // Removed state 2 data\n\n stateMachine.setSerializedStates(state, 3);\n\n const setSystemOrder =\n mockSerializedSystem1.applySystemState.mock.invocationCallOrder[0];\n\n const setDefaultOrder =\n mockSerializedSystem2.applyDefaultState.mock.invocationCallOrder[0];\n\n expect(setDefaultOrder).toBeLessThan(setSystemOrder);\n });\n\n it(\"Restores the last state\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n stateMachine.setSerializedStates = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setSerializedStates).toHaveBeenCalledWith(\n state,\n stateMachine.restoreDurationS,\n );\n });\n\n it(\"Sets it to default if restore is called before a state is set\", () => {\n const { stateMachine } = makeTestRig();\n\n stateMachine.setDefaultState = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setDefaultState).toHaveBeenCalled();\n });\n\n it(\"Sets it to default if restore is called after a state is set and the default is set\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n stateMachine.setDefaultState(5);\n\n stateMachine.setDefaultState = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setDefaultState).toHaveBeenCalled();\n });\n});\n\nfunction makeSerializedState(): SerializedStates {\n return {\n version: 2,\n systems: [\n {\n name: \"state1\",\n seriliziationVersion: 1,\n state: {\n foo: \"bar1\",\n },\n },\n {\n name: \"state2\",\n seriliziationVersion: 1,\n state: {\n foo: \"bar2\",\n },\n },\n ],\n };\n}\n\nclass MockSerializedSystem implements SerializedSystem {\n seriliziationVersion = 1;\n\n public name = \"mockSystem\";\n\n getSystemState = (): object | undefined => {\n return {\n foo: \"bar\",\n };\n };\n\n applyDefaultState = jest.fn();\n\n applySystemState = jest.fn();\n}\n"]}
1
+ {"version":3,"file":"StateMachineEntity.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/StateMachineEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport {\n makeStateMachineEntity,\n SerializedStates,\n SerializedSystem,\n StateMachineEntity,\n} from \"./StateMachineEntity\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const appAO = appObjects.getOrCreate(\"App\");\n\n const stateMachine = makeStateMachineEntity(appAO);\n const stateAppliedObserver = jest.fn();\n stateMachine.addChangeObserver(stateAppliedObserver);\n\n const mockSerializedSystem1 = new MockSerializedSystem();\n mockSerializedSystem1.name = \"state1\";\n stateMachine.registerSerializedSystem(mockSerializedSystem1);\n\n const mockSerializedSystem2 = new MockSerializedSystem();\n mockSerializedSystem2.name = \"state2\";\n stateMachine.registerSerializedSystem(mockSerializedSystem2);\n\n return {\n stateMachine,\n mockSerializedSystem1,\n mockSerializedSystem2,\n stateAppliedObserver,\n appObjects,\n };\n}\n\ndescribe(\"State Machine Entity\", () => {\n it(\"Gets a serialized state\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = stateMachine.getSerializedStates();\n\n expect(state.version).toEqual(2);\n expect(state.systems).toHaveLength(2);\n\n const serializeState = state.systems[0] as any;\n expect(serializeState.name).toEqual(\"state1\");\n expect(serializeState.serializationVersion).toEqual(1);\n expect(serializeState.state).toEqual({ foo: \"bar\" });\n });\n\n it(\"Skips a serialized state that returns undefined\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n mockSerializedSystem1.getSystemState = () => {\n return undefined;\n };\n\n const state = stateMachine.getSerializedStates();\n\n expect(state.version).toEqual(2);\n expect(state.systems).toHaveLength(1);\n });\n\n it(\"Set serialized state\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n const state = makeSerializedState();\n\n stateMachine.setSerializedStates(state, 3);\n\n expect(mockSerializedSystem1.applySystemState).toHaveBeenCalledWith(\n {\n foo: \"bar1\",\n },\n 1,\n 3,\n );\n });\n\n it(\"Set serialized state with old misspelled property name for backwards compatibility\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n const state: SerializedStates = {\n version: 2,\n systems: [\n {\n name: \"state1\",\n seriliziationVersion: 1,\n state: {\n foo: \"bar1\",\n },\n } as any,\n ],\n };\n\n stateMachine.setSerializedStates(state, 3);\n\n expect(mockSerializedSystem1.applySystemState).toHaveBeenCalledWith(\n {\n foo: \"bar1\",\n },\n 1,\n 3,\n );\n });\n\n it(\"Submits an warning if trying to deserialize data with a bad version number\", () => {\n const { stateMachine } = makeTestRig();\n stateMachine.warn = jest.fn();\n const state: SerializedStates = {\n version: -1,\n systems: [],\n };\n\n stateMachine.setSerializedStates(state, 0);\n\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Sets an empty state\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n\n stateMachine.setDefaultState(3);\n\n expect(mockSerializedSystem1.applyDefaultState).toHaveBeenCalledWith(3);\n });\n\n it(\"Logs an error if adding two systems with the same name\", () => {\n const { stateMachine, mockSerializedSystem1 } = makeTestRig();\n stateMachine.warn = jest.fn();\n stateMachine.registerSerializedSystem(mockSerializedSystem1);\n\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Sets the default state and warns when passing in junk\", () => {\n const { mockSerializedSystem1, stateMachine } = makeTestRig();\n stateMachine.warn = jest.fn();\n stateMachine.applySerializedStatesString(\"your mom goes to college\", 5);\n\n expect(mockSerializedSystem1.applyDefaultState).toHaveBeenCalledWith(5);\n expect(stateMachine.warn).toHaveBeenCalled();\n });\n\n it(\"Set to default if a system is not in the saved state \", () => {\n const { stateMachine } = makeTestRig();\n const state = makeSerializedState();\n\n const secondSystem = new MockSerializedSystem();\n secondSystem.name = \"second system\";\n stateMachine.registerSerializedSystem(secondSystem);\n\n stateMachine.setSerializedStates(state, 3);\n\n expect(secondSystem.applyDefaultState).toHaveBeenCalledWith(3);\n });\n\n it(\"Notifies after a state has been applied\", () => {\n const { stateMachine, stateAppliedObserver } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n expect(stateAppliedObserver).toHaveBeenCalled();\n });\n\n it(\"Notifies after an empty state has been set\", () => {\n const { stateMachine, stateAppliedObserver } = makeTestRig();\n\n stateMachine.setDefaultState(3);\n\n expect(stateAppliedObserver).toHaveBeenCalled();\n });\n\n it(\"Gets the entity\", () => {\n const { stateMachine, appObjects } = makeTestRig();\n\n expect(StateMachineEntity.get(appObjects)).toEqual(stateMachine);\n });\n\n it(\"Set serialized state in the order that they are added\", () => {\n const { stateMachine, mockSerializedSystem1, mockSerializedSystem2 } =\n makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n const system1Order =\n mockSerializedSystem1.applySystemState.mock.invocationCallOrder[0];\n const system2Order =\n mockSerializedSystem2.applySystemState.mock.invocationCallOrder[0];\n\n expect(system1Order).toBeLessThan(system2Order);\n });\n\n it(\"Sets the default before setting states\", () => {\n const { stateMachine, mockSerializedSystem1, mockSerializedSystem2 } =\n makeTestRig();\n\n const state = makeSerializedState();\n state.systems = [state.systems[0]]; // Removed state 2 data\n\n stateMachine.setSerializedStates(state, 3);\n\n const setSystemOrder =\n mockSerializedSystem1.applySystemState.mock.invocationCallOrder[0];\n\n const setDefaultOrder =\n mockSerializedSystem2.applyDefaultState.mock.invocationCallOrder[0];\n\n expect(setDefaultOrder).toBeLessThan(setSystemOrder);\n });\n\n it(\"Restores the last state\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n\n stateMachine.setSerializedStates = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setSerializedStates).toHaveBeenCalledWith(\n state,\n stateMachine.restoreDurationS,\n );\n });\n\n it(\"Sets it to default if restore is called before a state is set\", () => {\n const { stateMachine } = makeTestRig();\n\n stateMachine.setDefaultState = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setDefaultState).toHaveBeenCalled();\n });\n\n it(\"Sets it to default if restore is called after a state is set and the default is set\", () => {\n const { stateMachine } = makeTestRig();\n\n const state = makeSerializedState();\n stateMachine.setSerializedStates(state, 3);\n stateMachine.setDefaultState(5);\n\n stateMachine.setDefaultState = jest.fn();\n\n stateMachine.restoreLastState();\n\n expect(stateMachine.setDefaultState).toHaveBeenCalled();\n });\n});\n\nfunction makeSerializedState(): SerializedStates {\n return {\n version: 2,\n systems: [\n {\n name: \"state1\",\n serializationVersion: 1,\n state: {\n foo: \"bar1\",\n },\n },\n {\n name: \"state2\",\n serializationVersion: 1,\n state: {\n foo: \"bar2\",\n },\n },\n ],\n };\n}\n\nclass MockSerializedSystem implements SerializedSystem {\n serializationVersion = 1;\n\n public name = \"mockSystem\";\n\n getSystemState = (): object | undefined => {\n return {\n foo: \"bar\",\n };\n };\n\n applyDefaultState = jest.fn();\n\n applySystemState = jest.fn();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TryStickAppObjectUC.test.js","sourceRoot":"","sources":["../../../../src/Stick/UCs/TryStickAppObjectUC.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { ParametricLine, Vector2, Vector3 } from \"@vived/core\";\nimport {\n makeMockScenePixelPickUC,\n makeMockSceneRayPickUC,\n} from \"../../Babylon\";\nimport { makeToolRepo, ToolState } from \"../../Tools\";\nimport { StickUCMock } from \"../Mocks/StickUCMock\";\nimport {\n makeTryStickAppObjectUC,\n TryStickAppObjectUC,\n} from \"./TryStickAppObjectUC\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const registerSingleton = jest.spyOn(appObjects, \"registerSingleton\");\n\n const ao = appObjects.getOrCreate(\"AO\");\n const uc = makeTryStickAppObjectUC(ao);\n\n const stickableObj = appObjects.getOrCreate(\"stickableObj\");\n const mockHideUC = new StickUCMock(stickableObj);\n\n const mockRayPick = makeMockSceneRayPickUC(appObjects);\n const mockPick = jest.fn().mockReturnValue({ appObjectID: \"stickableObj\" });\n mockRayPick.sceneRayPick = mockPick;\n\n const mockPixelPick = makeMockScenePixelPickUC(appObjects);\n mockPixelPick.scenePixelPick = jest\n .fn()\n .mockReturnValue({ appObjectID: \"stickableObj\" });\n\n const toolRepo = makeToolRepo(appObjects.getOrCreate(\"Tool\"));\n const peelTool = toolRepo.makeTool(\"PEEL\");\n peelTool.state = ToolState.ACTIVE;\n\n return {\n appObjects,\n ao,\n mockHideUC,\n uc,\n registerSingleton,\n mockPick,\n mockPixelPick,\n peelTool,\n };\n}\n\ndescribe(\"Try Stick UC\", () => {\n it(\"Gets the singleton\", () => {\n const { appObjects, uc } = makeTestRig();\n\n expect(TryStickAppObjectUC.get(appObjects)).toEqual(uc);\n });\n\n it(\"Registers as the singleton\", () => {\n const { registerSingleton, uc } = makeTestRig();\n\n expect(registerSingleton).toHaveBeenCalledWith(uc);\n });\n\n it(\"Picks with the ray\", () => {\n const { uc, mockPick } = makeTestRig();\n\n const pickRay = ParametricLine.FromPointDirection(\n new Vector3(1, 2, 3),\n new Vector3(4, 5, 6)\n );\n\n uc.tryWithRay(pickRay);\n\n expect(mockPick).toHaveBeenCalledWith(pickRay);\n });\n\n it(\"Calls the UC\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(mockHideUC.doStick).toHaveBeenCalled();\n });\n\n it(\"Does not call on ray pick if not allowed\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.allow = () => {\n return false;\n };\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(mockHideUC.doStick).not.toHaveBeenCalled();\n });\n\n it(\"Doesn't warn if the picked object does not have the UC\", () => {\n const { uc, mockPick, appObjects } = makeTestRig();\n\n appObjects.submitWarning = jest.fn();\n appObjects.getOrCreate(\"SomeOtherObject\");\n mockPick.mockReturnValue({\n appObjectID: \"SomeOtherObject\",\n });\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(appObjects.submitWarning).not.toHaveBeenCalled();\n });\n\n it(\"Picks with a pixel\", () => {\n const { uc, mockPixelPick } = makeTestRig();\n\n const pickPixel = new Vector2(1, 2);\n\n uc.tryWithPixel(pickPixel);\n\n expect(mockPixelPick.scenePixelPick).toHaveBeenCalledWith(pickPixel);\n });\n\n it(\"Calls the UC with a pixel pick\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.tryWithPixel(Vector2.One());\n\n expect(mockHideUC.doStick).toHaveBeenCalled();\n });\n\n it(\"Does not call on pixel pick if not allowed\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.allow = () => {\n return false;\n };\n\n uc.tryWithPixel(Vector2.One());\n\n expect(mockHideUC.doStick).not.toHaveBeenCalled();\n });\n\n it(\"Allows if the peel tool is active\", () => {\n const { uc, peelTool } = makeTestRig();\n\n peelTool.state = ToolState.ACTIVE;\n\n expect(uc.allow()).toEqual(true);\n\n peelTool.state = ToolState.ENABLED;\n\n expect(uc.allow()).toEqual(false);\n });\n});\n"]}
1
+ {"version":3,"file":"TryStickAppObjectUC.test.js","sourceRoot":"","sources":["../../../../src/Stick/UCs/TryStickAppObjectUC.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { ParametricLine, Vector2, Vector3 } from \"@vived/core\";\nimport {\n makeMockScenePixelPickUC,\n makeMockSceneRayPickUC,\n} from \"../../Babylon\";\nimport { makeToolRepo, ToolState } from \"../../Tools\";\nimport { StickUCMock } from \"../Mocks/StickUCMock\";\nimport {\n makeTryStickAppObjectUC,\n TryStickAppObjectUC,\n} from \"./TryStickAppObjectUC\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const registerSingleton = jest.spyOn(appObjects, \"registerSingleton\");\n\n const ao = appObjects.getOrCreate(\"AO\");\n const uc = makeTryStickAppObjectUC(ao);\n\n const stickableObj = appObjects.getOrCreate(\"stickableObj\");\n const mockHideUC = new StickUCMock(stickableObj);\n\n const mockRayPick = makeMockSceneRayPickUC(appObjects);\n const mockPick = jest.fn().mockReturnValue({ appObjectID: \"stickableObj\" });\n mockRayPick.sceneRayPick = mockPick;\n\n const mockPixelPick = makeMockScenePixelPickUC(appObjects);\n mockPixelPick.scenePixelPick = jest\n .fn()\n .mockReturnValue({ appObjectID: \"stickableObj\" });\n\n const toolRepo = makeToolRepo(appObjects.getOrCreate(\"Tool\"));\n const peelTool = toolRepo.makeTool(\"PEEL\");\n peelTool.state = ToolState.ACTIVE;\n\n return {\n appObjects,\n ao,\n mockHideUC,\n uc,\n registerSingleton,\n mockPick,\n mockPixelPick,\n peelTool,\n };\n}\n\ndescribe(\"Try Stick UC\", () => {\n it(\"Gets the singleton\", () => {\n const { appObjects, uc } = makeTestRig();\n\n expect(TryStickAppObjectUC.get(appObjects)).toEqual(uc);\n });\n\n it(\"Registers as the singleton\", () => {\n const { registerSingleton, uc } = makeTestRig();\n\n expect(registerSingleton).toHaveBeenCalledWith(uc);\n });\n\n it(\"Picks with the ray\", () => {\n const { uc, mockPick } = makeTestRig();\n\n const pickRay = ParametricLine.FromPointDirection(\n new Vector3(1, 2, 3),\n new Vector3(4, 5, 6),\n );\n\n uc.tryWithRay(pickRay);\n\n expect(mockPick).toHaveBeenCalledWith(pickRay);\n });\n\n it(\"Calls the UC\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(mockHideUC.doStick).toHaveBeenCalled();\n });\n\n it(\"Does not call on ray pick if not allowed\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.allow = () => {\n return false;\n };\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(mockHideUC.doStick).not.toHaveBeenCalled();\n });\n\n it(\"Doesn't warn if the picked object does not have the UC\", () => {\n const { uc, mockPick, appObjects } = makeTestRig();\n\n appObjects.submitWarning = jest.fn();\n appObjects.getOrCreate(\"SomeOtherObject\");\n mockPick.mockReturnValue({\n appObjectID: \"SomeOtherObject\",\n });\n\n uc.tryWithRay(ParametricLine.Forward());\n\n expect(appObjects.submitWarning).not.toHaveBeenCalled();\n });\n\n it(\"Picks with a pixel\", () => {\n const { uc, mockPixelPick } = makeTestRig();\n\n const pickPixel = new Vector2(1, 2);\n\n uc.tryWithPixel(pickPixel);\n\n expect(mockPixelPick.scenePixelPick).toHaveBeenCalledWith(pickPixel);\n });\n\n it(\"Calls the UC with a pixel pick\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.tryWithPixel(Vector2.One());\n\n expect(mockHideUC.doStick).toHaveBeenCalled();\n });\n\n it(\"Does not call on pixel pick if not allowed\", () => {\n const { uc, mockHideUC } = makeTestRig();\n\n uc.allow = () => {\n return false;\n };\n\n uc.tryWithPixel(Vector2.One());\n\n expect(mockHideUC.doStick).not.toHaveBeenCalled();\n });\n\n it(\"Allows if the peel tool is active\", () => {\n const { uc, peelTool } = makeTestRig();\n\n peelTool.state = ToolState.ACTIVE;\n\n expect(uc.allow()).toEqual(true);\n\n peelTool.state = ToolState.ENABLED;\n\n expect(uc.allow()).toEqual(false);\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
- import { AppObjectPM, getSingletonComponent, } from "@vived/core";
1
+ import { AppObjectSingletonPM, getSingletonComponent, } from "@vived/core";
2
2
  import { StoredView } from "../Entities";
3
- export class HasStoredViewPM extends AppObjectPM {
3
+ export class HasStoredViewPM extends AppObjectSingletonPM {
4
4
  }
5
5
  HasStoredViewPM.type = "HasStoredViewPM";
6
6
  HasStoredViewPM.get = (appObjects) => getSingletonComponent(HasStoredViewPM.type, appObjects);
@@ -16,19 +16,15 @@ class HasStoredViewPMImp extends HasStoredViewPM {
16
16
  }
17
17
  constructor(appObject) {
18
18
  super(appObject, HasStoredViewPM.type);
19
- this.onRepoChange = () => {
19
+ this.defaultVM = false;
20
+ this.formVM = () => {
20
21
  if (!this.storedView)
21
22
  return;
22
23
  this.doUpdateView(this.storedView.hasStoredView);
23
24
  };
24
- this.dispose = () => {
25
- super.dispose();
26
- this.storedView?.removeChangeObserver(this.onRepoChange);
27
- this.storedView?.removeOnDisposeObserver(this.dispose);
28
- };
29
- this.storedView?.addChangeObserver(this.onRepoChange);
30
- this.onRepoChange();
31
- this.appObjects.registerSingleton(this);
25
+ if (this.storedView) {
26
+ this.observeEntity(this.storedView);
27
+ }
32
28
  }
33
29
  }
34
30
  //# sourceMappingURL=HasStoredViewPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HasStoredViewPM.js","sourceRoot":"","sources":["../../../../src/StoredView/PM/HasStoredViewPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAgB,eAAgB,SAAQ,WAAoB;;AAChD,oBAAI,GAAG,iBAAiB,CAAC;AAElC,mBAAG,GAAG,CAAC,UAAyB,EAA+B,EAAE,CACtE,qBAAqB,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAG5D,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAC9C,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAa,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAaD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAZzC,iBAAY,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,YAAO,GAAG,GAAS,EAAE;YACnB,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectPM,\n AppObjectRepo,\n getSingletonComponent,\n} from \"@vived/core\";\nimport { StoredView } from \"../Entities\";\n\nexport abstract class HasStoredViewPM extends AppObjectPM<boolean> {\n static readonly type = \"HasStoredViewPM\";\n\n static get = (appObjects: AppObjectRepo): HasStoredViewPM | undefined =>\n getSingletonComponent(HasStoredViewPM.type, appObjects);\n}\n\nexport function makeHasStoredViewPM(appObject: AppObject): HasStoredViewPM {\n return new HasStoredViewPMImp(appObject);\n}\n\nclass HasStoredViewPMImp extends HasStoredViewPM {\n private get storedView() {\n return this.getCachedSingleton<StoredView>(StoredView.type);\n }\n\n vmsAreEqual(a: boolean, b: boolean): boolean {\n return a === b;\n }\n\n onRepoChange = () => {\n if (!this.storedView) return;\n this.doUpdateView(this.storedView.hasStoredView);\n };\n\n dispose = (): void => {\n super.dispose();\n this.storedView?.removeChangeObserver(this.onRepoChange);\n this.storedView?.removeOnDisposeObserver(this.dispose);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, HasStoredViewPM.type);\n\n this.storedView?.addChangeObserver(this.onRepoChange);\n this.onRepoChange();\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
1
+ {"version":3,"file":"HasStoredViewPM.js","sourceRoot":"","sources":["../../../../src/StoredView/PM/HasStoredViewPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAEpB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAgB,eAAgB,SAAQ,oBAA6B;;AACzD,oBAAI,GAAG,iBAAiB,CAAC;AAElC,mBAAG,GAAG,CAAC,UAAyB,EAA+B,EAAE,CACtE,qBAAqB,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAG5D,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAG9C,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAa,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAhBzC,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectSingletonPM,\n AppObjectRepo,\n getSingletonComponent,\n} from \"@vived/core\";\nimport { StoredView } from \"../Entities\";\n\nexport abstract class HasStoredViewPM extends AppObjectSingletonPM<boolean> {\n static readonly type = \"HasStoredViewPM\";\n\n static get = (appObjects: AppObjectRepo): HasStoredViewPM | undefined =>\n getSingletonComponent(HasStoredViewPM.type, appObjects);\n}\n\nexport function makeHasStoredViewPM(appObject: AppObject): HasStoredViewPM {\n return new HasStoredViewPMImp(appObject);\n}\n\nclass HasStoredViewPMImp extends HasStoredViewPM {\n defaultVM = false;\n\n private get storedView() {\n return this.getCachedSingleton<StoredView>(StoredView.type);\n }\n\n vmsAreEqual(a: boolean, b: boolean): boolean {\n return a === b;\n }\n\n formVM = (): void => {\n if (!this.storedView) return;\n this.doUpdateView(this.storedView.hasStoredView);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, HasStoredViewPM.type);\n\n if (this.storedView) {\n this.observeEntity(this.storedView);\n }\n }\n}\n"]}
@@ -8,6 +8,7 @@ function makeTestRig() {
8
8
  makeSceneRootEntity(ao);
9
9
  const storedView = makeStoredView(ao);
10
10
  const pm = makeHasStoredViewPM(ao);
11
+ pm.addView(() => { });
11
12
  return { storedView, pm, appObjects };
12
13
  }
13
14
  describe("Has Stored View Presentation Manager", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"HasStoredViewPM.test.js","sourceRoot":"","sources":["../../../../src/StoredView/PM/HasStoredViewPM.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;QACjC,UAAU,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;QAChC,UAAU,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { makeSceneRootEntity } from \"../../SceneRoot\";\nimport { makeStoredView } from \"../Entities\";\nimport { HasStoredViewPM, makeHasStoredViewPM } from \"./HasStoredViewPM\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const ao = appObjects.getOrCreate(\"Scene Root\");\n makeSceneRootEntity(ao);\n const storedView = makeStoredView(ao);\n const pm = makeHasStoredViewPM(ao);\n return { storedView, pm, appObjects };\n}\n\ndescribe(\"Has Stored View Presentation Manager\", () => {\n it(\"Initializes the VM\", () => {\n const { pm } = makeTestRig();\n const lastVM = pm.lastVM;\n\n expect(lastVM).toEqual(false);\n });\n\n it(\"Sets the show based on the is rendering flag\", () => {\n const { pm, storedView } = makeTestRig();\n\n storedView.hasStoredView = false;\n storedView.notifyOnChange();\n\n expect(pm.lastVM).toEqual(false);\n\n storedView.hasStoredView = true;\n storedView.notifyOnChange();\n\n expect(pm.lastVM).toEqual(true);\n });\n\n it(\"Checks for equal vms\", () => {\n const { pm } = makeTestRig();\n expect(pm.vmsAreEqual(true, true)).toEqual(true);\n expect(pm.vmsAreEqual(false, false)).toEqual(true);\n });\n\n it(\"Checks for a change in the VM\", () => {\n const { pm } = makeTestRig();\n expect(pm.vmsAreEqual(true, false)).toEqual(false);\n expect(pm.vmsAreEqual(false, true)).toEqual(false);\n });\n\n it(\"Gets the PM\", () => {\n const { pm, appObjects } = makeTestRig();\n\n expect(HasStoredViewPM.get(appObjects)).toEqual(pm);\n });\n});\n"]}
1
+ {"version":3,"file":"HasStoredViewPM.test.js","sourceRoot":"","sources":["../../../../src/StoredView/PM/HasStoredViewPM.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACnC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAEzB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;QACjC,UAAU,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;QAChC,UAAU,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { makeSceneRootEntity } from \"../../SceneRoot\";\nimport { makeStoredView } from \"../Entities\";\nimport { HasStoredViewPM, makeHasStoredViewPM } from \"./HasStoredViewPM\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const ao = appObjects.getOrCreate(\"Scene Root\");\n makeSceneRootEntity(ao);\n const storedView = makeStoredView(ao);\n const pm = makeHasStoredViewPM(ao);\n pm.addView(() => {});\n return { storedView, pm, appObjects };\n}\n\ndescribe(\"Has Stored View Presentation Manager\", () => {\n it(\"Initializes the VM\", () => {\n const { pm } = makeTestRig();\n const lastVM = pm.lastVM;\n\n expect(lastVM).toEqual(false);\n });\n\n it(\"Sets the show based on the is rendering flag\", () => {\n const { pm, storedView } = makeTestRig();\n\n storedView.hasStoredView = false;\n storedView.notifyOnChange();\n\n expect(pm.lastVM).toEqual(false);\n\n storedView.hasStoredView = true;\n storedView.notifyOnChange();\n\n expect(pm.lastVM).toEqual(true);\n });\n\n it(\"Checks for equal vms\", () => {\n const { pm } = makeTestRig();\n expect(pm.vmsAreEqual(true, true)).toEqual(true);\n expect(pm.vmsAreEqual(false, false)).toEqual(true);\n });\n\n it(\"Checks for a change in the VM\", () => {\n const { pm } = makeTestRig();\n expect(pm.vmsAreEqual(true, false)).toEqual(false);\n expect(pm.vmsAreEqual(false, true)).toEqual(false);\n });\n\n it(\"Gets the PM\", () => {\n const { pm, appObjects } = makeTestRig();\n\n expect(HasStoredViewPM.get(appObjects)).toEqual(pm);\n });\n});\n"]}
@@ -76,7 +76,7 @@ class SerializeStoredViewImp extends SerializeStoredView {
76
76
  }
77
77
  constructor(appObject) {
78
78
  super(appObject, SerializeStoredView.type);
79
- this.seriliziationVersion = 1;
79
+ this.serializationVersion = 1;
80
80
  const stateMachine = StateMachineEntity.get(appObject.appObjectRepo);
81
81
  if (stateMachine) {
82
82
  stateMachine.registerSerializedSystem(this);
@@ -1 +1 @@
1
- {"version":3,"file":"SerializeStoredView.js","sourceRoot":"","sources":["../../../../src/StoredView/UC/SerializeStoredView.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\nimport { Quaternion, Vector3 } from \"@vived/core\";\nimport {\n SerializedSystem,\n StateMachineEntity,\n} from \"../../StateMachine/Entities/StateMachineEntity\";\nimport { StoredView } from \"../Entities/StoredView\";\nimport { RestoreStoredViewUC } from \"./RestoreStoredViewUC\";\n\nexport abstract class SerializeStoredView\n extends AppObjectUC\n implements SerializedSystem\n{\n static readonly type = \"SerializeStoredView\";\n name: string = \"storedView\";\n abstract seriliziationVersion: number;\n abstract getSystemState(): object;\n abstract applySystemState(state: object, version: number): void;\n abstract applyDefaultState(transitionDuration: number): void;\n}\n\nexport function makeSerializeStoredView(\n appObject: AppObject,\n): SerializeStoredView {\n return new SerializeStoredViewImp(appObject);\n}\n\nclass SerializeStoredViewImp extends SerializeStoredView {\n seriliziationVersion = 1;\n\n private get storedView() {\n return this.getCachedSingleton<StoredView>(StoredView.type);\n }\n\n private get restoreStoredViewUC() {\n return this.getCachedSingleton<RestoreStoredViewUC>(\n RestoreStoredViewUC.type,\n );\n }\n\n getSystemState(): object {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return {};\n }\n\n const data: StoredViewDataV1 = {\n position: this.storedView.position.dto,\n rotation: this.storedView.rotation.dto,\n scale: this.storedView.scale,\n hasStoredView: this.storedView.hasStoredView,\n };\n\n return data;\n }\n\n applySystemState(serializedState: object, version: number): void {\n try {\n if (version === 1) {\n const castState = serializedState as StoredViewDataV1;\n this.applyV1Data(castState);\n } else {\n console.warn(\n `[SerializeStoredView] Unsupported version number ${version}. Defaulting`,\n );\n this.applyDefaultState();\n }\n } catch (e) {\n console.warn(\n `[SerializeStoredView] Caught when deserializing ${e}. Defaulting`,\n );\n this.applyDefaultState();\n }\n }\n\n applyDefaultState(): void {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return;\n }\n\n this.storedView.position = Vector3.Zero();\n this.storedView.rotation = Quaternion.Identity();\n this.storedView.scale = 1;\n this.storedView.hasStoredView = false;\n }\n\n private applyV1Data(data: StoredViewDataV1) {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return;\n }\n\n const pos = Vector3.FromDTO(data.position);\n const rot = Quaternion.FromDTO(data.rotation);\n\n this.storedView.position = pos;\n this.storedView.rotation = rot;\n this.storedView.scale = data.scale;\n this.storedView.hasStoredView = data.hasStoredView;\n\n if (data.hasStoredView) {\n this.restoreStoredViewUC?.restoreStoredView();\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SerializeStoredView.type);\n\n const stateMachine = StateMachineEntity.get(appObject.appObjectRepo);\n if (stateMachine) {\n stateMachine.registerSerializedSystem(this);\n } else {\n this.warn(\"Unable to find StateMachineEntity\");\n }\n }\n}\n\nexport interface StoredViewDataV1 {\n position: { x: number; y: number; z: number };\n rotation: { x: number; y: number; z: number; w: number };\n scale: number;\n hasStoredView: boolean;\n}\n"]}
1
+ {"version":3,"file":"SerializeStoredView.js","sourceRoot":"","sources":["../../../../src/StoredView/UC/SerializeStoredView.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\nimport { Quaternion, Vector3 } from \"@vived/core\";\nimport {\n SerializedSystem,\n StateMachineEntity,\n} from \"../../StateMachine/Entities/StateMachineEntity\";\nimport { StoredView } from \"../Entities/StoredView\";\nimport { RestoreStoredViewUC } from \"./RestoreStoredViewUC\";\n\nexport abstract class SerializeStoredView\n extends AppObjectUC\n implements SerializedSystem\n{\n static readonly type = \"SerializeStoredView\";\n name: string = \"storedView\";\n abstract serializationVersion: number;\n abstract getSystemState(): object;\n abstract applySystemState(state: object, version: number): void;\n abstract applyDefaultState(transitionDuration: number): void;\n}\n\nexport function makeSerializeStoredView(\n appObject: AppObject,\n): SerializeStoredView {\n return new SerializeStoredViewImp(appObject);\n}\n\nclass SerializeStoredViewImp extends SerializeStoredView {\n serializationVersion = 1;\n\n private get storedView() {\n return this.getCachedSingleton<StoredView>(StoredView.type);\n }\n\n private get restoreStoredViewUC() {\n return this.getCachedSingleton<RestoreStoredViewUC>(\n RestoreStoredViewUC.type,\n );\n }\n\n getSystemState(): object {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return {};\n }\n\n const data: StoredViewDataV1 = {\n position: this.storedView.position.dto,\n rotation: this.storedView.rotation.dto,\n scale: this.storedView.scale,\n hasStoredView: this.storedView.hasStoredView,\n };\n\n return data;\n }\n\n applySystemState(serializedState: object, version: number): void {\n try {\n if (version === 1) {\n const castState = serializedState as StoredViewDataV1;\n this.applyV1Data(castState);\n } else {\n console.warn(\n `[SerializeStoredView] Unsupported version number ${version}. Defaulting`,\n );\n this.applyDefaultState();\n }\n } catch (e) {\n console.warn(\n `[SerializeStoredView] Caught when deserializing ${e}. Defaulting`,\n );\n this.applyDefaultState();\n }\n }\n\n applyDefaultState(): void {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return;\n }\n\n this.storedView.position = Vector3.Zero();\n this.storedView.rotation = Quaternion.Identity();\n this.storedView.scale = 1;\n this.storedView.hasStoredView = false;\n }\n\n private applyV1Data(data: StoredViewDataV1) {\n if (!this.storedView) {\n console.warn(\"[SerializeStoredView] No stored view entity\");\n return;\n }\n\n const pos = Vector3.FromDTO(data.position);\n const rot = Quaternion.FromDTO(data.rotation);\n\n this.storedView.position = pos;\n this.storedView.rotation = rot;\n this.storedView.scale = data.scale;\n this.storedView.hasStoredView = data.hasStoredView;\n\n if (data.hasStoredView) {\n this.restoreStoredViewUC?.restoreStoredView();\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, SerializeStoredView.type);\n\n const stateMachine = StateMachineEntity.get(appObject.appObjectRepo);\n if (stateMachine) {\n stateMachine.registerSerializedSystem(this);\n } else {\n this.warn(\"Unable to find StateMachineEntity\");\n }\n }\n}\n\nexport interface StoredViewDataV1 {\n position: { x: number; y: number; z: number };\n rotation: { x: number; y: number; z: number; w: number };\n scale: number;\n hasStoredView: boolean;\n}\n"]}