@vived/host 4.12.4 → 5.0.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 (59) hide show
  1. package/dist/cjs/AppSandbox/PMs/DevFeaturesEnabledPM.js +6 -5
  2. package/dist/cjs/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  3. package/dist/cjs/AppSandbox/PMs/ShowInspectorPM.js +6 -5
  4. package/dist/cjs/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  5. package/dist/cjs/AppSandbox/PMs/StartInZSpacePM.js +6 -5
  6. package/dist/cjs/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  7. package/dist/cjs/Assets/PMs/AssetFilePM.js +4 -12
  8. package/dist/cjs/Assets/PMs/AssetFilePM.js.map +1 -1
  9. package/dist/cjs/Assets/PMs/ShowArchivedAppAssetPM.js +6 -6
  10. package/dist/cjs/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  11. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js +9 -6
  12. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  13. package/dist/cjs/Logger/PMs/ForwardLogsToConsolePM.js +6 -5
  14. package/dist/cjs/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  15. package/dist/cjs/VivedAPI/PMs/UserTokenPM.js +7 -7
  16. package/dist/cjs/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  17. package/dist/cjs/ZSpaceHost/PMs/EmulateZSpacePM.js +4 -5
  18. package/dist/cjs/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  19. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsActivePM.js +4 -5
  20. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  21. package/dist/esm/AppSandbox/PMs/DevFeaturesEnabledPM.js +7 -6
  22. package/dist/esm/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  23. package/dist/esm/AppSandbox/PMs/ShowInspectorPM.js +7 -6
  24. package/dist/esm/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  25. package/dist/esm/AppSandbox/PMs/StartInZSpacePM.js +7 -6
  26. package/dist/esm/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  27. package/dist/esm/Assets/PMs/AssetFilePM.js +4 -12
  28. package/dist/esm/Assets/PMs/AssetFilePM.js.map +1 -1
  29. package/dist/esm/Assets/PMs/ShowArchivedAppAssetPM.js +7 -7
  30. package/dist/esm/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  31. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js +10 -7
  32. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  33. package/dist/esm/Logger/PMs/ForwardLogsToConsolePM.js +7 -6
  34. package/dist/esm/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  35. package/dist/esm/VivedAPI/PMs/UserTokenPM.js +8 -8
  36. package/dist/esm/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  37. package/dist/esm/ZSpaceHost/PMs/EmulateZSpacePM.js +5 -6
  38. package/dist/esm/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  39. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsActivePM.js +5 -6
  40. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  41. package/dist/types/AppSandbox/PMs/DevFeaturesEnabledPM.d.ts +2 -2
  42. package/dist/types/AppSandbox/PMs/DevFeaturesEnabledPM.d.ts.map +1 -1
  43. package/dist/types/AppSandbox/PMs/ShowInspectorPM.d.ts +2 -2
  44. package/dist/types/AppSandbox/PMs/ShowInspectorPM.d.ts.map +1 -1
  45. package/dist/types/AppSandbox/PMs/StartInZSpacePM.d.ts +2 -2
  46. package/dist/types/AppSandbox/PMs/StartInZSpacePM.d.ts.map +1 -1
  47. package/dist/types/Assets/PMs/ShowArchivedAppAssetPM.d.ts +2 -2
  48. package/dist/types/Assets/PMs/ShowArchivedAppAssetPM.d.ts.map +1 -1
  49. package/dist/types/ChallengeResults/PMs/HasChallengeResultsPM.d.ts +2 -2
  50. package/dist/types/ChallengeResults/PMs/HasChallengeResultsPM.d.ts.map +1 -1
  51. package/dist/types/Logger/PMs/ForwardLogsToConsolePM.d.ts +2 -2
  52. package/dist/types/Logger/PMs/ForwardLogsToConsolePM.d.ts.map +1 -1
  53. package/dist/types/VivedAPI/PMs/UserTokenPM.d.ts +2 -2
  54. package/dist/types/VivedAPI/PMs/UserTokenPM.d.ts.map +1 -1
  55. package/dist/types/ZSpaceHost/PMs/EmulateZSpacePM.d.ts +2 -2
  56. package/dist/types/ZSpaceHost/PMs/EmulateZSpacePM.d.ts.map +1 -1
  57. package/dist/types/ZSpaceHost/PMs/ZSpaceIsActivePM.d.ts +2 -2
  58. package/dist/types/ZSpaceHost/PMs/ZSpaceIsActivePM.d.ts.map +1 -1
  59. package/package.json +2 -2
@@ -4,7 +4,7 @@ exports.DevFeaturesEnabledPM = void 0;
4
4
  exports.makeDevFeaturesEnabledPM = makeDevFeaturesEnabledPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const AppSandboxEntity_1 = require("../Entities/AppSandboxEntity");
7
- class DevFeaturesEnabledPM extends core_1.AppObjectPM {
7
+ class DevFeaturesEnabledPM extends core_1.AppObjectSingletonPM {
8
8
  static get(appObjects) {
9
9
  return (0, core_1.getSingletonComponent)(DevFeaturesEnabledPM.type, appObjects);
10
10
  }
@@ -23,14 +23,15 @@ class DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {
23
23
  }
24
24
  constructor(appObject) {
25
25
  super(appObject, DevFeaturesEnabledPM.type);
26
- this.onEntityChange = () => {
26
+ this.defaultVM = false;
27
+ this.formVM = () => {
27
28
  if (!this.sandbox)
28
29
  return;
29
30
  this.doUpdateView(this.sandbox.enableDevFeatures);
30
31
  };
31
- this.appObjects.registerSingleton(this);
32
- this.sandbox?.addChangeObserver(this.onEntityChange);
33
- this.onEntityChange();
32
+ if (this.sandbox) {
33
+ this.observeEntity(this.sandbox);
34
+ }
34
35
  }
35
36
  }
36
37
  //# sourceMappingURL=DevFeaturesEnabledPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevFeaturesEnabledPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/DevFeaturesEnabledPM.ts"],"names":[],"mappings":";;;AAmBA,4DAIC;AAvBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,oBAAqB,SAAQ,kBAAoB;IAGrE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,oBAAoB,CAAC,IAAI,EACzB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,oDASC;AARQ,yBAAI,GAAG,sBAAsB,CAAC;AAUvC,SAAgB,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAP9C,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class DevFeaturesEnabledPM extends AppObjectPM<boolean> {\r\n static type = \"DevFeaturesEnabledPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DevFeaturesEnabledPM>(\r\n DevFeaturesEnabledPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeDevFeaturesEnabledPM(\r\n appObject: AppObject\r\n): DevFeaturesEnabledPM {\r\n return new DevFeaturesEnabledPMImp(appObject);\r\n}\r\n\r\nclass DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n onEntityChange = () => {\r\n if (!this.sandbox) return;\r\n\r\n this.doUpdateView(this.sandbox.enableDevFeatures);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DevFeaturesEnabledPM.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.sandbox?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DevFeaturesEnabledPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/DevFeaturesEnabledPM.ts"],"names":[],"mappings":";;;AAmBA,4DAIC;AAvBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,oBAAqB,SAAQ,2BAA6B;IAG9E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,oBAAoB,CAAC,IAAI,EACzB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,oDASC;AARQ,yBAAI,GAAG,sBAAsB,CAAC;AAUvC,SAAgB,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IAGxD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAhB9C,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class DevFeaturesEnabledPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"DevFeaturesEnabledPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DevFeaturesEnabledPM>(\r\n DevFeaturesEnabledPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeDevFeaturesEnabledPM(\r\n appObject: AppObject\r\n): DevFeaturesEnabledPM {\r\n return new DevFeaturesEnabledPMImp(appObject);\r\n}\r\n\r\nclass DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {\r\n defaultVM = false;\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.sandbox) return;\r\n this.doUpdateView(this.sandbox.enableDevFeatures);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DevFeaturesEnabledPM.type);\r\n\r\n if (this.sandbox) {\r\n this.observeEntity(this.sandbox);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ exports.ShowInspectorPM = void 0;
4
4
  exports.makeShowInspectorPM = makeShowInspectorPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const AppSandboxEntity_1 = require("../Entities/AppSandboxEntity");
7
- class ShowInspectorPM extends core_1.AppObjectPM {
7
+ class ShowInspectorPM extends core_1.AppObjectSingletonPM {
8
8
  static get(appObjects) {
9
9
  return (0, core_1.getSingletonComponent)(ShowInspectorPM.type, appObjects);
10
10
  }
@@ -23,14 +23,15 @@ class ShowInspectorPMImp extends ShowInspectorPM {
23
23
  }
24
24
  constructor(appObject) {
25
25
  super(appObject, ShowInspectorPM.type);
26
- this.onEntityChange = () => {
26
+ this.defaultVM = false;
27
+ this.formVM = () => {
27
28
  if (!this.sandbox)
28
29
  return;
29
30
  this.doUpdateView(this.sandbox.showBabylonInspector);
30
31
  };
31
- this.appObjects.registerSingleton(this);
32
- this.sandbox?.addChangeObserver(this.onEntityChange);
33
- this.onEntityChange();
32
+ if (this.sandbox) {
33
+ this.observeEntity(this.sandbox);
34
+ }
34
35
  }
35
36
  }
36
37
  //# sourceMappingURL=ShowInspectorPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShowInspectorPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/ShowInspectorPM.ts"],"names":[],"mappings":";;;AAmBA,kDAEC;AArBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,eAAgB,SAAQ,kBAAoB;IAGhE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,0CASC;AARQ,oBAAI,GAAG,iBAAiB,CAAC;AAUlC,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAC9C,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAPzC,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvD,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class ShowInspectorPM extends AppObjectPM<boolean> {\r\n static type = \"ShowInspectorPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ShowInspectorPM>(\r\n ShowInspectorPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeShowInspectorPM(appObject: AppObject): ShowInspectorPM {\r\n return new ShowInspectorPMImp(appObject);\r\n}\r\n\r\nclass ShowInspectorPMImp extends ShowInspectorPM {\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n onEntityChange = () => {\r\n if (!this.sandbox) return;\r\n\r\n this.doUpdateView(this.sandbox.showBabylonInspector);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ShowInspectorPM.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.sandbox?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ShowInspectorPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/ShowInspectorPM.ts"],"names":[],"mappings":";;;AAmBA,kDAEC;AArBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,eAAgB,SAAQ,2BAA6B;IAGzE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,0CASC;AARQ,oBAAI,GAAG,iBAAiB,CAAC;AAUlC,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAG9C,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAhBzC,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class ShowInspectorPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"ShowInspectorPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ShowInspectorPM>(\r\n ShowInspectorPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeShowInspectorPM(appObject: AppObject): ShowInspectorPM {\r\n return new ShowInspectorPMImp(appObject);\r\n}\r\n\r\nclass ShowInspectorPMImp extends ShowInspectorPM {\r\n defaultVM = false;\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.sandbox) return;\r\n this.doUpdateView(this.sandbox.showBabylonInspector);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ShowInspectorPM.type);\r\n\r\n if (this.sandbox) {\r\n this.observeEntity(this.sandbox);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ exports.StartInZSpacePM = void 0;
4
4
  exports.makeStartInZSpacePM = makeStartInZSpacePM;
5
5
  const core_1 = require("@vived/core");
6
6
  const AppSandboxEntity_1 = require("../Entities/AppSandboxEntity");
7
- class StartInZSpacePM extends core_1.AppObjectPM {
7
+ class StartInZSpacePM extends core_1.AppObjectSingletonPM {
8
8
  static get(appObjects) {
9
9
  return (0, core_1.getSingletonComponent)(StartInZSpacePM.type, appObjects);
10
10
  }
@@ -23,14 +23,15 @@ class StartInZSpacePMImp extends StartInZSpacePM {
23
23
  }
24
24
  constructor(appObject) {
25
25
  super(appObject, StartInZSpacePM.type);
26
- this.onEntityChange = () => {
26
+ this.defaultVM = false;
27
+ this.formVM = () => {
27
28
  if (!this.sandbox)
28
29
  return;
29
30
  this.doUpdateView(this.sandbox.startInZSpace);
30
31
  };
31
- this.appObjects.registerSingleton(this);
32
- this.sandbox?.addChangeObserver(this.onEntityChange);
33
- this.onEntityChange();
32
+ if (this.sandbox) {
33
+ this.observeEntity(this.sandbox);
34
+ }
34
35
  }
35
36
  }
36
37
  //# sourceMappingURL=StartInZSpacePM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StartInZSpacePM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/StartInZSpacePM.ts"],"names":[],"mappings":";;;AAmBA,kDAEC;AArBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,eAAgB,SAAQ,kBAAoB;IAGhE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,0CASC;AARQ,oBAAI,GAAG,iBAAiB,CAAC;AAUlC,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAC9C,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAPzC,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class StartInZSpacePM extends AppObjectPM<boolean> {\r\n static type = \"StartInZSpacePM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<StartInZSpacePM>(\r\n StartInZSpacePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeStartInZSpacePM(appObject: AppObject): StartInZSpacePM {\r\n return new StartInZSpacePMImp(appObject);\r\n}\r\n\r\nclass StartInZSpacePMImp extends StartInZSpacePM {\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n onEntityChange = () => {\r\n if (!this.sandbox) return;\r\n\r\n this.doUpdateView(this.sandbox.startInZSpace);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, StartInZSpacePM.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.sandbox?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"StartInZSpacePM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/StartInZSpacePM.ts"],"names":[],"mappings":";;;AAmBA,kDAEC;AArBD,sCAKqB;AACrB,mEAAgE;AAEhE,MAAsB,eAAgB,SAAQ,2BAA6B;IAGzE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,0CASC;AARQ,oBAAI,GAAG,iBAAiB,CAAC;AAUlC,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAG9C,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAhBzC,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class StartInZSpacePM extends AppObjectSingletonPM<boolean> {\r\n static type = \"StartInZSpacePM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<StartInZSpacePM>(\r\n StartInZSpacePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeStartInZSpacePM(appObject: AppObject): StartInZSpacePM {\r\n return new StartInZSpacePMImp(appObject);\r\n}\r\n\r\nclass StartInZSpacePMImp extends StartInZSpacePM {\r\n defaultVM = false;\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.sandbox) return;\r\n this.doUpdateView(this.sandbox.startInZSpace);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, StartInZSpacePM.type);\r\n\r\n if (this.sandbox) {\r\n this.observeEntity(this.sandbox);\r\n }\r\n }\r\n}\r\n"]}
@@ -96,15 +96,6 @@ class AssetFilePMImp extends AssetFilePM {
96
96
  }
97
97
  return true;
98
98
  }
99
- /**
100
- * Cleans up resources and removes observers when the PM is disposed
101
- */
102
- dispose() {
103
- if (this.asset) {
104
- this.asset.removeChangeObserver(this.onAssetChange);
105
- }
106
- super.dispose();
107
- }
108
99
  /**
109
100
  * Creates a new AssetFilePMImp instance
110
101
  *
@@ -116,7 +107,7 @@ class AssetFilePMImp extends AssetFilePM {
116
107
  * Observer callback that updates the view model when the entity changes
117
108
  * Transforms entity data into view model format
118
109
  */
119
- this.onAssetChange = () => {
110
+ this.formVM = () => {
120
111
  if (!this.asset)
121
112
  return;
122
113
  const vm = {
@@ -127,8 +118,9 @@ class AssetFilePMImp extends AssetFilePM {
127
118
  };
128
119
  this.doUpdateView(vm);
129
120
  };
130
- this.asset?.addChangeObserver(this.onAssetChange);
131
- this.onAssetChange();
121
+ if (this.asset) {
122
+ this.observeEntity(this.asset);
123
+ }
132
124
  }
133
125
  }
134
126
  //# sourceMappingURL=AssetFilePM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetFilePM.js","sourceRoot":"","sources":["../../../../src/Assets/PMs/AssetFilePM.ts"],"names":[],"mappings":"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","sourcesContent":["// filepath: c:\\Users\\amosp\\Documents\\WebGL\\vivedlearning_host\\src\\Assets\\PMs\\AssetFilePM.ts\r\nimport { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AssetEntity } from \"../Entities/AssetEntity\";\r\n\r\n/**\r\n * View Model for Asset file information\r\n * Represents the data needed by the view to display asset file status\r\n */\r\nexport interface AssetFileVM {\r\n /** URL to the asset's file blob for direct access */\r\n blobURL: string | undefined;\r\n /** Whether the asset file is currently being fetched */\r\n isFetchingFile: boolean;\r\n /** Whether the asset file has been successfully fetched */\r\n fileHasBeenFetched: boolean;\r\n /** Error that occurred during file fetching, if any */\r\n fetchError: Error | undefined;\r\n}\r\n\r\n/**\r\n * Default empty AssetFileVM for initialization\r\n */\r\nexport const defaultAssetFileVM: AssetFileVM = {\r\n blobURL: undefined,\r\n isFetchingFile: false,\r\n fileHasBeenFetched: false,\r\n fetchError: undefined\r\n};\r\n\r\n/**\r\n * Presentation Manager for Asset file status\r\n *\r\n * The AssetFilePM is responsible for:\r\n * - Converting the file-related properties of AssetEntity into a view-friendly format (AssetFileVM)\r\n * - Notifying the view when asset file status changes\r\n * - Providing comparison utilities for view models\r\n *\r\n * Usage:\r\n * 1. Retrieve an instance with `AssetFilePM.getByID(assetId, appObjects)`\r\n * 2. Subscribe to view updates with `pm.addView(callback)`\r\n * 3. Access current view data with `pm.lastVM`\r\n */\r\nexport abstract class AssetFilePM extends AppObjectPM<AssetFileVM> {\r\n static type = \"AssetFilePM\";\r\n\r\n /**\r\n * Retrieves an AssetFilePM instance for a specific asset by ID\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - The repository of app objects\r\n * @returns The AssetFilePM instance or undefined if not found\r\n */\r\n static getByID(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): AssetFilePM | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"AssetFilePM.getByID\",\r\n \"Unable to find app object by ID \" + assetID\r\n );\r\n return;\r\n }\r\n\r\n const pm = appObject.getComponent<AssetFilePM>(AssetFilePM.type);\r\n if (!pm) {\r\n appObjects.submitWarning(\r\n \"AssetFilePM.getByID\",\r\n \"App Object does not have a AssetFilePM\"\r\n );\r\n return;\r\n }\r\n return pm;\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new AssetFilePM instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n * @returns A new AssetFilePM instance\r\n */\r\nexport function makeAssetFilePM(appObject: AppObject): AssetFilePM {\r\n return new AssetFilePMImp(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of the AssetFilePM abstract class\r\n * Handles the connection between AssetEntity file properties and view\r\n */\r\nclass AssetFilePMImp extends AssetFilePM {\r\n private get asset() {\r\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two AssetFileVM instances for equality\r\n * Used to determine if the view needs to update\r\n *\r\n * @param a - First AssetFileVM to compare\r\n * @param b - Second AssetFileVM to compare\r\n * @returns True if view models are equal, false otherwise\r\n */\r\n vmsAreEqual(a: AssetFileVM, b: AssetFileVM): boolean {\r\n if (a.blobURL !== b.blobURL) return false;\r\n if (a.isFetchingFile !== b.isFetchingFile) return false;\r\n if (a.fileHasBeenFetched !== b.fileHasBeenFetched) return false;\r\n\r\n // Handle errors comparison (both undefined, or same message)\r\n if (a.fetchError !== b.fetchError) {\r\n if (a.fetchError === undefined && b.fetchError !== undefined)\r\n return false;\r\n if (a.fetchError !== undefined && b.fetchError === undefined)\r\n return false;\r\n if (\r\n a.fetchError !== undefined &&\r\n b.fetchError !== undefined &&\r\n a.fetchError.message !== b.fetchError.message\r\n )\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Observer callback that updates the view model when the entity changes\r\n * Transforms entity data into view model format\r\n */\r\n private onAssetChange = () => {\r\n if (!this.asset) return;\r\n\r\n const vm: AssetFileVM = {\r\n blobURL: this.asset.blobURL,\r\n isFetchingFile: this.asset.isFetchingFile,\r\n fileHasBeenFetched: this.asset.fileHasBeenFetched,\r\n fetchError: this.asset.fetchError\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n /**\r\n * Cleans up resources and removes observers when the PM is disposed\r\n */\r\n dispose(): void {\r\n if (this.asset) {\r\n this.asset.removeChangeObserver(this.onAssetChange);\r\n }\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Creates a new AssetFilePMImp instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, AssetFilePM.type);\r\n\r\n this.asset?.addChangeObserver(this.onAssetChange);\r\n this.onAssetChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AssetFilePM.js","sourceRoot":"","sources":["../../../../src/Assets/PMs/AssetFilePM.ts"],"names":[],"mappings":"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","sourcesContent":["// filepath: c:\\Users\\amosp\\Documents\\WebGL\\vivedlearning_host\\src\\Assets\\PMs\\AssetFilePM.ts\r\nimport { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AssetEntity } from \"../Entities/AssetEntity\";\r\n\r\n/**\r\n * View Model for Asset file information\r\n * Represents the data needed by the view to display asset file status\r\n */\r\nexport interface AssetFileVM {\r\n /** URL to the asset's file blob for direct access */\r\n blobURL: string | undefined;\r\n /** Whether the asset file is currently being fetched */\r\n isFetchingFile: boolean;\r\n /** Whether the asset file has been successfully fetched */\r\n fileHasBeenFetched: boolean;\r\n /** Error that occurred during file fetching, if any */\r\n fetchError: Error | undefined;\r\n}\r\n\r\n/**\r\n * Default empty AssetFileVM for initialization\r\n */\r\nexport const defaultAssetFileVM: AssetFileVM = {\r\n blobURL: undefined,\r\n isFetchingFile: false,\r\n fileHasBeenFetched: false,\r\n fetchError: undefined\r\n};\r\n\r\n/**\r\n * Presentation Manager for Asset file status\r\n *\r\n * The AssetFilePM is responsible for:\r\n * - Converting the file-related properties of AssetEntity into a view-friendly format (AssetFileVM)\r\n * - Notifying the view when asset file status changes\r\n * - Providing comparison utilities for view models\r\n *\r\n * Usage:\r\n * 1. Retrieve an instance with `AssetFilePM.getByID(assetId, appObjects)`\r\n * 2. Subscribe to view updates with `pm.addView(callback)`\r\n * 3. Access current view data with `pm.lastVM`\r\n */\r\nexport abstract class AssetFilePM extends AppObjectPM<AssetFileVM> {\r\n static type = \"AssetFilePM\";\r\n\r\n /**\r\n * Retrieves an AssetFilePM instance for a specific asset by ID\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - The repository of app objects\r\n * @returns The AssetFilePM instance or undefined if not found\r\n */\r\n static getByID(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): AssetFilePM | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"AssetFilePM.getByID\",\r\n \"Unable to find app object by ID \" + assetID\r\n );\r\n return;\r\n }\r\n\r\n const pm = appObject.getComponent<AssetFilePM>(AssetFilePM.type);\r\n if (!pm) {\r\n appObjects.submitWarning(\r\n \"AssetFilePM.getByID\",\r\n \"App Object does not have a AssetFilePM\"\r\n );\r\n return;\r\n }\r\n return pm;\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new AssetFilePM instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n * @returns A new AssetFilePM instance\r\n */\r\nexport function makeAssetFilePM(appObject: AppObject): AssetFilePM {\r\n return new AssetFilePMImp(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of the AssetFilePM abstract class\r\n * Handles the connection between AssetEntity file properties and view\r\n */\r\nclass AssetFilePMImp extends AssetFilePM {\r\n private get asset() {\r\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two AssetFileVM instances for equality\r\n * Used to determine if the view needs to update\r\n *\r\n * @param a - First AssetFileVM to compare\r\n * @param b - Second AssetFileVM to compare\r\n * @returns True if view models are equal, false otherwise\r\n */\r\n vmsAreEqual(a: AssetFileVM, b: AssetFileVM): boolean {\r\n if (a.blobURL !== b.blobURL) return false;\r\n if (a.isFetchingFile !== b.isFetchingFile) return false;\r\n if (a.fileHasBeenFetched !== b.fileHasBeenFetched) return false;\r\n\r\n // Handle errors comparison (both undefined, or same message)\r\n if (a.fetchError !== b.fetchError) {\r\n if (a.fetchError === undefined && b.fetchError !== undefined)\r\n return false;\r\n if (a.fetchError !== undefined && b.fetchError === undefined)\r\n return false;\r\n if (\r\n a.fetchError !== undefined &&\r\n b.fetchError !== undefined &&\r\n a.fetchError.message !== b.fetchError.message\r\n )\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Observer callback that updates the view model when the entity changes\r\n * Transforms entity data into view model format\r\n */\r\n formVM = (): void => {\r\n if (!this.asset) return;\r\n\r\n const vm: AssetFileVM = {\r\n blobURL: this.asset.blobURL,\r\n isFetchingFile: this.asset.isFetchingFile,\r\n fileHasBeenFetched: this.asset.fileHasBeenFetched,\r\n fetchError: this.asset.fetchError\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n /**\r\n * Creates a new AssetFilePMImp instance\r\n *\r\n * @param appObject - The app object to associate with this PM\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, AssetFilePM.type);\r\n\r\n if (this.asset) {\r\n this.observeEntity(this.asset);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ exports.ShowArchivedAppAssetPM = void 0;
4
4
  exports.makeShowArchivedAppAssetPM = makeShowArchivedAppAssetPM;
5
5
  const core_1 = require("@vived/core");
6
6
  const AppAssetsEntity_1 = require("../Entities/AppAssetsEntity");
7
- class ShowArchivedAppAssetPM extends core_1.AppObjectPM {
7
+ class ShowArchivedAppAssetPM extends core_1.AppObjectSingletonPM {
8
8
  static get(appObjects) {
9
9
  return (0, core_1.getSingletonComponent)(ShowArchivedAppAssetPM.type, appObjects);
10
10
  }
@@ -20,19 +20,19 @@ class ShowArchivedAppAssetPMImp extends ShowArchivedAppAssetPM {
20
20
  }
21
21
  constructor(appObject) {
22
22
  super(appObject, ShowArchivedAppAssetPM.type);
23
- this.onAssetChange = () => {
23
+ this.defaultVM = false;
24
+ this.formVM = () => {
24
25
  if (!this.appAssets)
25
26
  return;
26
- this.doUpdateView(this.appAssets.showArchived);
27
+ const vm = this.appAssets.showArchived;
28
+ this.doUpdateView(vm);
27
29
  };
28
30
  this.appAssets = appObject.getComponent(AppAssetsEntity_1.AppAssetsEntity.type);
29
31
  if (!this.appAssets) {
30
32
  this.warn("PM has been added to an App Object without an AppAssetsEntity");
31
33
  return;
32
34
  }
33
- this.appObjects.registerSingleton(this);
34
- this.appAssets.addChangeObserver(this.onAssetChange);
35
- this.onAssetChange();
35
+ this.observeEntity(this.appAssets);
36
36
  }
37
37
  }
38
38
  //# sourceMappingURL=ShowArchivedAppAssetPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShowArchivedAppAssetPM.js","sourceRoot":"","sources":["../../../../src/Assets/PMs/ShowArchivedAppAssetPM.ts"],"names":[],"mappings":";;;AAgBA,gEAIC;AApBD,sCAKqB;AACrB,iEAA8D;AAE9D,MAAsB,sBAAuB,SAAQ,kBAAoB;IAGvE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;;AALH,wDAMC;AALQ,2BAAI,GAAG,wBAAwB,CAAC;AAOzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAG5D,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QANxC,kBAAa,GAAG,GAAG,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC,CAAC;QAKA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CACrC,iCAAe,CAAC,IAAI,CACrB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CACP,+DAA+D,CAChE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppAssetsEntity } from \"../Entities/AppAssetsEntity\";\r\n\r\nexport abstract class ShowArchivedAppAssetPM extends AppObjectPM<boolean> {\r\n static type = \"ShowArchivedAppAssetPM\";\r\n\r\n static get(appObjects: AppObjectRepo): ShowArchivedAppAssetPM | undefined {\r\n return getSingletonComponent(ShowArchivedAppAssetPM.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeShowArchivedAppAssetPM(\r\n appObject: AppObject\r\n): ShowArchivedAppAssetPM {\r\n return new ShowArchivedAppAssetPMImp(appObject);\r\n}\r\n\r\nclass ShowArchivedAppAssetPMImp extends ShowArchivedAppAssetPM {\r\n private appAssets?: AppAssetsEntity;\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private onAssetChange = () => {\r\n if (!this.appAssets) return;\r\n this.doUpdateView(this.appAssets.showArchived);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ShowArchivedAppAssetPM.type);\r\n\r\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\r\n AppAssetsEntity.type\r\n );\r\n if (!this.appAssets) {\r\n this.warn(\r\n \"PM has been added to an App Object without an AppAssetsEntity\"\r\n );\r\n return;\r\n }\r\n\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.appAssets.addChangeObserver(this.onAssetChange);\r\n this.onAssetChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ShowArchivedAppAssetPM.js","sourceRoot":"","sources":["../../../../src/Assets/PMs/ShowArchivedAppAssetPM.ts"],"names":[],"mappings":";;;AAgBA,gEAIC;AApBD,sCAKqB;AACrB,iEAA8D;AAE9D,MAAsB,sBAAuB,SAAQ,2BAA6B;IAGhF,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;;AALH,wDAMC;AALQ,2BAAI,GAAG,wBAAwB,CAAC;AAOzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAK5D,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAbhD,cAAS,GAAG,KAAK,CAAC;QAMlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC;QAKA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CACrC,iCAAe,CAAC,IAAI,CACrB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CACP,+DAA+D,CAChE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppAssetsEntity } from \"../Entities/AppAssetsEntity\";\r\n\r\nexport abstract class ShowArchivedAppAssetPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"ShowArchivedAppAssetPM\";\r\n\r\n static get(appObjects: AppObjectRepo): ShowArchivedAppAssetPM | undefined {\r\n return getSingletonComponent(ShowArchivedAppAssetPM.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeShowArchivedAppAssetPM(\r\n appObject: AppObject\r\n): ShowArchivedAppAssetPM {\r\n return new ShowArchivedAppAssetPMImp(appObject);\r\n}\r\n\r\nclass ShowArchivedAppAssetPMImp extends ShowArchivedAppAssetPM {\r\n private appAssets?: AppAssetsEntity;\r\n\r\n defaultVM = false;\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.appAssets) return;\r\n const vm = this.appAssets.showArchived;\r\n this.doUpdateView(vm);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ShowArchivedAppAssetPM.type);\r\n\r\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\r\n AppAssetsEntity.type\r\n );\r\n if (!this.appAssets) {\r\n this.warn(\r\n \"PM has been added to an App Object without an AppAssetsEntity\"\r\n );\r\n return;\r\n }\r\n\r\n this.observeEntity(this.appAssets);\r\n }\r\n}\r\n"]}
@@ -6,7 +6,7 @@ const core_1 = require("@vived/core");
6
6
  const Entities_1 = require("../Entities");
7
7
  const HostStateMachine_1 = require("../../StateMachine/Entities/HostStateMachine");
8
8
  const HostStateEntity_1 = require("../../StateMachine/Entities/HostStateEntity");
9
- class HasChallengeResultsPM extends core_1.AppObjectPM {
9
+ class HasChallengeResultsPM extends core_1.AppObjectSingletonPM {
10
10
  static get(appObjects) {
11
11
  return (0, core_1.getSingletonComponent)(HasChallengeResultsPM.type, appObjects);
12
12
  }
@@ -28,7 +28,8 @@ class HasChallengeResultsPMImp extends HasChallengeResultsPM {
28
28
  }
29
29
  constructor(appObject) {
30
30
  super(appObject, HasChallengeResultsPM.type);
31
- this.onEntityChange = () => {
31
+ this.defaultVM = false;
32
+ this.formVM = () => {
32
33
  if (!this.resultsEntity)
33
34
  return;
34
35
  let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;
@@ -47,10 +48,12 @@ class HasChallengeResultsPMImp extends HasChallengeResultsPM {
47
48
  }
48
49
  this.doUpdateView(hasAssessmentResults);
49
50
  };
50
- this.appObjects.registerSingleton(this);
51
- this.resultsEntity?.addChangeObserver(this.onEntityChange);
52
- this.stateMachine?.addChangeObserver(this.onEntityChange);
53
- this.onEntityChange();
51
+ if (this.resultsEntity) {
52
+ this.observeEntity(this.resultsEntity);
53
+ }
54
+ if (this.stateMachine) {
55
+ this.observeEntity(this.stateMachine);
56
+ }
54
57
  }
55
58
  }
56
59
  //# sourceMappingURL=HasChallengeResultsPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAqBA,8DAIC;AAzBD,sCAKqB;AACrB,0CAAqD;AACrD,mFAAgF;AAChF,iFAAgF;AAEhF,MAAsB,qBAAsB,SAAQ,kBAAoB;IAGtE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1BvC,mBAAc,GAAG,GAAS,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,mCAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private onEntityChange = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\r\n\r\n // If no results are found, check for expected responses in states\r\n if (!hasAssessmentResults && this.stateMachine) {\r\n const stateIds = this.stateMachine.states;\r\n\r\n for (const stateId of stateIds) {\r\n const state = this.stateMachine.getStateByID(stateId);\r\n if (\r\n state &&\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n hasAssessmentResults = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n this.resultsEntity?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAqBA,8DAIC;AAzBD,sCAKqB;AACrB,0CAAqD;AACrD,mFAAgF;AAChF,iFAAgF;AAEhF,MAAsB,qBAAsB,SAAQ,2BAA6B;IAG/E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAG1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1C/C,cAAS,GAAG,KAAK,CAAC;QAgBlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,mCAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n defaultVM = false;\r\n\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\r\n\r\n // If no results are found, check for expected responses in states\r\n if (!hasAssessmentResults && this.stateMachine) {\r\n const stateIds = this.stateMachine.states;\r\n\r\n for (const stateId of stateIds) {\r\n const state = this.stateMachine.getStateByID(stateId);\r\n if (\r\n state &&\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n hasAssessmentResults = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n if (this.resultsEntity) {\r\n this.observeEntity(this.resultsEntity);\r\n }\r\n if (this.stateMachine) {\r\n this.observeEntity(this.stateMachine);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ exports.ForwardLogsToConsolePM = void 0;
4
4
  exports.makeForwardLogsToConsolePM = makeForwardLogsToConsolePM;
5
5
  const core_1 = require("@vived/core");
6
6
  const Entities_1 = require("../Entities");
7
- class ForwardLogsToConsolePM extends core_1.AppObjectPM {
7
+ class ForwardLogsToConsolePM extends core_1.AppObjectSingletonPM {
8
8
  static get(appObjects) {
9
9
  return (0, core_1.getSingletonComponent)(ForwardLogsToConsolePM.type, appObjects);
10
10
  }
@@ -23,14 +23,15 @@ class ForwardLogsToConsolePMImp extends ForwardLogsToConsolePM {
23
23
  }
24
24
  constructor(appObject) {
25
25
  super(appObject, ForwardLogsToConsolePM.type);
26
- this.onEntityChange = () => {
26
+ this.defaultVM = false;
27
+ this.formVM = () => {
27
28
  if (!this.logger)
28
29
  return;
29
30
  this.doUpdateView(this.logger.forwardLogsToConsole);
30
31
  };
31
- this.onEntityChange();
32
- this.logger?.addChangeObserver(this.onEntityChange);
33
- this.appObjects.registerSingleton(this);
32
+ if (this.logger) {
33
+ this.observeEntity(this.logger);
34
+ }
34
35
  }
35
36
  }
36
37
  //# sourceMappingURL=ForwardLogsToConsolePM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForwardLogsToConsolePM.js","sourceRoot":"","sources":["../../../../src/Logger/PMs/ForwardLogsToConsolePM.ts"],"names":[],"mappings":";;;AAkBA,gEAIC;AAtBD,sCAKqB;AACrB,0CAA2C;AAE3C,MAAsB,sBAAuB,SAAQ,kBAAoB;IAGvE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,wDASC;AARQ,2BAAI,GAAG,wBAAwB,CAAC;AASzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAe,uBAAY,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QANxC,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC,CAAC;QAKA,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { LoggerEntity } from \"../Entities\";\r\n\r\nexport abstract class ForwardLogsToConsolePM extends AppObjectPM<boolean> {\r\n static type = \"ForwardLogsToConsolePM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ForwardLogsToConsolePM>(\r\n ForwardLogsToConsolePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\nexport function makeForwardLogsToConsolePM(\r\n appObject: AppObject\r\n): ForwardLogsToConsolePM {\r\n return new ForwardLogsToConsolePMImp(appObject);\r\n}\r\n\r\nclass ForwardLogsToConsolePMImp extends ForwardLogsToConsolePM {\r\n private get logger() {\r\n return this.getCachedSingleton<LoggerEntity>(LoggerEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private onEntityChange = () => {\r\n if (!this.logger) return;\r\n this.doUpdateView(this.logger.forwardLogsToConsole);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ForwardLogsToConsolePM.type);\r\n\r\n this.onEntityChange();\r\n this.logger?.addChangeObserver(this.onEntityChange);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ForwardLogsToConsolePM.js","sourceRoot":"","sources":["../../../../src/Logger/PMs/ForwardLogsToConsolePM.ts"],"names":[],"mappings":";;;AAkBA,gEAIC;AAtBD,sCAKqB;AACrB,0CAA2C;AAE3C,MAAsB,sBAAuB,SAAQ,2BAA6B;IAGhF,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,wDASC;AARQ,2BAAI,GAAG,wBAAwB,CAAC;AASzC,SAAgB,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAG5D,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAe,uBAAY,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAhBhD,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { LoggerEntity } from \"../Entities\";\r\n\r\nexport abstract class ForwardLogsToConsolePM extends AppObjectSingletonPM<boolean> {\r\n static type = \"ForwardLogsToConsolePM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ForwardLogsToConsolePM>(\r\n ForwardLogsToConsolePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\nexport function makeForwardLogsToConsolePM(\r\n appObject: AppObject\r\n): ForwardLogsToConsolePM {\r\n return new ForwardLogsToConsolePMImp(appObject);\r\n}\r\n\r\nclass ForwardLogsToConsolePMImp extends ForwardLogsToConsolePM {\r\n defaultVM = false;\r\n\r\n private get logger() {\r\n return this.getCachedSingleton<LoggerEntity>(LoggerEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.logger) return;\r\n this.doUpdateView(this.logger.forwardLogsToConsole);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ForwardLogsToConsolePM.type);\r\n\r\n if (this.logger) {\r\n this.observeEntity(this.logger);\r\n }\r\n }\r\n}\r\n"]}
@@ -28,7 +28,7 @@ const Entities_1 = require("../Entities");
28
28
  * UserTokenPM provides presentation logic for user authentication token display.
29
29
  * Abstract class that manages the view model for user token information.
30
30
  */
31
- class UserTokenPM extends core_1.AppObjectPM {
31
+ class UserTokenPM extends core_1.AppObjectSingletonPM {
32
32
  /**
33
33
  * Retrieves the singleton UserTokenPM from the app objects repository
34
34
  * @param appObjects The AppObjectRepo to get the singleton from
@@ -72,18 +72,18 @@ class UserTokenPMImp extends UserTokenPM {
72
72
  }
73
73
  constructor(appObject) {
74
74
  super(appObject, UserTokenPM.type);
75
+ this.defaultVM = "";
75
76
  /**
76
- * Handles entity change notifications and updates the view
77
- * Called when the VivedAPIEntity's user token changes
77
+ * Forms the view model from the entity state
78
78
  */
79
- this.onEntityChange = () => {
79
+ this.formVM = () => {
80
80
  if (!this.sandbox)
81
81
  return;
82
82
  this.doUpdateView(this.sandbox.userToken);
83
83
  };
84
- this.appObjects.registerSingleton(this);
85
- this.sandbox?.addChangeObserver(this.onEntityChange);
86
- this.onEntityChange();
84
+ if (this.sandbox) {
85
+ this.observeEntity(this.sandbox);
86
+ }
87
87
  }
88
88
  }
89
89
  //# sourceMappingURL=UserTokenPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserTokenPM.js","sourceRoot":"","sources":["../../../../src/VivedAPI/PMs/UserTokenPM.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAiCH,0CAEC;AAjCD,sCAKqB;AACrB,0CAA6C;AAE7C;;;GAGG;AACH,MAAsB,WAAY,SAAQ,kBAAmB;IAI3D;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAc,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;;AAXH,kCAYC;AAXC,gDAAgD;AACzC,gBAAI,GAAG,aAAa,CAAC;AAY9B;;;;GAIG;AACH,SAAgB,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,cAAe,SAAQ,WAAW;IACtC;;;OAGG;IACH,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,yBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,CAAS,EAAE,CAAS;QAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAYD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAXrC;;;WAGG;QACH,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["/**\r\n * UserTokenPM.ts\r\n *\r\n * This file defines the Presentation Manager for user authentication token display.\r\n * UserTokenPM bridges the VivedAPIEntity token state with UI components,\r\n * managing the display and interaction of user authentication tokens.\r\n *\r\n * Key concepts:\r\n * - PM extends AppObjectPM and manages view model state for user tokens\r\n * - Observes VivedAPIEntity token changes and updates UI accordingly\r\n * - Provides value comparison logic for efficient view updates\r\n * - Implements singleton pattern for system-wide token display management\r\n * - Handles token state transitions and notifications\r\n *\r\n * Usage pattern:\r\n * 1. Get the singleton PM using UserTokenPM.get(appObjects)\r\n * 2. Connect to UI components that display user authentication tokens\r\n * 3. PM automatically updates views when entity token state changes\r\n * 4. Use with adapters to bind to specific UI frameworks\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { VivedAPIEntity } from \"../Entities\";\r\n\r\n/**\r\n * UserTokenPM provides presentation logic for user authentication token display.\r\n * Abstract class that manages the view model for user token information.\r\n */\r\nexport abstract class UserTokenPM extends AppObjectPM<string> {\r\n /** Unique type identifier for this component */\r\n static type = \"UserTokenPM\";\r\n\r\n /**\r\n * Retrieves the singleton UserTokenPM from the app objects repository\r\n * @param appObjects The AppObjectRepo to get the singleton from\r\n * @returns The UserTokenPM singleton or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<UserTokenPM>(UserTokenPM.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UserTokenPM instance\r\n * @param appObject The AppObject to attach the PM to\r\n * @returns A new UserTokenPM instance\r\n */\r\nexport function makeUserTokenPM(appObject: AppObject): UserTokenPM {\r\n return new UserTokenPMImp(appObject);\r\n}\r\n\r\n/**\r\n * Concrete implementation of UserTokenPM\r\n * This private class handles the actual presentation logic for user token management\r\n */\r\nclass UserTokenPMImp extends UserTokenPM {\r\n /**\r\n * Gets the VivedAPIEntity from the same app objects repository\r\n * Uses cached singleton access for efficient repeated access\r\n */\r\n private get sandbox() {\r\n return this.getCachedSingleton<VivedAPIEntity>(VivedAPIEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two token string values for equality to determine if view updates are needed\r\n * @param a First token string to compare\r\n * @param b Second token string to compare\r\n * @returns True if the token values are equal, false otherwise\r\n */\r\n vmsAreEqual(a: string, b: string): boolean {\r\n return a === b;\r\n }\r\n\r\n /**\r\n * Handles entity change notifications and updates the view\r\n * Called when the VivedAPIEntity's user token changes\r\n */\r\n onEntityChange = () => {\r\n if (!this.sandbox) return;\r\n\r\n this.doUpdateView(this.sandbox.userToken);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, UserTokenPM.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.sandbox?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UserTokenPM.js","sourceRoot":"","sources":["../../../../src/VivedAPI/PMs/UserTokenPM.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAiCH,0CAEC;AAjCD,sCAKqB;AACrB,0CAA6C;AAE7C;;;GAGG;AACH,MAAsB,WAAY,SAAQ,2BAA4B;IAIpE;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAc,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;;AAXH,kCAYC;AAXC,gDAAgD;AACzC,gBAAI,GAAG,aAAa,CAAC;AAY9B;;;;GAIG;AACH,SAAgB,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,cAAe,SAAQ,WAAW;IAGtC;;;OAGG;IACH,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,yBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,CAAS,EAAE,CAAS;QAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAUD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QA7BrC,cAAS,GAAG,EAAE,CAAC;QAoBf;;WAEG;QACH,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\r\n * UserTokenPM.ts\r\n *\r\n * This file defines the Presentation Manager for user authentication token display.\r\n * UserTokenPM bridges the VivedAPIEntity token state with UI components,\r\n * managing the display and interaction of user authentication tokens.\r\n *\r\n * Key concepts:\r\n * - PM extends AppObjectPM and manages view model state for user tokens\r\n * - Observes VivedAPIEntity token changes and updates UI accordingly\r\n * - Provides value comparison logic for efficient view updates\r\n * - Implements singleton pattern for system-wide token display management\r\n * - Handles token state transitions and notifications\r\n *\r\n * Usage pattern:\r\n * 1. Get the singleton PM using UserTokenPM.get(appObjects)\r\n * 2. Connect to UI components that display user authentication tokens\r\n * 3. PM automatically updates views when entity token state changes\r\n * 4. Use with adapters to bind to specific UI frameworks\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { VivedAPIEntity } from \"../Entities\";\r\n\r\n/**\r\n * UserTokenPM provides presentation logic for user authentication token display.\r\n * Abstract class that manages the view model for user token information.\r\n */\r\nexport abstract class UserTokenPM extends AppObjectSingletonPM<string> {\r\n /** Unique type identifier for this component */\r\n static type = \"UserTokenPM\";\r\n\r\n /**\r\n * Retrieves the singleton UserTokenPM from the app objects repository\r\n * @param appObjects The AppObjectRepo to get the singleton from\r\n * @returns The UserTokenPM singleton or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<UserTokenPM>(UserTokenPM.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UserTokenPM instance\r\n * @param appObject The AppObject to attach the PM to\r\n * @returns A new UserTokenPM instance\r\n */\r\nexport function makeUserTokenPM(appObject: AppObject): UserTokenPM {\r\n return new UserTokenPMImp(appObject);\r\n}\r\n\r\n/**\r\n * Concrete implementation of UserTokenPM\r\n * This private class handles the actual presentation logic for user token management\r\n */\r\nclass UserTokenPMImp extends UserTokenPM {\r\n defaultVM = \"\";\r\n\r\n /**\r\n * Gets the VivedAPIEntity from the same app objects repository\r\n * Uses cached singleton access for efficient repeated access\r\n */\r\n private get sandbox() {\r\n return this.getCachedSingleton<VivedAPIEntity>(VivedAPIEntity.type);\r\n }\r\n\r\n /**\r\n * Compares two token string values for equality to determine if view updates are needed\r\n * @param a First token string to compare\r\n * @param b Second token string to compare\r\n * @returns True if the token values are equal, false otherwise\r\n */\r\n vmsAreEqual(a: string, b: string): boolean {\r\n return a === b;\r\n }\r\n\r\n /**\r\n * Forms the view model from the entity state\r\n */\r\n formVM = (): void => {\r\n if (!this.sandbox) return;\r\n this.doUpdateView(this.sandbox.userToken);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, UserTokenPM.type);\r\n\r\n if (this.sandbox) {\r\n this.observeEntity(this.sandbox);\r\n }\r\n }\r\n}\r\n"]}
@@ -38,7 +38,7 @@ const Entities_1 = require("../Entities");
38
38
  * Emulation is useful during development or when testing on systems without zSpace hardware.
39
39
  * When emulation is enabled, many zSpace-specific UI features can still be tested.
40
40
  */
41
- class EmulateZSpacePM extends core_1.AppObjectPM {
41
+ class EmulateZSpacePM extends core_1.AppObjectSingletonPM {
42
42
  /**
43
43
  * Get the singleton instance of EmulateZSpacePM
44
44
  * @param appObjects - The AppObjectRepo instance
@@ -69,7 +69,8 @@ class EmulateZSpacePMImp extends EmulateZSpacePM {
69
69
  }
70
70
  constructor(appObject) {
71
71
  super(appObject, EmulateZSpacePM.type);
72
- this.onEntityChange = () => {
72
+ this.defaultVM = false;
73
+ this.formVM = () => {
73
74
  if (!this.zSpace)
74
75
  return;
75
76
  this.doUpdateView(this.zSpace.emulate);
@@ -79,9 +80,7 @@ class EmulateZSpacePMImp extends EmulateZSpacePM {
79
80
  this.error("PM Has been added to an app object that does not have a ZSpaceHostEntity");
80
81
  return;
81
82
  }
82
- zSpace.addChangeObserver(this.onEntityChange);
83
- this.onEntityChange();
84
- this.appObjects.registerSingleton(this);
83
+ this.observeEntity(zSpace);
85
84
  }
86
85
  }
87
86
  //# sourceMappingURL=EmulateZSpacePM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmulateZSpacePM.js","sourceRoot":"","sources":["../../../../src/ZSpaceHost/PMs/EmulateZSpacePM.ts"],"names":[],"mappings":";;;AAiEA,kDAEC;AAnED,sCAKqB;AACrB,0CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAsB,eAAgB,SAAQ,kBAAoB;IAGhE;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AAbH,0CAcC;AAbQ,oBAAI,GAAG,iBAAiB,CAAC;AAelC;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAC9C,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,2BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAPjC,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC;QAKA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CACR,0EAA0E,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { ZSpaceHostEntity } from \"../Entities\";\r\n\r\n/**\r\n * EmulateZSpacePM is a singleton Presentation Manager that provides a boolean view model\r\n * indicating whether zSpace emulation is currently enabled.\r\n *\r\n * This PM allows UI components to observe and (through controllers) control whether\r\n * zSpace features should be emulated when actual zSpace hardware is not available.\r\n *\r\n * Usage in UI components:\r\n * 1. Via direct PM access (not recommended for UI components):\r\n * const pm = EmulateZSpacePM.get(appObjects);\r\n * pm?.addView((isEmulating) => { updateUIBasedOn(isEmulating); });\r\n *\r\n * 2. Via adapter (recommended for React/UI components):\r\n * import { emulateZSpacePMAdapter } from \"../Adapters\";\r\n *\r\n * // In a React component:\r\n * const [isEmulating, setIsEmulating] = useState(emulateZSpacePMAdapter.defaultVM);\r\n *\r\n * useEffect(() => {\r\n * emulateZSpacePMAdapter.subscribe(appObjects, setIsEmulating);\r\n * return () => emulateZSpacePMAdapter.unsubscribe(appObjects, setIsEmulating);\r\n * }, [appObjects]);\r\n *\r\n * 3. To toggle emulation state (in a controller or UI event handler):\r\n * import { toggleEmulateZSpace } from \"../Controllers\";\r\n *\r\n * // When handling a UI event:\r\n * const handleToggleEmulation = () => {\r\n * toggleEmulateZSpace(appObjects);\r\n * };\r\n *\r\n * Emulation is useful during development or when testing on systems without zSpace hardware.\r\n * When emulation is enabled, many zSpace-specific UI features can still be tested.\r\n */\r\nexport abstract class EmulateZSpacePM extends AppObjectPM<boolean> {\r\n static type = \"EmulateZSpacePM\";\r\n\r\n /**\r\n * Get the singleton instance of EmulateZSpacePM\r\n * @param appObjects - The AppObjectRepo instance\r\n * @returns The EmulateZSpacePM instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<EmulateZSpacePM>(\r\n EmulateZSpacePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create the EmulateZSpacePM\r\n * For internal use only - external code should use EmulateZSpacePM.get()\r\n *\r\n * @param appObject - The AppObject to attach the PM to\r\n * @returns A new EmulateZSpacePM instance\r\n */\r\nexport function makeEmulateZSpacePM(appObject: AppObject): EmulateZSpacePM {\r\n return new EmulateZSpacePMImp(appObject);\r\n}\r\n\r\nclass EmulateZSpacePMImp extends EmulateZSpacePM {\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private get zSpace() {\r\n return this.getCachedSingleton<ZSpaceHostEntity>(ZSpaceHostEntity.type);\r\n }\r\n\r\n private onEntityChange = () => {\r\n if (!this.zSpace) return;\r\n\r\n this.doUpdateView(this.zSpace.emulate);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EmulateZSpacePM.type);\r\n\r\n const zSpace = this.zSpace;\r\n if (!zSpace) {\r\n this.error(\r\n \"PM Has been added to an app object that does not have a ZSpaceHostEntity\"\r\n );\r\n return;\r\n }\r\n zSpace.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EmulateZSpacePM.js","sourceRoot":"","sources":["../../../../src/ZSpaceHost/PMs/EmulateZSpacePM.ts"],"names":[],"mappings":";;;AAiEA,kDAEC;AAnED,sCAKqB;AACrB,0CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAsB,eAAgB,SAAQ,2BAA6B;IAGzE;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,eAAe,CAAC,IAAI,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;;AAbH,0CAcC;AAbQ,oBAAI,GAAG,iBAAiB,CAAC;AAelC;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAG9C,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,2BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAhBzC,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC;QAKA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CACR,0EAA0E,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { ZSpaceHostEntity } from \"../Entities\";\r\n\r\n/**\r\n * EmulateZSpacePM is a singleton Presentation Manager that provides a boolean view model\r\n * indicating whether zSpace emulation is currently enabled.\r\n *\r\n * This PM allows UI components to observe and (through controllers) control whether\r\n * zSpace features should be emulated when actual zSpace hardware is not available.\r\n *\r\n * Usage in UI components:\r\n * 1. Via direct PM access (not recommended for UI components):\r\n * const pm = EmulateZSpacePM.get(appObjects);\r\n * pm?.addView((isEmulating) => { updateUIBasedOn(isEmulating); });\r\n *\r\n * 2. Via adapter (recommended for React/UI components):\r\n * import { emulateZSpacePMAdapter } from \"../Adapters\";\r\n *\r\n * // In a React component:\r\n * const [isEmulating, setIsEmulating] = useState(emulateZSpacePMAdapter.defaultVM);\r\n *\r\n * useEffect(() => {\r\n * emulateZSpacePMAdapter.subscribe(appObjects, setIsEmulating);\r\n * return () => emulateZSpacePMAdapter.unsubscribe(appObjects, setIsEmulating);\r\n * }, [appObjects]);\r\n *\r\n * 3. To toggle emulation state (in a controller or UI event handler):\r\n * import { toggleEmulateZSpace } from \"../Controllers\";\r\n *\r\n * // When handling a UI event:\r\n * const handleToggleEmulation = () => {\r\n * toggleEmulateZSpace(appObjects);\r\n * };\r\n *\r\n * Emulation is useful during development or when testing on systems without zSpace hardware.\r\n * When emulation is enabled, many zSpace-specific UI features can still be tested.\r\n */\r\nexport abstract class EmulateZSpacePM extends AppObjectSingletonPM<boolean> {\r\n static type = \"EmulateZSpacePM\";\r\n\r\n /**\r\n * Get the singleton instance of EmulateZSpacePM\r\n * @param appObjects - The AppObjectRepo instance\r\n * @returns The EmulateZSpacePM instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<EmulateZSpacePM>(\r\n EmulateZSpacePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create the EmulateZSpacePM\r\n * For internal use only - external code should use EmulateZSpacePM.get()\r\n *\r\n * @param appObject - The AppObject to attach the PM to\r\n * @returns A new EmulateZSpacePM instance\r\n */\r\nexport function makeEmulateZSpacePM(appObject: AppObject): EmulateZSpacePM {\r\n return new EmulateZSpacePMImp(appObject);\r\n}\r\n\r\nclass EmulateZSpacePMImp extends EmulateZSpacePM {\r\n defaultVM = false;\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private get zSpace() {\r\n return this.getCachedSingleton<ZSpaceHostEntity>(ZSpaceHostEntity.type);\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.zSpace) return;\r\n this.doUpdateView(this.zSpace.emulate);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EmulateZSpacePM.type);\r\n\r\n const zSpace = this.zSpace;\r\n if (!zSpace) {\r\n this.error(\r\n \"PM Has been added to an app object that does not have a ZSpaceHostEntity\"\r\n );\r\n return;\r\n }\r\n\r\n this.observeEntity(zSpace);\r\n }\r\n}\r\n"]}
@@ -31,7 +31,7 @@ const ZSpaceHost_1 = require("../Entities/ZSpaceHost");
31
31
  * - Show zSpace-specific controls
32
32
  * - Adjust UI layouts for stereoscopic viewing
33
33
  */
34
- class ZSpaceIsActivePM extends core_1.AppObjectPM {
34
+ class ZSpaceIsActivePM extends core_1.AppObjectSingletonPM {
35
35
  /**
36
36
  * Get the singleton instance of ZSpaceIsActivePM
37
37
  * @param appObjects - The AppObjectRepo instance
@@ -62,7 +62,8 @@ class ZSpaceIsActivePMImp extends ZSpaceIsActivePM {
62
62
  }
63
63
  constructor(appObject) {
64
64
  super(appObject, ZSpaceIsActivePM.type);
65
- this.onEntityChange = () => {
65
+ this.defaultVM = false;
66
+ this.formVM = () => {
66
67
  if (!this.zSpace)
67
68
  return;
68
69
  this.doUpdateView(this.zSpace.isActive);
@@ -72,9 +73,7 @@ class ZSpaceIsActivePMImp extends ZSpaceIsActivePM {
72
73
  this.error("PM Has been added to an app object that does not have a ZSpaceHostEntity");
73
74
  return;
74
75
  }
75
- zSpace.addChangeObserver(this.onEntityChange);
76
- this.onEntityChange();
77
- this.appObjects.registerSingleton(this);
76
+ this.observeEntity(zSpace);
78
77
  }
79
78
  }
80
79
  //# sourceMappingURL=ZSpaceIsActivePM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZSpaceIsActivePM.js","sourceRoot":"","sources":["../../../../src/ZSpaceHost/PMs/ZSpaceIsActivePM.ts"],"names":[],"mappings":";;;AA0DA,oDAEC;AA5DD,sCAKqB;AACrB,uDAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAsB,gBAAiB,SAAQ,kBAAoB;IAGjE;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,gBAAgB,CAAC,IAAI,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;;AAbH,4CAcC;AAbQ,qBAAI,GAAG,kBAAkB,CAAC;AAenC;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,SAAoB;IACvD,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,mBAAoB,SAAQ,gBAAgB;IAChD,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,6BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAPlC,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CACR,0EAA0E,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { ZSpaceHostEntity } from \"../Entities/ZSpaceHost\";\r\n\r\n/**\r\n * ZSpaceIsActivePM is a singleton Presentation Manager that provides a boolean view model\r\n * indicating whether zSpace is currently active.\r\n *\r\n * This PM observes ZSpaceHostEntity and updates its view model when the isActive property changes.\r\n *\r\n * Usage in UI components:\r\n * 1. Via direct PM access (not recommended for UI components):\r\n * const pm = ZSpaceIsActivePM.get(appObjects);\r\n * pm?.addView((isActive) => { updateUIBasedOn(isActive); });\r\n *\r\n * 2. Via adapter (recommended for React/UI components):\r\n * import { zSpaceIsActivePMAdapter } from \"../Adapters\";\r\n *\r\n * // In a React component:\r\n * const [isZSpaceActive, setIsZSpaceActive] = useState(zSpaceIsActivePMAdapter.defaultVM);\r\n *\r\n * useEffect(() => {\r\n * zSpaceIsActivePMAdapter.subscribe(appObjects, setIsZSpaceActive);\r\n * return () => zSpaceIsActivePMAdapter.unsubscribe(appObjects, setIsZSpaceActive);\r\n * }, [appObjects]);\r\n *\r\n * When zSpace is active, UI components may want to:\r\n * - Display 3D content differently\r\n * - Show zSpace-specific controls\r\n * - Adjust UI layouts for stereoscopic viewing\r\n */\r\nexport abstract class ZSpaceIsActivePM extends AppObjectPM<boolean> {\r\n static type = \"ZSpaceIsActivePM\";\r\n\r\n /**\r\n * Get the singleton instance of ZSpaceIsActivePM\r\n * @param appObjects - The AppObjectRepo instance\r\n * @returns The ZSpaceIsActivePM instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ZSpaceIsActivePM>(\r\n ZSpaceIsActivePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create the ZSpaceIsActivePM\r\n * For internal use only - external code should use ZSpaceIsActivePM.get()\r\n *\r\n * @param appObject - The AppObject to attach the PM to\r\n * @returns A new ZSpaceIsActivePM instance\r\n */\r\nexport function makeZSpaceIsActivePM(appObject: AppObject): ZSpaceIsActivePM {\r\n return new ZSpaceIsActivePMImp(appObject);\r\n}\r\n\r\nclass ZSpaceIsActivePMImp extends ZSpaceIsActivePM {\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private get zSpace() {\r\n return this.getCachedSingleton<ZSpaceHostEntity>(ZSpaceHostEntity.type);\r\n }\r\n\r\n private onEntityChange = () => {\r\n if (!this.zSpace) return;\r\n\r\n this.doUpdateView(this.zSpace.isActive);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ZSpaceIsActivePM.type);\r\n\r\n const zSpace = this.zSpace;\r\n if (!zSpace) {\r\n this.error(\r\n \"PM Has been added to an app object that does not have a ZSpaceHostEntity\"\r\n );\r\n return;\r\n }\r\n zSpace.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ZSpaceIsActivePM.js","sourceRoot":"","sources":["../../../../src/ZSpaceHost/PMs/ZSpaceIsActivePM.ts"],"names":[],"mappings":";;;AA0DA,oDAEC;AA5DD,sCAKqB;AACrB,uDAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAsB,gBAAiB,SAAQ,2BAA6B;IAG1E;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,gBAAgB,CAAC,IAAI,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;;AAbH,4CAcC;AAbQ,qBAAI,GAAG,kBAAkB,CAAC;AAenC;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,SAAoB;IACvD,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,mBAAoB,SAAQ,gBAAgB;IAGhD,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,6BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAhB1C,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CACR,0EAA0E,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { ZSpaceHostEntity } from \"../Entities/ZSpaceHost\";\r\n\r\n/**\r\n * ZSpaceIsActivePM is a singleton Presentation Manager that provides a boolean view model\r\n * indicating whether zSpace is currently active.\r\n *\r\n * This PM observes ZSpaceHostEntity and updates its view model when the isActive property changes.\r\n *\r\n * Usage in UI components:\r\n * 1. Via direct PM access (not recommended for UI components):\r\n * const pm = ZSpaceIsActivePM.get(appObjects);\r\n * pm?.addView((isActive) => { updateUIBasedOn(isActive); });\r\n *\r\n * 2. Via adapter (recommended for React/UI components):\r\n * import { zSpaceIsActivePMAdapter } from \"../Adapters\";\r\n *\r\n * // In a React component:\r\n * const [isZSpaceActive, setIsZSpaceActive] = useState(zSpaceIsActivePMAdapter.defaultVM);\r\n *\r\n * useEffect(() => {\r\n * zSpaceIsActivePMAdapter.subscribe(appObjects, setIsZSpaceActive);\r\n * return () => zSpaceIsActivePMAdapter.unsubscribe(appObjects, setIsZSpaceActive);\r\n * }, [appObjects]);\r\n *\r\n * When zSpace is active, UI components may want to:\r\n * - Display 3D content differently\r\n * - Show zSpace-specific controls\r\n * - Adjust UI layouts for stereoscopic viewing\r\n */\r\nexport abstract class ZSpaceIsActivePM extends AppObjectSingletonPM<boolean> {\r\n static type = \"ZSpaceIsActivePM\";\r\n\r\n /**\r\n * Get the singleton instance of ZSpaceIsActivePM\r\n * @param appObjects - The AppObjectRepo instance\r\n * @returns The ZSpaceIsActivePM instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ZSpaceIsActivePM>(\r\n ZSpaceIsActivePM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create the ZSpaceIsActivePM\r\n * For internal use only - external code should use ZSpaceIsActivePM.get()\r\n *\r\n * @param appObject - The AppObject to attach the PM to\r\n * @returns A new ZSpaceIsActivePM instance\r\n */\r\nexport function makeZSpaceIsActivePM(appObject: AppObject): ZSpaceIsActivePM {\r\n return new ZSpaceIsActivePMImp(appObject);\r\n}\r\n\r\nclass ZSpaceIsActivePMImp extends ZSpaceIsActivePM {\r\n defaultVM = false;\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n private get zSpace() {\r\n return this.getCachedSingleton<ZSpaceHostEntity>(ZSpaceHostEntity.type);\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.zSpace) return;\r\n this.doUpdateView(this.zSpace.isActive);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ZSpaceIsActivePM.type);\r\n\r\n const zSpace = this.zSpace;\r\n if (!zSpace) {\r\n this.error(\r\n \"PM Has been added to an app object that does not have a ZSpaceHostEntity\"\r\n );\r\n return;\r\n }\r\n\r\n this.observeEntity(zSpace);\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
- import { getSingletonComponent, AppObjectPM } from "@vived/core";
1
+ import { getSingletonComponent, AppObjectSingletonPM } from "@vived/core";
2
2
  import { AppSandboxEntity } from "../Entities/AppSandboxEntity";
3
- export class DevFeaturesEnabledPM extends AppObjectPM {
3
+ export class DevFeaturesEnabledPM extends AppObjectSingletonPM {
4
4
  static get(appObjects) {
5
5
  return getSingletonComponent(DevFeaturesEnabledPM.type, appObjects);
6
6
  }
@@ -18,14 +18,15 @@ class DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {
18
18
  }
19
19
  constructor(appObject) {
20
20
  super(appObject, DevFeaturesEnabledPM.type);
21
- this.onEntityChange = () => {
21
+ this.defaultVM = false;
22
+ this.formVM = () => {
22
23
  if (!this.sandbox)
23
24
  return;
24
25
  this.doUpdateView(this.sandbox.enableDevFeatures);
25
26
  };
26
- this.appObjects.registerSingleton(this);
27
- this.sandbox?.addChangeObserver(this.onEntityChange);
28
- this.onEntityChange();
27
+ if (this.sandbox) {
28
+ this.observeEntity(this.sandbox);
29
+ }
29
30
  }
30
31
  }
31
32
  //# sourceMappingURL=DevFeaturesEnabledPM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevFeaturesEnabledPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/DevFeaturesEnabledPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,OAAgB,oBAAqB,SAAQ,WAAoB;IAGrE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,oBAAoB,CAAC,IAAI,EACzB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,yBAAI,GAAG,sBAAsB,CAAC;AAUvC,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IACxD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAP9C,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class DevFeaturesEnabledPM extends AppObjectPM<boolean> {\r\n static type = \"DevFeaturesEnabledPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DevFeaturesEnabledPM>(\r\n DevFeaturesEnabledPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeDevFeaturesEnabledPM(\r\n appObject: AppObject\r\n): DevFeaturesEnabledPM {\r\n return new DevFeaturesEnabledPMImp(appObject);\r\n}\r\n\r\nclass DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n onEntityChange = () => {\r\n if (!this.sandbox) return;\r\n\r\n this.doUpdateView(this.sandbox.enableDevFeatures);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DevFeaturesEnabledPM.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.sandbox?.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DevFeaturesEnabledPM.js","sourceRoot":"","sources":["../../../../src/AppSandbox/PMs/DevFeaturesEnabledPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,OAAgB,oBAAqB,SAAQ,oBAA6B;IAG9E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,oBAAoB,CAAC,IAAI,EACzB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,yBAAI,GAAG,sBAAsB,CAAC;AAUvC,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IAGxD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAOD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAhB9C,cAAS,GAAG,KAAK,CAAC;QAUlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity } from \"../Entities/AppSandboxEntity\";\r\n\r\nexport abstract class DevFeaturesEnabledPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"DevFeaturesEnabledPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DevFeaturesEnabledPM>(\r\n DevFeaturesEnabledPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeDevFeaturesEnabledPM(\r\n appObject: AppObject\r\n): DevFeaturesEnabledPM {\r\n return new DevFeaturesEnabledPMImp(appObject);\r\n}\r\n\r\nclass DevFeaturesEnabledPMImp extends DevFeaturesEnabledPM {\r\n defaultVM = false;\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.sandbox) return;\r\n this.doUpdateView(this.sandbox.enableDevFeatures);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DevFeaturesEnabledPM.type);\r\n\r\n if (this.sandbox) {\r\n this.observeEntity(this.sandbox);\r\n }\r\n }\r\n}\r\n"]}