@vived/app 6.7.1 → 6.9.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 (228) hide show
  1. package/README.md +145 -1
  2. package/dist/cjs/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  3. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  4. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  5. package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
  6. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js +4 -3
  7. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  8. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js +35 -0
  9. package/dist/cjs/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  10. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js +1 -0
  11. package/dist/cjs/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  12. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js +33 -0
  13. package/dist/cjs/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  14. package/dist/cjs/EventSystem/Entities/EventEntity.js.map +1 -1
  15. package/dist/cjs/EventSystem/Entities/EventEntity.test.js +4 -1
  16. package/dist/cjs/EventSystem/Entities/EventEntity.test.js.map +1 -1
  17. package/dist/cjs/EventSystem/Entities/index.js.map +1 -1
  18. package/dist/cjs/EventSystem/EventSystem.integration.test.js.map +1 -1
  19. package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
  20. package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
  21. package/dist/cjs/EventSystem/Factories/index.js.map +1 -1
  22. package/dist/cjs/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  23. package/dist/cjs/EventSystem/Mocks/index.js.map +1 -1
  24. package/dist/cjs/EventSystem/index.js.map +1 -1
  25. package/dist/cjs/EventSystem/types.js.map +1 -1
  26. package/dist/cjs/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
  27. package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
  28. package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
  29. package/dist/cjs/LabelDrop/UseCases/index.js.map +1 -1
  30. package/dist/cjs/Procedure/Adapters/index.js.map +1 -1
  31. package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
  32. package/dist/cjs/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  33. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  34. package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  35. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
  36. package/dist/cjs/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  37. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  38. package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  39. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  40. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
  41. package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  42. package/dist/cjs/Procedure/Entities/HintRegistry.js.map +1 -1
  43. package/dist/cjs/Procedure/Entities/HintRegistry.test.js.map +1 -1
  44. package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
  45. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js +1 -12
  46. package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  47. package/dist/cjs/Procedure/Entities/index.js.map +1 -1
  48. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  49. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js +3 -1
  50. package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  51. package/dist/cjs/Procedure/Factories/index.js.map +1 -1
  52. package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  53. package/dist/cjs/Procedure/Mocks/MockProcedurePM.js.map +1 -1
  54. package/dist/cjs/Procedure/Mocks/index.js.map +1 -1
  55. package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
  56. package/dist/cjs/Procedure/PM/ProcedurePM.test.js +1 -1
  57. package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
  58. package/dist/cjs/Procedure/PM/index.js.map +1 -1
  59. package/dist/cjs/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
  60. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
  61. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js +1 -4
  62. package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
  63. package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
  64. package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
  65. package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
  66. package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
  67. package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
  68. package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
  69. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
  70. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
  71. package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
  72. package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
  73. package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
  74. package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
  75. package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
  76. package/dist/cjs/Procedure/UCs/SerializeProcedure.js.map +1 -1
  77. package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js +6 -1
  78. package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
  79. package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
  80. package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
  81. package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
  82. package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
  83. package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
  84. package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
  85. package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
  86. package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
  87. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
  88. package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  89. package/dist/cjs/Procedure/UCs/index.js.map +1 -1
  90. package/dist/cjs/Procedure/index.js.map +1 -1
  91. package/dist/cjs/Procedure/types.js.map +1 -1
  92. package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
  93. package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
  94. package/dist/cjs/ThemeColors/Entities/ThemeColors.js +24 -0
  95. package/dist/cjs/ThemeColors/Entities/ThemeColors.js.map +1 -1
  96. package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js +20 -0
  97. package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
  98. package/dist/cjs/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  99. package/dist/cjs/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  100. package/dist/cjs/index.js.map +1 -1
  101. package/dist/esm/BaseApp/UC/RenderCanvasUC.js.map +1 -1
  102. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  103. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
  104. package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
  105. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js +5 -4
  106. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.js.map +1 -1
  107. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js +33 -0
  108. package/dist/esm/Dispatcher/Factories/DispatcherFeatureFactory.test.js.map +1 -0
  109. package/dist/esm/Dispatcher/Factories/setupDispatchers.js +2 -1
  110. package/dist/esm/Dispatcher/Factories/setupDispatchers.js.map +1 -1
  111. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js +31 -0
  112. package/dist/esm/Dispatcher/Factories/setupDispatchers.test.js.map +1 -0
  113. package/dist/esm/EventSystem/Entities/EventEntity.js.map +1 -1
  114. package/dist/esm/EventSystem/Entities/EventEntity.test.js +4 -1
  115. package/dist/esm/EventSystem/Entities/EventEntity.test.js.map +1 -1
  116. package/dist/esm/EventSystem/Entities/index.js.map +1 -1
  117. package/dist/esm/EventSystem/EventSystem.integration.test.js.map +1 -1
  118. package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
  119. package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
  120. package/dist/esm/EventSystem/Factories/index.js.map +1 -1
  121. package/dist/esm/EventSystem/Mocks/MockEventEntity.js.map +1 -1
  122. package/dist/esm/EventSystem/Mocks/index.js.map +1 -1
  123. package/dist/esm/EventSystem/index.js.map +1 -1
  124. package/dist/esm/EventSystem/types.js.map +1 -1
  125. package/dist/esm/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
  126. package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
  127. package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
  128. package/dist/esm/LabelDrop/UseCases/index.js.map +1 -1
  129. package/dist/esm/Procedure/Adapters/index.js.map +1 -1
  130. package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
  131. package/dist/esm/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
  132. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
  133. package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
  134. package/dist/esm/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
  135. package/dist/esm/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
  136. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
  137. package/dist/esm/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
  138. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
  139. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
  140. package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
  141. package/dist/esm/Procedure/Entities/HintRegistry.js.map +1 -1
  142. package/dist/esm/Procedure/Entities/HintRegistry.test.js.map +1 -1
  143. package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
  144. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js +1 -12
  145. package/dist/esm/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
  146. package/dist/esm/Procedure/Entities/index.js.map +1 -1
  147. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
  148. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js +5 -3
  149. package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
  150. package/dist/esm/Procedure/Factories/index.js.map +1 -1
  151. package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
  152. package/dist/esm/Procedure/Mocks/MockProcedurePM.js.map +1 -1
  153. package/dist/esm/Procedure/Mocks/index.js.map +1 -1
  154. package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
  155. package/dist/esm/Procedure/PM/ProcedurePM.test.js +2 -2
  156. package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
  157. package/dist/esm/Procedure/PM/index.js.map +1 -1
  158. package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js +2 -2
  159. package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
  160. package/dist/esm/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
  161. package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js +3 -6
  162. package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
  163. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
  164. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js +2 -2
  165. package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
  166. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
  167. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js +2 -2
  168. package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
  169. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
  170. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js +2 -2
  171. package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
  172. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
  173. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
  174. package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
  175. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
  176. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js +2 -2
  177. package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
  178. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
  179. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js +2 -2
  180. package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
  181. package/dist/esm/Procedure/UCs/SerializeProcedure.js.map +1 -1
  182. package/dist/esm/Procedure/UCs/SerializeProcedure.test.js +8 -3
  183. package/dist/esm/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
  184. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
  185. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js +1 -1
  186. package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
  187. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
  188. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js +1 -1
  189. package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
  190. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
  191. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js +1 -1
  192. package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
  193. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
  194. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js +2 -2
  195. package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
  196. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
  197. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js +1 -1
  198. package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
  199. package/dist/esm/Procedure/UCs/index.js.map +1 -1
  200. package/dist/esm/Procedure/index.js.map +1 -1
  201. package/dist/esm/Procedure/types.js.map +1 -1
  202. package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
  203. package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
  204. package/dist/esm/ThemeColors/Entities/ThemeColors.js +24 -0
  205. package/dist/esm/ThemeColors/Entities/ThemeColors.js.map +1 -1
  206. package/dist/esm/ThemeColors/Entities/ThemeColors.test.js +20 -0
  207. package/dist/esm/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
  208. package/dist/esm/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
  209. package/dist/esm/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
  210. package/dist/esm/index.js.map +1 -1
  211. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts +3 -3
  212. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.d.ts.map +1 -1
  213. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts +2 -0
  214. package/dist/types/Dispatcher/Factories/DispatcherFeatureFactory.test.d.ts.map +1 -0
  215. package/dist/types/Dispatcher/Factories/setupDispatchers.d.ts.map +1 -1
  216. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts +2 -0
  217. package/dist/types/Dispatcher/Factories/setupDispatchers.test.d.ts.map +1 -0
  218. package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
  219. package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
  220. package/dist/types/Procedure/UCs/AddProcedureEventUC.d.ts.map +1 -1
  221. package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts.map +1 -1
  222. package/dist/types/Procedure/UCs/SetProcedureIsQuizUC.d.ts.map +1 -1
  223. package/dist/types/Procedure/UCs/SubmitProcedureQuizUC.d.ts.map +1 -1
  224. package/dist/types/Procedure/types.d.ts.map +1 -1
  225. package/dist/types/ThemeColors/Entities/ThemeColors.d.ts +12 -0
  226. package/dist/types/ThemeColors/Entities/ThemeColors.d.ts.map +1 -1
  227. package/package.json +1 -1
  228. package/src/Dispatcher/README.md +9 -6
@@ -1 +1 @@
1
- {"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\r\n\r\ndescribe(\"EventEntity\", () => {\r\n let appObjects: AppObjectRepo;\r\n let entity: EventEntity;\r\n let registerSingletonSpy: jest.SpyInstance;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n\r\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\r\n });\r\n\r\n it(\"registers itself as a singleton\", () => {\r\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\r\n });\r\n\r\n it(\"should be accessible through the static getter\", () => {\r\n appObjects.getOrCreate(\"another-object\");\r\n const retrievedEntity = EventEntity.get(appObjects);\r\n expect(retrievedEntity).toBe(entity);\r\n });\r\n\r\n it(\"registers new events successfully\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"button_click\",\r\n name: \"Button Click Event\",\r\n });\r\n });\r\n\r\n it(\"should register multiple events\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"page_load\", \"Page Load Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n\r\n const eventIds = registeredEvents.map((e) => e.id);\r\n expect(eventIds).toContain(\"button_click\");\r\n expect(eventIds).toContain(\"page_load\");\r\n });\r\n\r\n it(\"should warn on duplicate registration\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"button_click\", \"Another Button Click\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Event with id 'button_click' is already registered\",\r\n );\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n });\r\n\r\n it(\"emits known events successfully\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"maintains chronological order of emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"manual_step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"auto_cycle_clicked\",\r\n \"manual_step\",\r\n \"auto_cycle_clicked\",\r\n ]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"allows duplicate emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(3);\r\n expect(\r\n emittedEvents.every((id) => id === \"auto_cycle_clicked\"),\r\n ).toBe(true);\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event'\",\r\n );\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"allows late registration after emission attempt\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"late_event\");\r\n expect(submitWarningSpy).toHaveBeenCalled();\r\n\r\n entity.register(\"late_event\", \"Late Event\");\r\n\r\n entity.emit(\"late_event\");\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"late_event\"]);\r\n });\r\n\r\n it(\"clears event log while preserving registry after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toHaveLength(3);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n entity.reset();\r\n\r\n expect(entity.getEmittedEvents()).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\r\n });\r\n\r\n it(\"allows emissions after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n entity.reset();\r\n\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"test_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"notifies observers on reset\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.reset();\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"does not notify observers for unknown event emissions\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(mockObserver).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"fires emission listener on every emit\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n entity.emit(\"test_event\");\r\n\r\n expect(listener).toHaveBeenCalledTimes(2);\r\n expect(listener).toHaveBeenCalledWith(\"test_event\");\r\n });\r\n\r\n it(\"does not fire emission listener for unknown events\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(listener).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"allows removing emission listeners\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n\r\n entity.removeEmissionListener(listener);\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"returns empty arrays and null initially\", () => {\r\n expect(entity.getRegisteredEvents()).toEqual([]);\r\n expect(entity.getEmittedEvents()).toEqual([]);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"returns copies of arrays to prevent external mutation\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n const emittedEvents = entity.getEmittedEvents();\r\n\r\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\r\n emittedEvents.push(\"fake_emission\");\r\n\r\n expect(entity.getRegisteredEvents()).toHaveLength(1);\r\n expect(entity.getEmittedEvents()).toHaveLength(1);\r\n });\r\n\r\n describe(\"event categories (#53)\", () => {\r\n it(\"stores an explicit category on the definition\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getRegisteredEvents()[0]).toEqual({\r\n id: \"navigate-to-overhead\",\r\n name: \"Go to overhead\",\r\n category: \"instructional\",\r\n });\r\n expect(entity.getEventCategory(\"navigate-to-overhead\")).toBe(\r\n \"instructional\",\r\n );\r\n });\r\n\r\n it(\"defaults an omitted category to assessed without adding a key to the definition\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"valve\", \"Open valve\", {});\r\n\r\n expect(entity.getRegisteredEvents()).toEqual([\r\n { id: \"lever\", name: \"Pull lever\" },\r\n { id: \"valve\", name: \"Open valve\" },\r\n ]);\r\n expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([\"id\", \"name\"]);\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n expect(entity.getEventCategory(\"valve\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"treats an unregistered id as assessed\", () => {\r\n expect(entity.getEventCategory(\"legacy-step\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"keeps the first registration's category on a duplicate registration\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"lever\", \"Pull lever again\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"emits an instructional event exactly like an assessed one\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"navigate-to-overhead\");\r\n\r\n expect(listener).toHaveBeenCalledWith(\"navigate-to-overhead\");\r\n expect(entity.getEmittedEvents()).toEqual([\"navigate-to-overhead\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"navigate-to-overhead\");\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\n\ndescribe(\"EventEntity\", () => {\n let appObjects: AppObjectRepo;\n let entity: EventEntity;\n let registerSingletonSpy: jest.SpyInstance;\n let submitWarningSpy: jest.SpyInstance;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\n });\n\n it(\"registers itself as a singleton\", () => {\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\n });\n\n it(\"should be accessible through the static getter\", () => {\n appObjects.getOrCreate(\"another-object\");\n const retrievedEntity = EventEntity.get(appObjects);\n expect(retrievedEntity).toBe(entity);\n });\n\n it(\"registers new events successfully\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n expect(registeredEvents[0]).toEqual({\n id: \"button_click\",\n name: \"Button Click Event\",\n });\n });\n\n it(\"should register multiple events\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n entity.register(\"page_load\", \"Page Load Event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(2);\n\n const eventIds = registeredEvents.map((e) => e.id);\n expect(eventIds).toContain(\"button_click\");\n expect(eventIds).toContain(\"page_load\");\n });\n\n it(\"should warn on duplicate registration\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n entity.register(\"button_click\", \"Another Button Click\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Event with id 'button_click' is already registered\",\n );\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n });\n\n it(\"emits known events successfully\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"maintains chronological order of emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"manual_step\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\n \"auto_cycle_clicked\",\n \"manual_step\",\n \"auto_cycle_clicked\",\n ]);\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"allows duplicate emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toHaveLength(3);\n expect(emittedEvents.every((id) => id === \"auto_cycle_clicked\")).toBe(true);\n });\n\n it(\"warns and ignores unknown event emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"unknown_event\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event'\",\n );\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toHaveLength(0);\n expect(entity.getLastEmittedId()).toBeNull();\n });\n\n it(\"allows late registration after emission attempt\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"late_event\");\n expect(submitWarningSpy).toHaveBeenCalled();\n\n entity.register(\"late_event\", \"Late Event\");\n\n entity.emit(\"late_event\");\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\"late_event\"]);\n });\n\n it(\"clears event log while preserving registry after reset\", () => {\n entity.register(\"event1\", \"Event One\");\n entity.register(\"event2\", \"Event Two\");\n entity.emit(\"event1\");\n entity.emit(\"event2\");\n entity.emit(\"event1\");\n expect(entity.getEmittedEvents()).toHaveLength(3);\n expect(entity.getLastEmittedId()).toBe(\"event1\");\n\n entity.reset();\n\n expect(entity.getEmittedEvents()).toHaveLength(0);\n expect(entity.getLastEmittedId()).toBeNull();\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(2);\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\n });\n\n it(\"allows emissions after reset\", () => {\n entity.register(\"event1\", \"Event One\");\n entity.register(\"event2\", \"Event Two\");\n entity.emit(\"event1\");\n entity.emit(\"event2\");\n entity.emit(\"event1\");\n entity.reset();\n\n entity.emit(\"event1\");\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\n expect(entity.getLastEmittedId()).toBe(\"event1\");\n });\n\n it(\"notifies observers when events are emitted\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.emit(\"test_event\");\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"notifies observers on reset\", () => {\n entity.register(\"test_event\", \"Test Event\");\n entity.emit(\"test_event\");\n\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.reset();\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"does not notify observers for unknown event emissions\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.emit(\"unknown_event\");\n\n expect(mockObserver).not.toHaveBeenCalled();\n });\n\n it(\"fires emission listener on every emit\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"test_event\");\n entity.emit(\"test_event\");\n\n expect(listener).toHaveBeenCalledTimes(2);\n expect(listener).toHaveBeenCalledWith(\"test_event\");\n });\n\n it(\"does not fire emission listener for unknown events\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"unknown_event\");\n\n expect(listener).not.toHaveBeenCalled();\n });\n\n it(\"allows removing emission listeners\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"test_event\");\n expect(listener).toHaveBeenCalledTimes(1);\n\n entity.removeEmissionListener(listener);\n entity.emit(\"test_event\");\n expect(listener).toHaveBeenCalledTimes(1);\n });\n\n it(\"returns empty arrays and null initially\", () => {\n expect(entity.getRegisteredEvents()).toEqual([]);\n expect(entity.getEmittedEvents()).toEqual([]);\n expect(entity.getLastEmittedId()).toBeNull();\n });\n\n it(\"returns copies of arrays to prevent external mutation\", () => {\n entity.register(\"test_event\", \"Test Event\");\n entity.emit(\"test_event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n const emittedEvents = entity.getEmittedEvents();\n\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\n emittedEvents.push(\"fake_emission\");\n\n expect(entity.getRegisteredEvents()).toHaveLength(1);\n expect(entity.getEmittedEvents()).toHaveLength(1);\n });\n\n describe(\"event categories (#53)\", () => {\n it(\"stores an explicit category on the definition\", () => {\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\n category: \"instructional\",\n });\n\n expect(entity.getRegisteredEvents()[0]).toEqual({\n id: \"navigate-to-overhead\",\n name: \"Go to overhead\",\n category: \"instructional\",\n });\n expect(entity.getEventCategory(\"navigate-to-overhead\")).toBe(\n \"instructional\",\n );\n });\n\n it(\"defaults an omitted category to assessed without adding a key to the definition\", () => {\n entity.register(\"lever\", \"Pull lever\");\n entity.register(\"valve\", \"Open valve\", {});\n\n expect(entity.getRegisteredEvents()).toEqual([\n { id: \"lever\", name: \"Pull lever\" },\n { id: \"valve\", name: \"Open valve\" },\n ]);\n expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([\n \"id\",\n \"name\",\n ]);\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\n expect(entity.getEventCategory(\"valve\")).toBe(\"assessed\");\n });\n\n it(\"treats an unregistered id as assessed\", () => {\n expect(entity.getEventCategory(\"legacy-step\")).toBe(\"assessed\");\n });\n\n it(\"keeps the first registration's category on a duplicate registration\", () => {\n entity.register(\"lever\", \"Pull lever\");\n entity.register(\"lever\", \"Pull lever again\", {\n category: \"instructional\",\n });\n\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\n });\n\n it(\"emits an instructional event exactly like an assessed one\", () => {\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\n category: \"instructional\",\n });\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"navigate-to-overhead\");\n\n expect(listener).toHaveBeenCalledWith(\"navigate-to-overhead\");\n expect(entity.getEmittedEvents()).toEqual([\"navigate-to-overhead\"]);\n expect(entity.getLastEmittedId()).toBe(\"navigate-to-overhead\");\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC","sourcesContent":["export * from \"./EventEntity\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC","sourcesContent":["export * from \"./EventEntity\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EventSystem.integration.test.js","sourceRoot":"","sources":["../../../src/EventSystem/EventSystem.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeEventSystemFeatureFactory } from \"./Factories/EventSystemFeatureFactory\";\r\nimport { EventEntity } from \"./Entities/EventEntity\";\r\n\r\ndescribe(\"EventSystem Integration\", () => {\r\n let appObjects: AppObjectRepo;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n });\r\n\r\n it(\"registers and emits known events successfully\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n\r\n const eventEntity = EventEntity.get(appObjects);\r\n expect(eventEntity).toBeDefined();\r\n\r\n eventEntity!.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n\r\n const registeredEvents = eventEntity!.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"auto_cycle_clicked\",\r\n name: \"Auto Cycle Clicked\",\r\n });\r\n\r\n eventEntity!.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = eventEntity!.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(eventEntity!.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"should handle multiple events and maintain chronological order\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"button_click\", \"Button Click\");\r\n eventEntity.register(\"page_load\", \"Page Load\");\r\n eventEntity.register(\"user_action\", \"User Action\");\r\n\r\n eventEntity.emit(\"page_load\");\r\n eventEntity.emit(\"button_click\");\r\n eventEntity.emit(\"user_action\");\r\n eventEntity.emit(\"button_click\");\r\n\r\n const emittedEvents = eventEntity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"page_load\",\r\n \"button_click\",\r\n \"user_action\",\r\n \"button_click\",\r\n ]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"button_click\");\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.emit(\"unknown_event_id\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event_id'\",\r\n );\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\r\n expect(eventEntity.getLastEmittedId()).toBeNull();\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(0);\r\n });\r\n\r\n it(\"should allow late registration after emission attempt\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.emit(\"late_registration_event\");\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'late_registration_event'\",\r\n );\r\n\r\n eventEntity.register(\"late_registration_event\", \"Late Registration Event\");\r\n eventEntity.emit(\"late_registration_event\");\r\n expect(eventEntity.getEmittedEvents()).toEqual([\"late_registration_event\"]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"late_registration_event\");\r\n });\r\n\r\n it(\"clears log while preserving registry\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"event1\", \"Event One\");\r\n eventEntity.register(\"event2\", \"Event Two\");\r\n eventEntity.emit(\"event1\");\r\n eventEntity.emit(\"event2\");\r\n eventEntity.emit(\"event1\");\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(3);\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n eventEntity.reset();\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\r\n expect(eventEntity.getLastEmittedId()).toBeNull();\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\r\n\r\n eventEntity.emit(\"event2\");\r\n expect(eventEntity.getEmittedEvents()).toEqual([\"event2\"]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"event2\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"observable_event\", \"Observable Event\");\r\n const mockObserver = jest.fn();\r\n eventEntity.addChangeObserver(mockObserver);\r\n\r\n eventEntity.emit(\"observable_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"should notify observers on reset\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"test_event\", \"Test Event\");\r\n eventEntity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n eventEntity.addChangeObserver(mockObserver);\r\n\r\n eventEntity.reset();\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"creates functional EventEntity through factory\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n\r\n expect(factory.getEventEntity()).toBeUndefined();\r\n\r\n factory.setupEntities();\r\n\r\n const eventEntity = factory.getEventEntity();\r\n expect(eventEntity).toBeDefined();\r\n expect(eventEntity).toBeInstanceOf(EventEntity);\r\n });\r\n\r\n it(\"should maintain singleton behavior across factory operations\", () => {\r\n const factory1 = makeEventSystemFeatureFactory(appObjects);\r\n factory1.setupEntities();\r\n\r\n const factory2 = makeEventSystemFeatureFactory(appObjects);\r\n\r\n const entity1 = factory1.getEventEntity();\r\n const entity2 = factory2.getEventEntity();\r\n\r\n expect(entity1).toBe(entity2);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"EventSystem.integration.test.js","sourceRoot":"","sources":["../../../src/EventSystem/EventSystem.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { makeEventSystemFeatureFactory } from \"./Factories/EventSystemFeatureFactory\";\nimport { EventEntity } from \"./Entities/EventEntity\";\n\ndescribe(\"EventSystem Integration\", () => {\n let appObjects: AppObjectRepo;\n let submitWarningSpy: jest.SpyInstance;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n });\n\n it(\"registers and emits known events successfully\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n\n const eventEntity = EventEntity.get(appObjects);\n expect(eventEntity).toBeDefined();\n\n eventEntity!.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n\n const registeredEvents = eventEntity!.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n expect(registeredEvents[0]).toEqual({\n id: \"auto_cycle_clicked\",\n name: \"Auto Cycle Clicked\",\n });\n\n eventEntity!.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = eventEntity!.getEmittedEvents();\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\n expect(eventEntity!.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"should handle multiple events and maintain chronological order\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"button_click\", \"Button Click\");\n eventEntity.register(\"page_load\", \"Page Load\");\n eventEntity.register(\"user_action\", \"User Action\");\n\n eventEntity.emit(\"page_load\");\n eventEntity.emit(\"button_click\");\n eventEntity.emit(\"user_action\");\n eventEntity.emit(\"button_click\");\n\n const emittedEvents = eventEntity.getEmittedEvents();\n expect(emittedEvents).toEqual([\n \"page_load\",\n \"button_click\",\n \"user_action\",\n \"button_click\",\n ]);\n expect(eventEntity.getLastEmittedId()).toBe(\"button_click\");\n });\n\n it(\"warns and ignores unknown event emissions\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.emit(\"unknown_event_id\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event_id'\",\n );\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\n expect(eventEntity.getLastEmittedId()).toBeNull();\n expect(eventEntity.getRegisteredEvents()).toHaveLength(0);\n });\n\n it(\"should allow late registration after emission attempt\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.emit(\"late_registration_event\");\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'late_registration_event'\",\n );\n\n eventEntity.register(\"late_registration_event\", \"Late Registration Event\");\n eventEntity.emit(\"late_registration_event\");\n expect(eventEntity.getEmittedEvents()).toEqual([\"late_registration_event\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"late_registration_event\");\n });\n\n it(\"clears log while preserving registry\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"event1\", \"Event One\");\n eventEntity.register(\"event2\", \"Event Two\");\n eventEntity.emit(\"event1\");\n eventEntity.emit(\"event2\");\n eventEntity.emit(\"event1\");\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(3);\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\n expect(eventEntity.getLastEmittedId()).toBe(\"event1\");\n\n eventEntity.reset();\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\n expect(eventEntity.getLastEmittedId()).toBeNull();\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\n\n eventEntity.emit(\"event2\");\n expect(eventEntity.getEmittedEvents()).toEqual([\"event2\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"event2\");\n });\n\n it(\"notifies observers when events are emitted\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"observable_event\", \"Observable Event\");\n const mockObserver = jest.fn();\n eventEntity.addChangeObserver(mockObserver);\n\n eventEntity.emit(\"observable_event\");\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"should notify observers on reset\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"test_event\", \"Test Event\");\n eventEntity.emit(\"test_event\");\n\n const mockObserver = jest.fn();\n eventEntity.addChangeObserver(mockObserver);\n\n eventEntity.reset();\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"creates functional EventEntity through factory\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n\n expect(factory.getEventEntity()).toBeUndefined();\n\n factory.setupEntities();\n\n const eventEntity = factory.getEventEntity();\n expect(eventEntity).toBeDefined();\n expect(eventEntity).toBeInstanceOf(EventEntity);\n });\n\n it(\"should maintain singleton behavior across factory operations\", () => {\n const factory1 = makeEventSystemFeatureFactory(appObjects);\n factory1.setupEntities();\n\n const factory2 = makeEventSystemFeatureFactory(appObjects);\n\n const entity1 = factory1.getEventEntity();\n const entity2 = factory2.getEventEntity();\n\n expect(entity1).toBe(entity2);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EventSystemFeatureFactory.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IAA5D;;QACE,gBAAW,GAAG,2BAA2B,CAAC;IAe5C,CAAC;IAbC,aAAa;QACX,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,KAAU,CAAC;IAEnB,QAAQ,KAAU,CAAC;IAEnB,UAAU,KAAU,CAAC;IAErB,cAAc;QACZ,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,eAAe,EAAE,WAAW,CAAC,IAAI;CAClC,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACxD,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeEventEntity, EventEntity } from \"../Entities/EventEntity\";\r\n\r\n/**\r\n * EventSystemFeatureFactory\r\n *\r\n * Creates and wires the EventSystem singleton entity.\r\n * Provides a single entry point for initializing the EventSystem feature.\r\n */\r\nexport class EventSystemFeatureFactory extends DomainFactory {\r\n factoryName = \"EventSystemFeatureFactory\";\r\n\r\n setupEntities(): void {\r\n makeEventEntity(this.appObject);\r\n }\r\n\r\n setupUCs(): void {}\r\n\r\n setupPMs(): void {}\r\n\r\n finalSetup(): void {}\r\n\r\n getEventEntity(): EventEntity | undefined {\r\n return EventEntity.get(this.appObjects);\r\n }\r\n}\r\n\r\nexport const EventSystemFeatureComponents = {\r\n eventEntityType: EventEntity.type,\r\n};\r\n\r\nexport function makeEventSystemFeatureFactory(\r\n appObjects: AppObjectRepo,\r\n): EventSystemFeatureFactory {\r\n const appObject = appObjects.getOrCreate(\"EventSystem\");\r\n return new EventSystemFeatureFactory(appObject);\r\n}\r\n"]}
1
+ {"version":3,"file":"EventSystemFeatureFactory.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IAA5D;;QACE,gBAAW,GAAG,2BAA2B,CAAC;IAe5C,CAAC;IAbC,aAAa;QACX,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,KAAU,CAAC;IAEnB,QAAQ,KAAU,CAAC;IAEnB,UAAU,KAAU,CAAC;IAErB,cAAc;QACZ,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,eAAe,EAAE,WAAW,CAAC,IAAI;CAClC,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACxD,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeEventEntity, EventEntity } from \"../Entities/EventEntity\";\n\n/**\n * EventSystemFeatureFactory\n *\n * Creates and wires the EventSystem singleton entity.\n * Provides a single entry point for initializing the EventSystem feature.\n */\nexport class EventSystemFeatureFactory extends DomainFactory {\n factoryName = \"EventSystemFeatureFactory\";\n\n setupEntities(): void {\n makeEventEntity(this.appObject);\n }\n\n setupUCs(): void {}\n\n setupPMs(): void {}\n\n finalSetup(): void {}\n\n getEventEntity(): EventEntity | undefined {\n return EventEntity.get(this.appObjects);\n }\n}\n\nexport const EventSystemFeatureComponents = {\n eventEntityType: EventEntity.type,\n};\n\nexport function makeEventSystemFeatureFactory(\n appObjects: AppObjectRepo,\n): EventSystemFeatureFactory {\n const appObject = appObjects.getOrCreate(\"EventSystem\");\n return new EventSystemFeatureFactory(appObject);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EventSystemFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport {\r\n EventSystemFeatureFactory,\r\n makeEventSystemFeatureFactory,\r\n} from \"./EventSystemFeatureFactory\";\r\nimport { EventEntity } from \"../Entities/EventEntity\";\r\n\r\ndescribe(\"EventSystemFeatureFactory\", () => {\r\n let appObjects: AppObjectRepo;\r\n let factory: EventSystemFeatureFactory;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n factory = makeEventSystemFeatureFactory(appObjects);\r\n });\r\n\r\n it(\"creates factory instance successfully\", () => {\r\n expect(factory).toBeInstanceOf(EventSystemFeatureFactory);\r\n expect(factory.factoryName).toBe(\"EventSystemFeatureFactory\");\r\n });\r\n\r\n it(\"creates EventEntity singleton on setupEntities\", () => {\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects);\r\n expect(eventEntity).toBeDefined();\r\n });\r\n\r\n it(\"makes EventEntity accessible through factory\", () => {\r\n factory.setupEntities();\r\n const eventEntity = factory.getEventEntity();\r\n expect(eventEntity).toBeDefined();\r\n });\r\n\r\n it(\"completes setup without errors\", () => {\r\n expect(() => {\r\n factory.setupEntities();\r\n factory.setupUCs();\r\n factory.setupPMs();\r\n factory.finalSetup();\r\n }).not.toThrow();\r\n });\r\n\r\n it(\"creates functional EventEntity after setup\", () => {\r\n factory.setupEntities();\r\n factory.setupUCs();\r\n factory.setupPMs();\r\n factory.finalSetup();\r\n\r\n const eventEntity = factory.getEventEntity()!;\r\n\r\n eventEntity.register(\"test_event\", \"Test Event\");\r\n eventEntity.emit(\"test_event\");\r\n\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(1);\r\n expect(eventEntity.getEmittedEvents()).toEqual([\"test_event\"]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"test_event\");\r\n });\r\n\r\n it(\"integrates warning system with appObjects\", () => {\r\n const submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n\r\n factory.setupEntities();\r\n const eventEntity = factory.getEventEntity()!;\r\n\r\n eventEntity.emit(\"unknown_event\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event'\",\r\n );\r\n });\r\n\r\n it(\"maintains singleton across different AppObjects\", () => {\r\n factory.setupEntities();\r\n\r\n const eventEntity1 = factory.getEventEntity();\r\n const eventEntity2 = EventEntity.get(appObjects);\r\n\r\n expect(eventEntity1).toBe(eventEntity2);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"EventSystemFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,UAAyB,CAAC;IAC9B,IAAI,OAAkC,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACjC,OAAO,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE;YACV,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,UAAU,EAAE,CAAC;QAErB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAG,CAAC;QAE9C,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE/B,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEjE,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAG,CAAC;QAE9C,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAElC,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAC3C,aAAa,EACb,mDAAmD,CACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,aAAa,EAAE,CAAC;QAExB,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport {\n EventSystemFeatureFactory,\n makeEventSystemFeatureFactory,\n} from \"./EventSystemFeatureFactory\";\nimport { EventEntity } from \"../Entities/EventEntity\";\n\ndescribe(\"EventSystemFeatureFactory\", () => {\n let appObjects: AppObjectRepo;\n let factory: EventSystemFeatureFactory;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n factory = makeEventSystemFeatureFactory(appObjects);\n });\n\n it(\"creates factory instance successfully\", () => {\n expect(factory).toBeInstanceOf(EventSystemFeatureFactory);\n expect(factory.factoryName).toBe(\"EventSystemFeatureFactory\");\n });\n\n it(\"creates EventEntity singleton on setupEntities\", () => {\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects);\n expect(eventEntity).toBeDefined();\n });\n\n it(\"makes EventEntity accessible through factory\", () => {\n factory.setupEntities();\n const eventEntity = factory.getEventEntity();\n expect(eventEntity).toBeDefined();\n });\n\n it(\"completes setup without errors\", () => {\n expect(() => {\n factory.setupEntities();\n factory.setupUCs();\n factory.setupPMs();\n factory.finalSetup();\n }).not.toThrow();\n });\n\n it(\"creates functional EventEntity after setup\", () => {\n factory.setupEntities();\n factory.setupUCs();\n factory.setupPMs();\n factory.finalSetup();\n\n const eventEntity = factory.getEventEntity()!;\n\n eventEntity.register(\"test_event\", \"Test Event\");\n eventEntity.emit(\"test_event\");\n\n expect(eventEntity.getRegisteredEvents()).toHaveLength(1);\n expect(eventEntity.getEmittedEvents()).toEqual([\"test_event\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"test_event\");\n });\n\n it(\"integrates warning system with appObjects\", () => {\n const submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n\n factory.setupEntities();\n const eventEntity = factory.getEventEntity()!;\n\n eventEntity.emit(\"unknown_event\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event'\",\n );\n });\n\n it(\"maintains singleton across different AppObjects\", () => {\n factory.setupEntities();\n\n const eventEntity1 = factory.getEventEntity();\n const eventEntity2 = EventEntity.get(appObjects);\n\n expect(eventEntity1).toBe(eventEntity2);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC","sourcesContent":["export * from \"./EventSystemFeatureFactory\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC","sourcesContent":["export * from \"./EventSystemFeatureFactory\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MockEventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/MockEventEntity.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAoC9C,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QApC7B,sBAAiB,GAAsB,EAAE,CAAC;QAC1C,mBAAc,GAAa,EAAE,CAAC;QAC9B,mBAAc,GAAkB,IAAI,CAAC;QAE7C,aAAQ,GAAG,IAAI,CAAC,EAAE,CAChB,CAAC,EAAU,EAAE,IAAY,EAAE,OAAkC,EAAE,EAAE;YAC/D,MAAM,UAAU,GAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CACF,CAAC;QAEF,qBAAgB,GAAG,IAAI,CAAC,EAAE,CACxB,CAAC,EAAU,EAAiB,EAAE,CAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,IAAI,UAAU,CAC1E,CAAC;QAEF,SAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,wBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjE,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,wBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAInC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAyB;IAC3D,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n EventCategory,\r\n EventDefinition,\r\n EventRegistrationOptions,\r\n} from \"../types\";\r\nimport { EventEntity } from \"../Entities/EventEntity\";\r\n\r\nexport class MockEventEntity extends EventEntity {\r\n private _registeredEvents: EventDefinition[] = [];\r\n private _emittedEvents: string[] = [];\r\n private _lastEmittedId: string | null = null;\r\n\r\n register = jest.fn(\r\n (id: string, name: string, options?: EventRegistrationOptions) => {\r\n const definition: EventDefinition = { id, name };\r\n if (options?.category) {\r\n definition.category = options.category;\r\n }\r\n this._registeredEvents.push(definition);\r\n },\r\n );\r\n\r\n getEventCategory = jest.fn(\r\n (id: string): EventCategory =>\r\n this._registeredEvents.find((e) => e.id === id)?.category ?? \"assessed\",\r\n );\r\n\r\n emit = jest.fn((id: string) => {\r\n this._emittedEvents.push(id);\r\n this._lastEmittedId = id;\r\n });\r\n\r\n reset = jest.fn(() => {\r\n this._emittedEvents = [];\r\n this._lastEmittedId = null;\r\n });\r\n\r\n getRegisteredEvents = jest.fn(() => [...this._registeredEvents]);\r\n getEmittedEvents = jest.fn(() => [...this._emittedEvents]);\r\n getLastEmittedId = jest.fn(() => this._lastEmittedId);\r\n addEmissionListener = jest.fn();\r\n removeEmissionListener = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EventEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockEventEntity(appObjects: AppObjectRepo) {\r\n return new MockEventEntity(appObjects.getOrCreate(\"MockEventEntity\"));\r\n}\r\n"]}
1
+ {"version":3,"file":"MockEventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/MockEventEntity.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAoC9C,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QApC7B,sBAAiB,GAAsB,EAAE,CAAC;QAC1C,mBAAc,GAAa,EAAE,CAAC;QAC9B,mBAAc,GAAkB,IAAI,CAAC;QAE7C,aAAQ,GAAG,IAAI,CAAC,EAAE,CAChB,CAAC,EAAU,EAAE,IAAY,EAAE,OAAkC,EAAE,EAAE;YAC/D,MAAM,UAAU,GAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CACF,CAAC;QAEF,qBAAgB,GAAG,IAAI,CAAC,EAAE,CACxB,CAAC,EAAU,EAAiB,EAAE,CAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,IAAI,UAAU,CAC1E,CAAC;QAEF,SAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,wBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjE,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,qBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,wBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAInC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAyB;IAC3D,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport {\n EventCategory,\n EventDefinition,\n EventRegistrationOptions,\n} from \"../types\";\nimport { EventEntity } from \"../Entities/EventEntity\";\n\nexport class MockEventEntity extends EventEntity {\n private _registeredEvents: EventDefinition[] = [];\n private _emittedEvents: string[] = [];\n private _lastEmittedId: string | null = null;\n\n register = jest.fn(\n (id: string, name: string, options?: EventRegistrationOptions) => {\n const definition: EventDefinition = { id, name };\n if (options?.category) {\n definition.category = options.category;\n }\n this._registeredEvents.push(definition);\n },\n );\n\n getEventCategory = jest.fn(\n (id: string): EventCategory =>\n this._registeredEvents.find((e) => e.id === id)?.category ?? \"assessed\",\n );\n\n emit = jest.fn((id: string) => {\n this._emittedEvents.push(id);\n this._lastEmittedId = id;\n });\n\n reset = jest.fn(() => {\n this._emittedEvents = [];\n this._lastEmittedId = null;\n });\n\n getRegisteredEvents = jest.fn(() => [...this._registeredEvents]);\n getEmittedEvents = jest.fn(() => [...this._emittedEvents]);\n getLastEmittedId = jest.fn(() => this._lastEmittedId);\n addEmissionListener = jest.fn();\n removeEmissionListener = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, EventEntity.type);\n }\n}\n\nexport function makeMockEventEntity(appObjects: AppObjectRepo) {\n return new MockEventEntity(appObjects.getOrCreate(\"MockEventEntity\"));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./MockEventEntity\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./MockEventEntity\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/EventSystem/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC","sourcesContent":["export * from \"./Entities\";\r\nexport * from \"./Factories\";\r\nexport * from \"./Mocks\";\r\nexport * from \"./types\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/EventSystem/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC","sourcesContent":["export * from \"./Entities\";\nexport * from \"./Factories\";\nexport * from \"./Mocks\";\nexport * from \"./types\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/EventSystem/types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\r\n * TypeScript type definitions for the EventSystem feature.\r\n * Defines interfaces for event definitions and factory-related types.\r\n */\r\n\r\n/**\r\n * The scoring semantics of an event, named by what the event means for a quiz —\r\n * not by where it comes from (the consuming app decides, this package only knows\r\n * the rule):\r\n * - `\"assessed\"` — the event represents a task outcome; scored, counted toward\r\n * progress and shown in a quiz.\r\n * - `\"instructional\"` — guidance (e.g. arriving at a viewpoint); an ordinary step\r\n * in training, but quiz-neutral: hidden and excluded from score and progress.\r\n */\r\nexport type EventCategory = \"assessed\" | \"instructional\";\r\n\r\n/**\r\n * Optional settings accepted by `EventEntity.register(id, name, options)`.\r\n */\r\nexport interface EventRegistrationOptions {\r\n /** Defaults to `\"assessed\"` when omitted. */\r\n category?: EventCategory;\r\n}\r\n\r\n/**\r\n * Represents a registered event definition with unique ID and human-readable name\r\n */\r\nexport interface EventDefinition {\r\n /** Unique identifier for the event */\r\n id: string;\r\n /** Human-readable name for the event */\r\n name: string;\r\n /**\r\n * Present only when the registration passed a category. Absent means\r\n * `\"assessed\"` — read it through `EventEntity.getEventCategory(id)`, which\r\n * normalizes the default, rather than from this field.\r\n */\r\n category?: EventCategory;\r\n}\r\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/EventSystem/types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * TypeScript type definitions for the EventSystem feature.\n * Defines interfaces for event definitions and factory-related types.\n */\n\n/**\n * The scoring semantics of an event, named by what the event means for a quiz —\n * not by where it comes from (the consuming app decides, this package only knows\n * the rule):\n * - `\"assessed\"` — the event represents a task outcome; scored, counted toward\n * progress and shown in a quiz.\n * - `\"instructional\"` — guidance (e.g. arriving at a viewpoint); an ordinary step\n * in training, but quiz-neutral: hidden and excluded from score and progress.\n */\nexport type EventCategory = \"assessed\" | \"instructional\";\n\n/**\n * Optional settings accepted by `EventEntity.register(id, name, options)`.\n */\nexport interface EventRegistrationOptions {\n /** Defaults to `\"assessed\"` when omitted. */\n category?: EventCategory;\n}\n\n/**\n * Represents a registered event definition with unique ID and human-readable name\n */\nexport interface EventDefinition {\n /** Unique identifier for the event */\n id: string;\n /** Human-readable name for the event */\n name: string;\n /**\n * Present only when the registration passed a category. Absent means\n * `\"assessed\"` — read it through `EventEntity.getEventCategory(id)`, which\n * normalizes the default, rather than from this field.\n */\n category?: EventCategory;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LabelDropFeatureFactory.js","sourceRoot":"","sources":["../../../../src/LabelDrop/Factories/LabelDropFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n DomainFactory,\r\n AppObject,\r\n AppObjectRepo,\r\n Quaternion,\r\n Vector3,\r\n} from \"@vived/core\";\r\nimport { StylusEntity } from \"../../Stylus\";\r\nimport { makeTransform3DPM } from \"../../Transform3D\";\r\nimport { ZSpaceEntity } from \"../../zSpace\";\r\nimport {\r\n makeMouseLabelDropAuthor,\r\n makeStylusLabelDrop,\r\n makeTouchLabelDropAuthor,\r\n} from \"../Controller\";\r\nimport { makeLabelDropRepo } from \"../Entities\";\r\nimport {\r\n makeLabelDropDragItemPM,\r\n makeLabelDropEditingIDPM,\r\n makeLabelDropListPM,\r\n makeLabelDropReviewPM,\r\n makeRemainingLabelDropListPM,\r\n} from \"../PM\";\r\nimport {\r\n ClearEditingLabelDropUCHook,\r\n makeDeleteAllLabelDropUC,\r\n makeDeleteLabelDropUC,\r\n makeDragLabelDropUC,\r\n makeDragLabelDropWorldUC,\r\n makeEditLabelDropUC,\r\n makeLabelDropCorrectAnimationUC,\r\n makeLabelDropIncorrectAnimationUC,\r\n makeLabelDropOnNothingAnimationUC,\r\n makeSubmitLabelDropResultUC,\r\n makeToggleLabelDropTargetUC,\r\n makeValidateLabelDrop,\r\n SerializeLabelDrop,\r\n} from \"../UseCases\";\r\nimport { makeLabelDropItemFactory } from \"./labelDropItemFactory\";\r\nimport { LabelDropRepo } from \"../Entities\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\n\r\n/**\r\n * Factory responsible for setting up the LabelDrop Feature domain components.\r\n *\r\n * This factory initializes all entities, use cases, presentation models, and controllers\r\n * required for the LabelDrop Feature functionality. It follows the domain-driven\r\n * design pattern by organizing components into their respective layers. This factory\r\n * replaces the complex setupLabelDrop function while maintaining backwards compatibility.\r\n *\r\n * The factory creates and configures:\r\n * - 1 LabelDropRepo entity with labelDropItemFactory configuration\r\n * - 12 Use Cases for label drop operations including serialization, editing, dragging, and validation\r\n * - 6 Presentation Models for UI state management and data presentation\r\n * - 3 Controllers for mouse, touch, and stylus interactions\r\n * - External dependency management for StylusEntity and ZSpaceEntity\r\n * - Transform hierarchy setup with proper positioning and scaling\r\n *\r\n * @extends DomainFactory\r\n */\r\nexport class LabelDropFeatureFactory extends DomainFactory {\r\n factoryName = \"LabelDropFeatureFactory\";\r\n\r\n private labelDropEntity: LabelDropRepo | null = null;\r\n\r\n /**\r\n * Sets up all entities required for the LabelDrop Feature.\r\n *\r\n * Initializes the LabelDropRepo entity and configures it with the\r\n * labelDropItemFactory for creating individual label drop items.\r\n * Uses the \"LabelDrop\" AppObject that was passed to the factory constructor.\r\n */\r\n setupEntities(): void {\r\n // Create the main LabelDropRepo entity\r\n this.labelDropEntity = makeLabelDropRepo(this.appObject);\r\n\r\n // Configure the entity with the item factory\r\n this.labelDropEntity.labelDropItemFactory = makeLabelDropItemFactory(\r\n this.appObject.appObjectRepo,\r\n );\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the LabelDrop Feature.\r\n *\r\n * Initializes all 12 use cases that define the business operations and\r\n * workflows available in the label drop feature. The use cases are created\r\n * in the same order as the original setupLabelDrop function to maintain\r\n * functional equivalence.\r\n *\r\n * Use Cases created:\r\n * - SerializeLabelDrop: Handles serialization of label drop data\r\n * - ClearEditingLabelDropUCHook: Manages clearing editing state\r\n * - EditLabelDropUC: Handles label drop editing operations\r\n * - DragLabelDropUC: Manages label drop dragging in screen space\r\n * - DragLabelDropWorldUC: Manages label drop dragging in world space\r\n * - DeleteLabelDropUC: Handles individual label drop deletion\r\n * - DeleteAllLabelDropUC: Handles deletion of all label drops\r\n * - ToggleLabelDropTargetUC: Manages target toggle operations\r\n * - LabelDropCorrectAnimationUC: Handles correct drop animations\r\n * - LabelDropOnNothingAnimationUC: Handles drop-on-nothing animations\r\n * - LabelDropIncorrectAnimationUC: Handles incorrect drop animations\r\n * - ValidateLabelDrop: Handles label drop validation logic\r\n */\r\n setupUCs(): void {\r\n // Create all Use Cases in the same order as original\r\n new SerializeLabelDrop(this.appObject);\r\n new ClearEditingLabelDropUCHook(this.appObject);\r\n makeEditLabelDropUC(this.appObject);\r\n makeDragLabelDropUC(this.appObject);\r\n makeDragLabelDropWorldUC(this.appObject);\r\n makeDeleteLabelDropUC(this.appObject);\r\n makeDeleteAllLabelDropUC(this.appObject);\r\n makeToggleLabelDropTargetUC(this.appObject);\r\n makeLabelDropCorrectAnimationUC(this.appObject);\r\n makeLabelDropOnNothingAnimationUC(this.appObject);\r\n makeLabelDropIncorrectAnimationUC(this.appObject);\r\n makeValidateLabelDrop(this.appObject);\r\n makeSubmitLabelDropResultUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation models for the LabelDrop Feature.\r\n *\r\n * Initializes all 6 presentation models that handle the view logic and\r\n * state management for UI components related to the label drop feature.\r\n * These PMs manage the reactive data flow between the domain layer and UI.\r\n *\r\n * Presentation Models created:\r\n * - LabelDropEditingIDPM: Manages the currently editing label drop ID\r\n * - RemainingLabelDropListPM: Tracks remaining label drops to be placed\r\n * - LabelDropReviewPM: Handles review mode presentation logic\r\n * - Transform3DPM: Manages 3D transform presentation for the feature\r\n * - LabelDropDragItemPM: Handles drag item presentation state\r\n * - LabelDropListPM: Manages the overall list of label drops\r\n */\r\n setupPMs(): void {\r\n // Create all Presentation Models in the same order as original\r\n makeLabelDropEditingIDPM(this.appObject);\r\n makeRemainingLabelDropListPM(this.appObject);\r\n makeLabelDropReviewPM(this.appObject);\r\n makeTransform3DPM(this.appObject);\r\n makeLabelDropDragItemPM(this.appObject);\r\n makeLabelDropListPM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs final setup operations after all components are initialized.\r\n *\r\n * This method handles:\r\n * - Creation of the 3 Controllers (Mouse, Touch, Stylus)\r\n * - External dependency resolution and configuration\r\n * - Transform hierarchy setup for drag operations\r\n * - Error handling for missing dependencies\r\n *\r\n * Controllers created:\r\n * - MouseLabelDropAuthor: Handles mouse-based label drop interactions\r\n * - TouchLabelDropAuthor: Handles touch-based label drop interactions\r\n * - StylusLabelDrop: Handles stylus-based label drop interactions\r\n *\r\n * External dependencies:\r\n * - StylusEntity: Required for stylus-based interactions and drag helper positioning\r\n * - ZSpaceEntity: Required for zSpace display integration and drag label positioning\r\n */\r\n finalSetup(): void {\r\n const challengeEntity = ChallengeEntity.get(this.appObjects);\r\n if (challengeEntity && this.labelDropEntity) {\r\n challengeEntity.registerChallenge(this.labelDropEntity);\r\n }\r\n\r\n // Create Controllers\r\n makeMouseLabelDropAuthor(this.appObject);\r\n makeTouchLabelDropAuthor(this.appObject);\r\n\r\n if (this.appObjects.hasSingleton(StylusEntity.type)) {\r\n makeStylusLabelDrop(this.appObject);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new LabelDropFeatureFactory.\r\n *\r\n * This function follows the same pattern as the original setupLabelDrop function\r\n * by taking an AppObjectRepo and creating the \"LabelDrop\" AppObject internally.\r\n * The factory provides the same functionality as the original setupLabelDrop function\r\n * but follows the Clean Architecture pattern and can be composed with other factories.\r\n *\r\n * @param appObjectRepo The AppObjectRepo to create the LabelDrop AppObject from\r\n * @returns A new LabelDropFeatureFactory instance\r\n */\r\nexport function makeLabelDropFeatureFactory(\r\n appObjectRepo: AppObjectRepo,\r\n): LabelDropFeatureFactory {\r\n const appObject = appObjectRepo.getOrCreate(\"LabelDrop\");\r\n return new LabelDropFeatureFactory(appObject);\r\n}\r\n"]}
1
+ {"version":3,"file":"LabelDropFeatureFactory.js","sourceRoot":"","sources":["../../../../src/LabelDrop/Factories/LabelDropFeatureFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DomainFactory,\n AppObject,\n AppObjectRepo,\n Quaternion,\n Vector3,\n} from \"@vived/core\";\nimport { StylusEntity } from \"../../Stylus\";\nimport { makeTransform3DPM } from \"../../Transform3D\";\nimport { ZSpaceEntity } from \"../../zSpace\";\nimport {\n makeMouseLabelDropAuthor,\n makeStylusLabelDrop,\n makeTouchLabelDropAuthor,\n} from \"../Controller\";\nimport { makeLabelDropRepo } from \"../Entities\";\nimport {\n makeLabelDropDragItemPM,\n makeLabelDropEditingIDPM,\n makeLabelDropListPM,\n makeLabelDropReviewPM,\n makeRemainingLabelDropListPM,\n} from \"../PM\";\nimport {\n ClearEditingLabelDropUCHook,\n makeDeleteAllLabelDropUC,\n makeDeleteLabelDropUC,\n makeDragLabelDropUC,\n makeDragLabelDropWorldUC,\n makeEditLabelDropUC,\n makeLabelDropCorrectAnimationUC,\n makeLabelDropIncorrectAnimationUC,\n makeLabelDropOnNothingAnimationUC,\n makeSubmitLabelDropResultUC,\n makeToggleLabelDropTargetUC,\n makeValidateLabelDrop,\n SerializeLabelDrop,\n} from \"../UseCases\";\nimport { makeLabelDropItemFactory } from \"./labelDropItemFactory\";\nimport { LabelDropRepo } from \"../Entities\";\nimport { ChallengeEntity } from \"../../Challenge\";\n\n/**\n * Factory responsible for setting up the LabelDrop Feature domain components.\n *\n * This factory initializes all entities, use cases, presentation models, and controllers\n * required for the LabelDrop Feature functionality. It follows the domain-driven\n * design pattern by organizing components into their respective layers. This factory\n * replaces the complex setupLabelDrop function while maintaining backwards compatibility.\n *\n * The factory creates and configures:\n * - 1 LabelDropRepo entity with labelDropItemFactory configuration\n * - 12 Use Cases for label drop operations including serialization, editing, dragging, and validation\n * - 6 Presentation Models for UI state management and data presentation\n * - 3 Controllers for mouse, touch, and stylus interactions\n * - External dependency management for StylusEntity and ZSpaceEntity\n * - Transform hierarchy setup with proper positioning and scaling\n *\n * @extends DomainFactory\n */\nexport class LabelDropFeatureFactory extends DomainFactory {\n factoryName = \"LabelDropFeatureFactory\";\n\n private labelDropEntity: LabelDropRepo | null = null;\n\n /**\n * Sets up all entities required for the LabelDrop Feature.\n *\n * Initializes the LabelDropRepo entity and configures it with the\n * labelDropItemFactory for creating individual label drop items.\n * Uses the \"LabelDrop\" AppObject that was passed to the factory constructor.\n */\n setupEntities(): void {\n // Create the main LabelDropRepo entity\n this.labelDropEntity = makeLabelDropRepo(this.appObject);\n\n // Configure the entity with the item factory\n this.labelDropEntity.labelDropItemFactory = makeLabelDropItemFactory(\n this.appObject.appObjectRepo,\n );\n }\n\n /**\n * Sets up all use cases for the LabelDrop Feature.\n *\n * Initializes all 12 use cases that define the business operations and\n * workflows available in the label drop feature. The use cases are created\n * in the same order as the original setupLabelDrop function to maintain\n * functional equivalence.\n *\n * Use Cases created:\n * - SerializeLabelDrop: Handles serialization of label drop data\n * - ClearEditingLabelDropUCHook: Manages clearing editing state\n * - EditLabelDropUC: Handles label drop editing operations\n * - DragLabelDropUC: Manages label drop dragging in screen space\n * - DragLabelDropWorldUC: Manages label drop dragging in world space\n * - DeleteLabelDropUC: Handles individual label drop deletion\n * - DeleteAllLabelDropUC: Handles deletion of all label drops\n * - ToggleLabelDropTargetUC: Manages target toggle operations\n * - LabelDropCorrectAnimationUC: Handles correct drop animations\n * - LabelDropOnNothingAnimationUC: Handles drop-on-nothing animations\n * - LabelDropIncorrectAnimationUC: Handles incorrect drop animations\n * - ValidateLabelDrop: Handles label drop validation logic\n */\n setupUCs(): void {\n // Create all Use Cases in the same order as original\n new SerializeLabelDrop(this.appObject);\n new ClearEditingLabelDropUCHook(this.appObject);\n makeEditLabelDropUC(this.appObject);\n makeDragLabelDropUC(this.appObject);\n makeDragLabelDropWorldUC(this.appObject);\n makeDeleteLabelDropUC(this.appObject);\n makeDeleteAllLabelDropUC(this.appObject);\n makeToggleLabelDropTargetUC(this.appObject);\n makeLabelDropCorrectAnimationUC(this.appObject);\n makeLabelDropOnNothingAnimationUC(this.appObject);\n makeLabelDropIncorrectAnimationUC(this.appObject);\n makeValidateLabelDrop(this.appObject);\n makeSubmitLabelDropResultUC(this.appObject);\n }\n\n /**\n * Sets up all presentation models for the LabelDrop Feature.\n *\n * Initializes all 6 presentation models that handle the view logic and\n * state management for UI components related to the label drop feature.\n * These PMs manage the reactive data flow between the domain layer and UI.\n *\n * Presentation Models created:\n * - LabelDropEditingIDPM: Manages the currently editing label drop ID\n * - RemainingLabelDropListPM: Tracks remaining label drops to be placed\n * - LabelDropReviewPM: Handles review mode presentation logic\n * - Transform3DPM: Manages 3D transform presentation for the feature\n * - LabelDropDragItemPM: Handles drag item presentation state\n * - LabelDropListPM: Manages the overall list of label drops\n */\n setupPMs(): void {\n // Create all Presentation Models in the same order as original\n makeLabelDropEditingIDPM(this.appObject);\n makeRemainingLabelDropListPM(this.appObject);\n makeLabelDropReviewPM(this.appObject);\n makeTransform3DPM(this.appObject);\n makeLabelDropDragItemPM(this.appObject);\n makeLabelDropListPM(this.appObject);\n }\n\n /**\n * Performs final setup operations after all components are initialized.\n *\n * This method handles:\n * - Creation of the 3 Controllers (Mouse, Touch, Stylus)\n * - External dependency resolution and configuration\n * - Transform hierarchy setup for drag operations\n * - Error handling for missing dependencies\n *\n * Controllers created:\n * - MouseLabelDropAuthor: Handles mouse-based label drop interactions\n * - TouchLabelDropAuthor: Handles touch-based label drop interactions\n * - StylusLabelDrop: Handles stylus-based label drop interactions\n *\n * External dependencies:\n * - StylusEntity: Required for stylus-based interactions and drag helper positioning\n * - ZSpaceEntity: Required for zSpace display integration and drag label positioning\n */\n finalSetup(): void {\n const challengeEntity = ChallengeEntity.get(this.appObjects);\n if (challengeEntity && this.labelDropEntity) {\n challengeEntity.registerChallenge(this.labelDropEntity);\n }\n\n // Create Controllers\n makeMouseLabelDropAuthor(this.appObject);\n makeTouchLabelDropAuthor(this.appObject);\n\n if (this.appObjects.hasSingleton(StylusEntity.type)) {\n makeStylusLabelDrop(this.appObject);\n }\n }\n}\n\n/**\n * Factory function to create a new LabelDropFeatureFactory.\n *\n * This function follows the same pattern as the original setupLabelDrop function\n * by taking an AppObjectRepo and creating the \"LabelDrop\" AppObject internally.\n * The factory provides the same functionality as the original setupLabelDrop function\n * but follows the Clean Architecture pattern and can be composed with other factories.\n *\n * @param appObjectRepo The AppObjectRepo to create the LabelDrop AppObject from\n * @returns A new LabelDropFeatureFactory instance\n */\nexport function makeLabelDropFeatureFactory(\n appObjectRepo: AppObjectRepo,\n): LabelDropFeatureFactory {\n const appObject = appObjectRepo.getOrCreate(\"LabelDrop\");\n return new LabelDropFeatureFactory(appObject);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitLabelDropResultUC.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/SubmitLabelDropResultUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC,\r\n getSingletonComponent,\r\n} from \"@vived/core\";\r\nimport { BaseAppState } from \"../../BaseApp\";\r\nimport { ChallengeEntity } from \"../../Challenge\";\r\nimport { submitMultiHitResult } from \"../../Dispatcher\";\r\nimport { LabelDropRepo } from \"../Entities\";\r\n\r\n/**\r\n * Submits a Label Drop challenge result to the Host as a MULTIHIT result.\r\n *\r\n * Mirrors the other challenge submitters (TrySubmitObjectPickUC, SubmitQuestionAnswerUC):\r\n * consumption-mode only, and only while Label Drop is the selected challenge. It observes\r\n * every Label Drop submission and reports the running tally, so a partial attempt is scored\r\n * on slide exit (the Host's MULTIHIT best-hits rule keeps the strongest result). See\r\n * docs/prd/label-drop-result.md.\r\n *\r\n * Tally: hits = items answered correctly; unanswered = items not yet correct\r\n * (getRemainingLabelDrops); misses = total tries - hits (each hit's final try is the one\r\n * correct drop, so every other object-drop was wrong); description = the slide's text.\r\n */\r\nexport abstract class SubmitLabelDropResultUC extends AppObjectUC {\r\n static readonly type = \"SubmitLabelDropResultUC\";\r\n\r\n abstract submitResult(): void;\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<SubmitLabelDropResultUC>(\r\n SubmitLabelDropResultUC.type,\r\n appObjects,\r\n );\r\n }\r\n}\r\n\r\nexport function makeSubmitLabelDropResultUC(\r\n appObject: AppObject,\r\n): SubmitLabelDropResultUC {\r\n return new SubmitLabelDropResultUCImp(appObject);\r\n}\r\n\r\nclass SubmitLabelDropResultUCImp extends SubmitLabelDropResultUC {\r\n private get repo() {\r\n return this.getCachedSingleton<LabelDropRepo>(LabelDropRepo.type);\r\n }\r\n\r\n private get baseApp() {\r\n return this.getCachedSingleton<BaseAppState>(BaseAppState.type);\r\n }\r\n\r\n private get challenge() {\r\n return this.getCachedSingleton<ChallengeEntity>(ChallengeEntity.type);\r\n }\r\n\r\n private onSubmission = (): void => {\r\n this.submitResult();\r\n };\r\n\r\n submitResult = (): void => {\r\n const repo = this.repo;\r\n const baseApp = this.baseApp;\r\n const challenge = this.challenge;\r\n if (!repo || !baseApp || !challenge) return;\r\n\r\n if (baseApp.isAuthoring) return;\r\n if (challenge.selectedChallenge !== \"LABEL_DROP\") return;\r\n\r\n const items = repo.getAll();\r\n const hits = items.filter(\r\n (item) => item.answeredCorrectly === true,\r\n ).length;\r\n const unanswered = repo.getRemainingLabelDrops().length;\r\n const totalTries = items.reduce((sum, item) => sum + item.tries, 0);\r\n const misses = totalTries - hits;\r\n\r\n submitMultiHitResult(\r\n {\r\n hits,\r\n misses,\r\n unanswered,\r\n description: baseApp.slideText,\r\n },\r\n this.appObjects,\r\n );\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SubmitLabelDropResultUC.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n const repo = LabelDropRepo.get(this.appObjects);\r\n if (repo) {\r\n repo.addLabelDropSubmissionObserver(this.onSubmission);\r\n } else {\r\n this.warn(\r\n \"SubmitLabelDropResultUC has been set up without a LabelDropRepo to observe\",\r\n );\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SubmitLabelDropResultUC.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/SubmitLabelDropResultUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,uBAAwB,SAAQ,WAAW;IAK/D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,uBAAuB,CAAC,IAAI,EAC5B,UAAU,CACX,CAAC;IACJ,CAAC;;AATe,4BAAI,GAAG,yBAAyB,CAAC;AAYnD,MAAM,UAAU,2BAA2B,CACzC,SAAoB;IAEpB,OAAO,IAAI,0BAA0B,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,0BAA2B,SAAQ,uBAAuB;IAC9D,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAgB,aAAa,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAe,YAAY,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAgCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;QA/BzC,iBAAY,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAS,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;gBAAE,OAAO;YAE5C,IAAI,OAAO,CAAC,WAAW;gBAAE,OAAO;YAChC,IAAI,SAAS,CAAC,iBAAiB,KAAK,YAAY;gBAAE,OAAO;YAEzD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;YAEjC,oBAAoB,CAClB;gBACE,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,WAAW,EAAE,OAAO,CAAC,SAAS;aAC/B,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;QACJ,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CACP,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n getSingletonComponent,\n} from \"@vived/core\";\nimport { BaseAppState } from \"../../BaseApp\";\nimport { ChallengeEntity } from \"../../Challenge\";\nimport { submitMultiHitResult } from \"../../Dispatcher\";\nimport { LabelDropRepo } from \"../Entities\";\n\n/**\n * Submits a Label Drop challenge result to the Host as a MULTIHIT result.\n *\n * Mirrors the other challenge submitters (TrySubmitObjectPickUC, SubmitQuestionAnswerUC):\n * consumption-mode only, and only while Label Drop is the selected challenge. It observes\n * every Label Drop submission and reports the running tally, so a partial attempt is scored\n * on slide exit (the Host's MULTIHIT best-hits rule keeps the strongest result). See\n * docs/prd/label-drop-result.md.\n *\n * Tally: hits = items answered correctly; unanswered = items not yet correct\n * (getRemainingLabelDrops); misses = total tries - hits (each hit's final try is the one\n * correct drop, so every other object-drop was wrong); description = the slide's text.\n */\nexport abstract class SubmitLabelDropResultUC extends AppObjectUC {\n static readonly type = \"SubmitLabelDropResultUC\";\n\n abstract submitResult(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<SubmitLabelDropResultUC>(\n SubmitLabelDropResultUC.type,\n appObjects,\n );\n }\n}\n\nexport function makeSubmitLabelDropResultUC(\n appObject: AppObject,\n): SubmitLabelDropResultUC {\n return new SubmitLabelDropResultUCImp(appObject);\n}\n\nclass SubmitLabelDropResultUCImp extends SubmitLabelDropResultUC {\n private get repo() {\n return this.getCachedSingleton<LabelDropRepo>(LabelDropRepo.type);\n }\n\n private get baseApp() {\n return this.getCachedSingleton<BaseAppState>(BaseAppState.type);\n }\n\n private get challenge() {\n return this.getCachedSingleton<ChallengeEntity>(ChallengeEntity.type);\n }\n\n private onSubmission = (): void => {\n this.submitResult();\n };\n\n submitResult = (): void => {\n const repo = this.repo;\n const baseApp = this.baseApp;\n const challenge = this.challenge;\n if (!repo || !baseApp || !challenge) return;\n\n if (baseApp.isAuthoring) return;\n if (challenge.selectedChallenge !== \"LABEL_DROP\") return;\n\n const items = repo.getAll();\n const hits = items.filter((item) => item.answeredCorrectly === true).length;\n const unanswered = repo.getRemainingLabelDrops().length;\n const totalTries = items.reduce((sum, item) => sum + item.tries, 0);\n const misses = totalTries - hits;\n\n submitMultiHitResult(\n {\n hits,\n misses,\n unanswered,\n description: baseApp.slideText,\n },\n this.appObjects,\n );\n };\n\n constructor(appObject: AppObject) {\n super(appObject, SubmitLabelDropResultUC.type);\n this.appObjects.registerSingleton(this);\n\n const repo = LabelDropRepo.get(this.appObjects);\n if (repo) {\n repo.addLabelDropSubmissionObserver(this.onSubmission);\n } else {\n this.warn(\n \"SubmitLabelDropResultUC has been set up without a LabelDropRepo to observe\",\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitLabelDropResultUC.test.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/SubmitLabelDropResultUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,2BAA2B,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,yFAAyF;IACzF,2FAA2F;IAC3F,0FAA0F;IAC1F,8DAA8D;IAC9D,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QAEvC,mEAAmE;QACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;QAEjC,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACtD,SAAS,CAAC,iBAAiB,GAAG,YAAY,CAAC;QAE3C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC1D,gBAAgB,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAElD,MAAM,OAAO,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,wBAAwB;QACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,gEAAgE;QAEpF,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC;YACjE,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeBaseAppState } from \"../../BaseApp/Entity/BaseAppState\";\r\nimport { makeChallengeEntityMock } from \"../../Challenge\";\r\nimport { makeMockSubmitResult } from \"../../Dispatcher\";\r\nimport { LabelDropRepo, makeLabelDropRepo } from \"../Entities\";\r\nimport { makeLabelDropFeatureFactory } from \"../Factories/LabelDropFeatureFactory\";\r\nimport {\r\n makeSubmitLabelDropResultUC,\r\n SubmitLabelDropResultUC,\r\n} from \"./SubmitLabelDropResultUC\";\r\n\r\ndescribe(\"SubmitLabelDropResultUC\", () => {\r\n it(\"Registers as the singleton\", () => {\r\n const appObjects = makeAppObjectRepo();\r\n makeLabelDropRepo(appObjects.getOrCreate(\"LabelDrop\"));\r\n const uc = makeSubmitLabelDropResultUC(appObjects.getOrCreate(\"LabelDrop\"));\r\n\r\n expect(SubmitLabelDropResultUC.get(appObjects)).toBe(uc);\r\n });\r\n\r\n // Wiring / lifecycle: prove the real LabelDropFeatureFactory constructs the UC and hooks\r\n // the drop observer. Uses the repo's factory-test idiom (drive the phases directly) rather\r\n // than a full setupDomain — finalSetup wires pointer controllers that pull in the input /\r\n // framework cluster, which is irrelevant to this UC's wiring.\r\n it(\"is wired by LabelDropFeatureFactory.setupUCs so a drop reports a result to the Host\", () => {\r\n const appObjects = makeAppObjectRepo();\r\n\r\n // Boundary singletons the feature's UCs read at construction time.\r\n const baseApp = makeBaseAppState(appObjects.getOrCreate(\"App\"));\r\n baseApp.isAuthoring = false;\r\n baseApp.slideText = \"Slide text\";\r\n\r\n const challenge = makeChallengeEntityMock(appObjects);\r\n challenge.selectedChallenge = \"LABEL_DROP\";\r\n\r\n const mockSubmitResult = makeMockSubmitResult(appObjects);\r\n mockSubmitResult.submitMultiHitResult = jest.fn();\r\n\r\n const factory = makeLabelDropFeatureFactory(appObjects);\r\n factory.setupEntities(); // creates LabelDropRepo\r\n factory.setupUCs(); // creates SubmitLabelDropResultUC, which subscribes to the repo\r\n\r\n const repo = LabelDropRepo.get(appObjects)!;\r\n const item = repo.makeLabelDropItem(\"a\");\r\n item.targetIds = [\"objA\"];\r\n\r\n repo.submitLabelDrop(\"a\", \"objA\");\r\n\r\n expect(mockSubmitResult.submitMultiHitResult).toHaveBeenCalledWith({\r\n hits: 1,\r\n misses: 0,\r\n unanswered: 0,\r\n description: \"Slide text\",\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SubmitLabelDropResultUC.test.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/SubmitLabelDropResultUC.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,2BAA2B,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,yFAAyF;IACzF,2FAA2F;IAC3F,0FAA0F;IAC1F,8DAA8D;IAC9D,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QAEvC,mEAAmE;QACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;QAEjC,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACtD,SAAS,CAAC,iBAAiB,GAAG,YAAY,CAAC;QAE3C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC1D,gBAAgB,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAElD,MAAM,OAAO,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,wBAAwB;QACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,gEAAgE;QAEpF,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC;YACjE,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { makeBaseAppState } from \"../../BaseApp/Entity/BaseAppState\";\nimport { makeChallengeEntityMock } from \"../../Challenge\";\nimport { makeMockSubmitResult } from \"../../Dispatcher\";\nimport { LabelDropRepo, makeLabelDropRepo } from \"../Entities\";\nimport { makeLabelDropFeatureFactory } from \"../Factories/LabelDropFeatureFactory\";\nimport {\n makeSubmitLabelDropResultUC,\n SubmitLabelDropResultUC,\n} from \"./SubmitLabelDropResultUC\";\n\ndescribe(\"SubmitLabelDropResultUC\", () => {\n it(\"Registers as the singleton\", () => {\n const appObjects = makeAppObjectRepo();\n makeLabelDropRepo(appObjects.getOrCreate(\"LabelDrop\"));\n const uc = makeSubmitLabelDropResultUC(appObjects.getOrCreate(\"LabelDrop\"));\n\n expect(SubmitLabelDropResultUC.get(appObjects)).toBe(uc);\n });\n\n // Wiring / lifecycle: prove the real LabelDropFeatureFactory constructs the UC and hooks\n // the drop observer. Uses the repo's factory-test idiom (drive the phases directly) rather\n // than a full setupDomain — finalSetup wires pointer controllers that pull in the input /\n // framework cluster, which is irrelevant to this UC's wiring.\n it(\"is wired by LabelDropFeatureFactory.setupUCs so a drop reports a result to the Host\", () => {\n const appObjects = makeAppObjectRepo();\n\n // Boundary singletons the feature's UCs read at construction time.\n const baseApp = makeBaseAppState(appObjects.getOrCreate(\"App\"));\n baseApp.isAuthoring = false;\n baseApp.slideText = \"Slide text\";\n\n const challenge = makeChallengeEntityMock(appObjects);\n challenge.selectedChallenge = \"LABEL_DROP\";\n\n const mockSubmitResult = makeMockSubmitResult(appObjects);\n mockSubmitResult.submitMultiHitResult = jest.fn();\n\n const factory = makeLabelDropFeatureFactory(appObjects);\n factory.setupEntities(); // creates LabelDropRepo\n factory.setupUCs(); // creates SubmitLabelDropResultUC, which subscribes to the repo\n\n const repo = LabelDropRepo.get(appObjects)!;\n const item = repo.makeLabelDropItem(\"a\");\n item.targetIds = [\"objA\"];\n\n repo.submitLabelDrop(\"a\", \"objA\");\n\n expect(mockSubmitResult.submitMultiHitResult).toHaveBeenCalledWith({\n hits: 1,\n misses: 0,\n unanswered: 0,\n description: \"Slide text\",\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC","sourcesContent":["export * from \"./ClearEditingLabelDropUCHook\";\r\nexport * from \"./CorrectAnimationUC\";\r\nexport * from \"./DeleteAllLabelDropUC\";\r\nexport * from \"./DeleteLabelDropUC\";\r\nexport * from \"./DragLabelDropUC\";\r\nexport * from \"./DragLabelDropWorldUC\";\r\nexport * from \"./DropOnNothingAnimationUC\";\r\nexport * from \"./EditLabelDropUC\";\r\nexport * from \"./IncorrectAnimationUC\";\r\nexport * from \"./InitializeLabelDropLabelHook\";\r\nexport * from \"./LabelDropAnimation\";\r\nexport * from \"./SerializeLabelDrop\";\r\nexport * from \"./SubmitLabelDropResultUC\";\r\nexport * from \"./ToggleLabelDropTargetUC\";\r\nexport * from \"./ValidateLabelDrop\";\r\nexport * from \"./labelDropLabelValidator\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/LabelDrop/UseCases/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC","sourcesContent":["export * from \"./ClearEditingLabelDropUCHook\";\nexport * from \"./CorrectAnimationUC\";\nexport * from \"./DeleteAllLabelDropUC\";\nexport * from \"./DeleteLabelDropUC\";\nexport * from \"./DragLabelDropUC\";\nexport * from \"./DragLabelDropWorldUC\";\nexport * from \"./DropOnNothingAnimationUC\";\nexport * from \"./EditLabelDropUC\";\nexport * from \"./IncorrectAnimationUC\";\nexport * from \"./InitializeLabelDropLabelHook\";\nexport * from \"./LabelDropAnimation\";\nexport * from \"./SerializeLabelDrop\";\nexport * from \"./SubmitLabelDropResultUC\";\nexport * from \"./ToggleLabelDropTargetUC\";\nexport * from \"./ValidateLabelDrop\";\nexport * from \"./labelDropLabelValidator\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC","sourcesContent":["export * from \"./procedureAdapter\";\r\nexport * from \"./procedureHintAdapter\";\r\nexport * from \"./procedureAuthoringAdapter\";\r\nexport * from \"./procedureProgressAdapter\";\r\nexport * from \"./procedureQuizResultAdapter\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC","sourcesContent":["export * from \"./procedureAdapter\";\nexport * from \"./procedureHintAdapter\";\nexport * from \"./procedureAuthoringAdapter\";\nexport * from \"./procedureProgressAdapter\";\nexport * from \"./procedureQuizResultAdapter\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,gBAAgB;IAAtB;QACE,cAAS,GAAgB;YACvB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;IAmBJ,CAAC;IAjBC,SAAS,CAAC,UAAyB,EAAE,KAAgC;QACnE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,WAAW,CAAC,MAAM;gBAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAgC;QAEhC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureVM } from \"../types\";\r\n\r\nclass ProcedureAdapter implements SingletonPmAdapter<ProcedureVM> {\r\n defaultVM: ProcedureVM = {\r\n eventIds: [],\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n isRecording: false,\r\n userEventLog: [],\r\n currentStepIndex: 0,\r\n isComplete: false,\r\n validationMessage: null,\r\n nextExpectedEvent: null,\r\n progressPercentage: 0,\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n score: null,\r\n isSubmitted: false,\r\n stepCategories: {},\r\n };\r\n\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: ProcedureVM) => void): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.addView(setVM);\r\n if (procedurePM.lastVM) setVM(procedurePM.lastVM);\r\n }\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureVM) => void,\r\n ): void {\r\n const procedurePM = ProcedurePM.get(appObjects);\r\n if (procedurePM) {\r\n procedurePM.removeView(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAdapter = new ProcedureAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,gBAAgB;IAAtB;QACE,cAAS,GAAgB;YACvB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,kBAAkB,EAAE,CAAC;YACrB,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;IAmBJ,CAAC;IAjBC,SAAS,CAAC,UAAyB,EAAE,KAAgC;QACnE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,WAAW,CAAC,MAAM;gBAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAgC;QAEhC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\nimport { ProcedureVM } from \"../types\";\n\nclass ProcedureAdapter implements SingletonPmAdapter<ProcedureVM> {\n defaultVM: ProcedureVM = {\n eventIds: [],\n orderMatters: true,\n showHints: true,\n isQuiz: false,\n isRecording: false,\n userEventLog: [],\n currentStepIndex: 0,\n isComplete: false,\n validationMessage: null,\n nextExpectedEvent: null,\n progressPercentage: 0,\n availableEvents: [],\n authoringValidationMessage:\n \"At least one event must be added to the procedure\",\n score: null,\n isSubmitted: false,\n stepCategories: {},\n };\n\n subscribe(appObjects: AppObjectRepo, setVM: (vm: ProcedureVM) => void): void {\n const procedurePM = ProcedurePM.get(appObjects);\n if (procedurePM) {\n procedurePM.addView(setVM);\n if (procedurePM.lastVM) setVM(procedurePM.lastVM);\n }\n }\n\n unsubscribe(\n appObjects: AppObjectRepo,\n setVM: (vm: ProcedureVM) => void,\n ): void {\n const procedurePM = ProcedurePM.get(appObjects);\n if (procedurePM) {\n procedurePM.removeView(setVM);\n }\n }\n}\n\nexport const procedureAdapter = new ProcedureAdapter();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAdapter } from \"./procedureAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.userEventLog).toEqual([]);\r\n\t\texpect(defaultVM.currentStepIndex).toBe(0);\r\n\t\texpect(defaultVM.isComplete).toBe(false);\r\n\t\texpect(defaultVM.validationMessage).toBeNull();\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t\texpect(defaultVM.progressPercentage).toBe(0);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(defaultVM.score).toBeNull();\r\n\t\texpect(defaultVM.isSubmitted).toBe(false);\r\n\t\texpect(defaultVM.stepCategories).toEqual({});\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalledWith(setVM);\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { procedureAdapter } from \"./procedureAdapter\";\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const mockPM = makeMockProcedurePM(appObjects);\n return { appObjects, mockPM };\n}\n\ndescribe(\"procedureAdapter\", () => {\n it(\"has the correct default VM shape\", () => {\n const defaultVM = procedureAdapter.defaultVM;\n expect(defaultVM.eventIds).toEqual([]);\n expect(defaultVM.orderMatters).toBe(true);\n expect(defaultVM.showHints).toBe(true);\n expect(defaultVM.isQuiz).toBe(false);\n expect(defaultVM.userEventLog).toEqual([]);\n expect(defaultVM.currentStepIndex).toBe(0);\n expect(defaultVM.isComplete).toBe(false);\n expect(defaultVM.validationMessage).toBeNull();\n expect(defaultVM.nextExpectedEvent).toBeNull();\n expect(defaultVM.progressPercentage).toBe(0);\n expect(defaultVM.availableEvents).toEqual([]);\n expect(defaultVM.score).toBeNull();\n expect(defaultVM.isSubmitted).toBe(false);\n expect(defaultVM.stepCategories).toEqual({});\n });\n\n it(\"calls addView on the PM when subscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.addView = jest.fn();\n const setVM = jest.fn();\n\n procedureAdapter.subscribe(appObjects, setVM);\n\n expect(mockPM.addView).toHaveBeenCalledWith(setVM);\n });\n\n it(\"calls removeView on the PM when unsubscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.removeView = jest.fn();\n const setVM = jest.fn();\n\n procedureAdapter.unsubscribe(appObjects, setVM);\n\n expect(mockPM.removeView).toHaveBeenCalledWith(setVM);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAuthoringAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,SAAS,gBAAgB,CAAC,EAAe;IACvC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,0BAA0B,EAAE,EAAE,CAAC,0BAA0B;QACzD,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB;IAA/B;QAGE,cAAS,GAAyB;YAChC,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureAuthoringVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToAuthoringVM(vm: ProcedureVM): ProcedureAuthoringVM {\r\n return {\r\n eventIds: vm.eventIds,\r\n availableEvents: vm.availableEvents,\r\n authoringValidationMessage: vm.authoringValidationMessage,\r\n orderMatters: vm.orderMatters,\r\n showHints: vm.showHints,\r\n isQuiz: vm.isQuiz,\r\n stepCategories: vm.stepCategories,\r\n };\r\n}\r\n\r\nclass ProcedureAuthoringAdapter\r\n implements SingletonPmAdapter<ProcedureAuthoringVM>\r\n{\r\n defaultVM: ProcedureAuthoringVM = {\r\n eventIds: [],\r\n availableEvents: [],\r\n authoringValidationMessage:\r\n \"At least one event must be added to the procedure\",\r\n orderMatters: true,\r\n showHints: true,\r\n isQuiz: false,\r\n stepCategories: {},\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureAuthoringVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToAuthoringVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToAuthoringVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureAuthoringVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureAuthoringAdapter = new ProcedureAuthoringAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureAuthoringAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,SAAS,gBAAgB,CAAC,EAAe;IACvC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,eAAe,EAAE,EAAE,CAAC,eAAe;QACnC,0BAA0B,EAAE,EAAE,CAAC,0BAA0B;QACzD,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB;IAA/B;QAGE,cAAS,GAAyB;YAChC,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,0BAA0B,EACxB,mDAAmD;YACrD,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,EAAE;SACnB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAyC;QAEzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\nimport { ProcedureAuthoringVM, ProcedureVM } from \"../types\";\n\nfunction mapToAuthoringVM(vm: ProcedureVM): ProcedureAuthoringVM {\n return {\n eventIds: vm.eventIds,\n availableEvents: vm.availableEvents,\n authoringValidationMessage: vm.authoringValidationMessage,\n orderMatters: vm.orderMatters,\n showHints: vm.showHints,\n isQuiz: vm.isQuiz,\n stepCategories: vm.stepCategories,\n };\n}\n\nclass ProcedureAuthoringAdapter\n implements SingletonPmAdapter<ProcedureAuthoringVM>\n{\n defaultVM: ProcedureAuthoringVM = {\n eventIds: [],\n availableEvents: [],\n authoringValidationMessage:\n \"At least one event must be added to the procedure\",\n orderMatters: true,\n showHints: true,\n isQuiz: false,\n stepCategories: {},\n };\n\n private wrappers = new WeakMap<\n (vm: ProcedureAuthoringVM) => void,\n (vm: ProcedureVM) => void\n >();\n\n subscribe(\n appObjects: AppObjectRepo,\n setVM: (vm: ProcedureAuthoringVM) => void,\n ): void {\n const pm = ProcedurePM.get(appObjects);\n if (!pm) return;\n const wrapper = (vm: ProcedureVM) => setVM(mapToAuthoringVM(vm));\n this.wrappers.set(setVM, wrapper);\n pm.addView(wrapper);\n if (pm.lastVM) setVM(mapToAuthoringVM(pm.lastVM));\n }\n\n unsubscribe(\n appObjects: AppObjectRepo,\n setVM: (vm: ProcedureAuthoringVM) => void,\n ): void {\n const pm = ProcedurePM.get(appObjects);\n if (!pm) return;\n const wrapper = this.wrappers.get(setVM);\n if (wrapper) {\n pm.removeView(wrapper);\n this.wrappers.delete(setVM);\n }\n }\n}\n\nexport const procedureAuthoringAdapter = new ProcedureAuthoringAdapter();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureAuthoringAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureAuthoringAdapter } from \"./procedureAuthoringAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureAuthoringAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureAuthoringAdapter.defaultVM;\r\n\t\texpect(defaultVM.eventIds).toEqual([]);\r\n\t\texpect(defaultVM.availableEvents).toEqual([]);\r\n\t\texpect(typeof defaultVM.authoringValidationMessage).toBe(\"string\");\r\n\t\texpect(defaultVM.orderMatters).toBe(true);\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.isQuiz).toBe(false);\r\n\t\texpect(defaultVM.stepCategories).toEqual({});\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureAuthoringAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only authoring fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureAuthoringAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tnextExpectedEvent: null,\r\n\t\t\tprogressPercentage: 50,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t\tstepCategories: { event_a: \"instructional\" },\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\tavailableEvents: [{ id: \"event_a\", name: \"Event A\" }],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\torderMatters: false,\r\n\t\t\tshowHints: false,\r\n\t\t\tisQuiz: true,\r\n\t\t\tstepCategories: { event_a: \"instructional\" },\r\n\t\t});\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureAuthoringAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureAuthoringAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { procedureAuthoringAdapter } from \"./procedureAuthoringAdapter\";\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const mockPM = makeMockProcedurePM(appObjects);\n return { appObjects, mockPM };\n}\n\ndescribe(\"procedureAuthoringAdapter\", () => {\n it(\"has the correct default VM shape\", () => {\n const defaultVM = procedureAuthoringAdapter.defaultVM;\n expect(defaultVM.eventIds).toEqual([]);\n expect(defaultVM.availableEvents).toEqual([]);\n expect(typeof defaultVM.authoringValidationMessage).toBe(\"string\");\n expect(defaultVM.orderMatters).toBe(true);\n expect(defaultVM.showHints).toBe(true);\n expect(defaultVM.isQuiz).toBe(false);\n expect(defaultVM.stepCategories).toEqual({});\n });\n\n it(\"calls addView on the PM when subscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.addView = jest.fn();\n const setVM = jest.fn();\n\n procedureAuthoringAdapter.subscribe(appObjects, setVM);\n\n expect(mockPM.addView).toHaveBeenCalled();\n });\n\n it(\"calls removeView on the PM when unsubscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.removeView = jest.fn();\n const setVM = jest.fn();\n\n procedureAuthoringAdapter.subscribe(appObjects, setVM);\n procedureAuthoringAdapter.unsubscribe(appObjects, setVM);\n\n expect(mockPM.removeView).toHaveBeenCalled();\n });\n\n it(\"maps only authoring fields from the full VM\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.addView = jest.fn();\n const setVM = jest.fn();\n\n procedureAuthoringAdapter.subscribe(appObjects, setVM);\n\n const capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\n capturedWrapper({\n eventIds: [\"event_a\"],\n availableEvents: [{ id: \"event_a\", name: \"Event A\" }],\n authoringValidationMessage: null,\n orderMatters: false,\n showHints: false,\n isQuiz: true,\n userEventLog: [],\n currentStepIndex: 0,\n isComplete: false,\n validationMessage: null,\n nextExpectedEvent: null,\n progressPercentage: 50,\n score: null,\n isSubmitted: false,\n stepCategories: { event_a: \"instructional\" },\n });\n\n expect(setVM).toHaveBeenCalledWith({\n eventIds: [\"event_a\"],\n availableEvents: [{ id: \"event_a\", name: \"Event A\" }],\n authoringValidationMessage: null,\n orderMatters: false,\n showHints: false,\n isQuiz: true,\n stepCategories: { event_a: \"instructional\" },\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureHintAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,SAAS,WAAW,CAAC,EAAe;IAClC,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB;IAA1B;QACE,cAAS,GAAoB;YAC3B,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;SACxB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAoC;QAEpC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAoC;QAEpC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\r\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\r\nimport { ProcedureHintVM, ProcedureVM } from \"../types\";\r\n\r\nfunction mapToHintVM(vm: ProcedureVM): ProcedureHintVM {\r\n return {\r\n showHints: vm.showHints,\r\n nextExpectedEvent: vm.nextExpectedEvent,\r\n };\r\n}\r\n\r\nclass ProcedureHintAdapter implements SingletonPmAdapter<ProcedureHintVM> {\r\n defaultVM: ProcedureHintVM = {\r\n showHints: true,\r\n nextExpectedEvent: null,\r\n };\r\n\r\n private wrappers = new WeakMap<\r\n (vm: ProcedureHintVM) => void,\r\n (vm: ProcedureVM) => void\r\n >();\r\n\r\n subscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureHintVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = (vm: ProcedureVM) => setVM(mapToHintVM(vm));\r\n this.wrappers.set(setVM, wrapper);\r\n pm.addView(wrapper);\r\n if (pm.lastVM) setVM(mapToHintVM(pm.lastVM));\r\n }\r\n\r\n unsubscribe(\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: ProcedureHintVM) => void,\r\n ): void {\r\n const pm = ProcedurePM.get(appObjects);\r\n if (!pm) return;\r\n const wrapper = this.wrappers.get(setVM);\r\n if (wrapper) {\r\n pm.removeView(wrapper);\r\n this.wrappers.delete(setVM);\r\n }\r\n }\r\n}\r\n\r\nexport const procedureHintAdapter = new ProcedureHintAdapter();\r\n"]}
1
+ {"version":3,"file":"procedureHintAdapter.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,SAAS,WAAW,CAAC,EAAe;IAClC,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB;IAA1B;QACE,cAAS,GAAoB;YAC3B,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;SACxB,CAAC;QAEM,aAAQ,GAAG,IAAI,OAAO,EAG3B,CAAC;IA0BN,CAAC;IAxBC,SAAS,CACP,UAAyB,EACzB,KAAoC;QAEpC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM;YAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CACT,UAAyB,EACzB,KAAoC;QAEpC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["import { SingletonPmAdapter, AppObjectRepo } from \"@vived/core\";\nimport { ProcedurePM } from \"../PM/ProcedurePM\";\nimport { ProcedureHintVM, ProcedureVM } from \"../types\";\n\nfunction mapToHintVM(vm: ProcedureVM): ProcedureHintVM {\n return {\n showHints: vm.showHints,\n nextExpectedEvent: vm.nextExpectedEvent,\n };\n}\n\nclass ProcedureHintAdapter implements SingletonPmAdapter<ProcedureHintVM> {\n defaultVM: ProcedureHintVM = {\n showHints: true,\n nextExpectedEvent: null,\n };\n\n private wrappers = new WeakMap<\n (vm: ProcedureHintVM) => void,\n (vm: ProcedureVM) => void\n >();\n\n subscribe(\n appObjects: AppObjectRepo,\n setVM: (vm: ProcedureHintVM) => void,\n ): void {\n const pm = ProcedurePM.get(appObjects);\n if (!pm) return;\n const wrapper = (vm: ProcedureVM) => setVM(mapToHintVM(vm));\n this.wrappers.set(setVM, wrapper);\n pm.addView(wrapper);\n if (pm.lastVM) setVM(mapToHintVM(pm.lastVM));\n }\n\n unsubscribe(\n appObjects: AppObjectRepo,\n setVM: (vm: ProcedureHintVM) => void,\n ): void {\n const pm = ProcedurePM.get(appObjects);\n if (!pm) return;\n const wrapper = this.wrappers.get(setVM);\n if (wrapper) {\n pm.removeView(wrapper);\n this.wrappers.delete(setVM);\n }\n }\n}\n\nexport const procedureHintAdapter = new ProcedureHintAdapter();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"procedureHintAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { procedureHintAdapter } from \"./procedureHintAdapter\";\r\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\r\n\r\nfunction makeTestRig() {\r\n\tconst appObjects = makeAppObjectRepo();\r\n\tconst mockPM = makeMockProcedurePM(appObjects);\r\n\treturn { appObjects, mockPM };\r\n}\r\n\r\ndescribe(\"procedureHintAdapter\", () => {\r\n\tit(\"has the correct default VM shape\", () => {\r\n\t\tconst defaultVM = procedureHintAdapter.defaultVM;\r\n\t\texpect(defaultVM.showHints).toBe(true);\r\n\t\texpect(defaultVM.nextExpectedEvent).toBeNull();\r\n\t});\r\n\r\n\tit(\"calls addView on the PM when subscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.addView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"calls removeView on the PM when unsubscribing\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.removeView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\t\tprocedureHintAdapter.unsubscribe(appObjects, setVM);\r\n\r\n\t\texpect(mockPM.removeView).toHaveBeenCalled();\r\n\t});\r\n\r\n\tit(\"maps only hint fields from the full VM\", () => {\r\n\t\tconst { mockPM, appObjects } = makeTestRig();\r\n\t\tmockPM.addView = jest.fn();\r\n\t\tconst setVM = jest.fn();\r\n\r\n\t\tprocedureHintAdapter.subscribe(appObjects, setVM);\r\n\r\n\t\tconst capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\r\n\t\tcapturedWrapper({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t\teventIds: [\"event_a\"],\r\n\t\t\torderMatters: true,\r\n\t\t\tisQuiz: false,\r\n\t\t\tuserEventLog: [],\r\n\t\t\tcurrentStepIndex: 0,\r\n\t\t\tisComplete: false,\r\n\t\t\tvalidationMessage: null,\r\n\t\t\tprogressPercentage: 0,\r\n\t\t\tavailableEvents: [],\r\n\t\t\tauthoringValidationMessage: null,\r\n\t\t\tscore: null,\r\n\t\t\tisSubmitted: false,\r\n\t\t\tstepCategories: { event_a: \"assessed\" },\r\n\t\t});\r\n\r\n\t\texpect(setVM).toHaveBeenCalledWith({\r\n\t\t\tshowHints: false,\r\n\t\t\tnextExpectedEvent: \"event_a\",\r\n\t\t});\r\n\t});\r\n});\r\n"]}
1
+ {"version":3,"file":"procedureHintAdapter.test.js","sourceRoot":"","sources":["../../../../src/Procedure/Adapters/procedureHintAdapter.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { procedureHintAdapter } from \"./procedureHintAdapter\";\nimport { makeMockProcedurePM } from \"../Mocks/MockProcedurePM\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const mockPM = makeMockProcedurePM(appObjects);\n return { appObjects, mockPM };\n}\n\ndescribe(\"procedureHintAdapter\", () => {\n it(\"has the correct default VM shape\", () => {\n const defaultVM = procedureHintAdapter.defaultVM;\n expect(defaultVM.showHints).toBe(true);\n expect(defaultVM.nextExpectedEvent).toBeNull();\n });\n\n it(\"calls addView on the PM when subscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.addView = jest.fn();\n const setVM = jest.fn();\n\n procedureHintAdapter.subscribe(appObjects, setVM);\n\n expect(mockPM.addView).toHaveBeenCalled();\n });\n\n it(\"calls removeView on the PM when unsubscribing\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.removeView = jest.fn();\n const setVM = jest.fn();\n\n procedureHintAdapter.subscribe(appObjects, setVM);\n procedureHintAdapter.unsubscribe(appObjects, setVM);\n\n expect(mockPM.removeView).toHaveBeenCalled();\n });\n\n it(\"maps only hint fields from the full VM\", () => {\n const { mockPM, appObjects } = makeTestRig();\n mockPM.addView = jest.fn();\n const setVM = jest.fn();\n\n procedureHintAdapter.subscribe(appObjects, setVM);\n\n const capturedWrapper = (mockPM.addView as jest.Mock).mock.calls[0][0];\n capturedWrapper({\n showHints: false,\n nextExpectedEvent: \"event_a\",\n eventIds: [\"event_a\"],\n orderMatters: true,\n isQuiz: false,\n userEventLog: [],\n currentStepIndex: 0,\n isComplete: false,\n validationMessage: null,\n progressPercentage: 0,\n availableEvents: [],\n authoringValidationMessage: null,\n score: null,\n isSubmitted: false,\n stepCategories: { event_a: \"assessed\" },\n });\n\n expect(setVM).toHaveBeenCalledWith({\n showHints: false,\n nextExpectedEvent: \"event_a\",\n });\n });\n});\n"]}