@futdevpro/fsm-dynamo 1.16.38 → 1.16.40

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 (707) hide show
  1. package/.c8rc.json +26 -26
  2. package/.cursor/rules/__assistant_guide.mdc +30 -30
  3. package/.cursor/rules/__main.mdc +64 -64
  4. package/.cursor/rules/_ag_backend-structure.mdc +85 -85
  5. package/.cursor/rules/_ag_backend.mdc +16 -16
  6. package/.cursor/rules/_ag_debug.mdc +7 -7
  7. package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -372
  8. package/.cursor/rules/_ag_file-refactoring.mdc +113 -113
  9. package/.cursor/rules/_ag_fixes_rules.mdc +5 -5
  10. package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
  11. package/.cursor/rules/_ag_frontend.mdc +39 -39
  12. package/.cursor/rules/_ag_import-rules.mdc +44 -44
  13. package/.cursor/rules/_ag_naming.mdc +115 -115
  14. package/.cursor/rules/_ag_running_commands.mdc +4 -4
  15. package/.cursor/rules/_ag_server-controller.mdc +5 -5
  16. package/.cursor/rules/_ag_should-be.mdc +6 -6
  17. package/.cursor/rules/_ag_swearing.mdc +47 -47
  18. package/.cursor/rules/ai_development_guide.md +60 -60
  19. package/.cursor/rules/ai_directives.md +114 -114
  20. package/.cursor/rules/cursor-rules.md +160 -160
  21. package/.cursor/rules/default-command.mdc +464 -464
  22. package/.cursor/rules/error_code_pattern.md +39 -39
  23. package/.cursor/rules/saved rule mcp server use.md +15 -15
  24. package/.dynamo/pipeline.cicd.config.json +157 -157
  25. package/.dynamo/version-bump.config.json +5 -5
  26. package/.github/workflows/main.yml +439 -439
  27. package/.husky/pre-commit +2 -2
  28. package/.vscode/settings.json +11 -11
  29. package/LICENSE +21 -21
  30. package/README.md +701 -693
  31. package/__documentations/2026-05-17-oai-compatible-providers-howto.md +282 -282
  32. package/__documentations/2026-06-01-fr047-fc-foundation.md +48 -48
  33. package/__documentations/2026-06-01-fr047-fr048-code-review.md +153 -153
  34. package/__documentations/2026-06-01-fr047-p1-function-calling-vocabulary.md +75 -75
  35. package/__documentations/2026-06-05-secret-mask-url-cred-any-scheme.md +37 -37
  36. package/__documentations/2026-06-06-ngx-models-merge-completion.md +100 -100
  37. package/__documentations/2026-06-22-dyfm-error-extends-error.md +109 -109
  38. package/__documentations/plans/00-MASTER-ngx-models-fsm-merge.md +75 -75
  39. package/__documentations/plans/01-naming-convention-DyNM-to-DyFM.md +103 -103
  40. package/__documentations/plans/02-consumer-rollout.md +84 -84
  41. package/_specifications/BACKLOG.md +43 -43
  42. package/build/_modules/crypto/_models/artifact-signature.interface.d.ts +37 -0
  43. package/build/_modules/crypto/_models/artifact-signature.interface.d.ts.map +1 -0
  44. package/build/_modules/crypto/_models/artifact-signature.interface.js +3 -0
  45. package/build/_modules/crypto/_models/artifact-signature.interface.js.map +1 -0
  46. package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts +24 -0
  47. package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts.map +1 -0
  48. package/build/_modules/crypto/_services/artifact-signature.control-service.js +281 -0
  49. package/build/_modules/crypto/_services/artifact-signature.control-service.js.map +1 -0
  50. package/build/_modules/crypto/index.d.ts +2 -0
  51. package/build/_modules/crypto/index.d.ts.map +1 -1
  52. package/build/_modules/crypto/index.js +2 -0
  53. package/build/_modules/crypto/index.js.map +1 -1
  54. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts +4 -6
  55. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts.map +1 -1
  56. package/build/_modules/socket/_models/sck-socket-event.control-model.js +9 -7
  57. package/build/_modules/socket/_models/sck-socket-event.control-model.js.map +1 -1
  58. package/eslint.config.js +4 -4
  59. package/nodemon.json +22 -22
  60. package/package.json +306 -306
  61. package/pnpm-workspace.yaml +2 -2
  62. package/scripts/_capture-out/ai-error-capture.json +398 -398
  63. package/scripts/ai-error-capture.js +171 -171
  64. package/scripts/ai-model-registry-check.js +132 -132
  65. package/scripts/crypto/CRYPTO-STABILITY-SOLUTION.md +196 -196
  66. package/scripts/crypto/README.md +113 -113
  67. package/scripts/crypto/demo-crypto-stability.js +120 -120
  68. package/scripts/crypto/stress-test-crypto.js +379 -379
  69. package/scripts/run-coverage-tests.js +24 -24
  70. package/scripts/verify-build-completeness.js +62 -62
  71. package/spec/support/helpers/ts-node-helper.js +9 -9
  72. package/spec/support/jasmine.coverage.json +23 -23
  73. package/spec/support/jasmine.json +24 -24
  74. package/src/_collections/constants/data-sizes.const.ts +40 -40
  75. package/src/_collections/constants/error-defaults.const.ts +20 -20
  76. package/src/_collections/constants/global-settings.const.spec.ts +32 -32
  77. package/src/_collections/constants/global-settings.const.ts +29 -29
  78. package/src/_collections/constants/numbers.const.ts +40 -40
  79. package/src/_collections/constants/times.const.ts +45 -45
  80. package/src/_collections/utils/array.util.spec.ts +306 -306
  81. package/src/_collections/utils/array.util.ts +813 -813
  82. package/src/_collections/utils/async.util.spec.ts +398 -398
  83. package/src/_collections/utils/async.util.ts +208 -208
  84. package/src/_collections/utils/data.util.spec.ts +345 -345
  85. package/src/_collections/utils/data.util.ts +226 -226
  86. package/src/_collections/utils/extract-error-message.util.spec.ts +204 -204
  87. package/src/_collections/utils/extract-error-message.util.ts +223 -223
  88. package/src/_collections/utils/json-error-helper.util.spec.ts +521 -521
  89. package/src/_collections/utils/json-error-helper.util.ts +301 -301
  90. package/src/_collections/utils/log.util.spec.ts +975 -975
  91. package/src/_collections/utils/log.util.ts +667 -667
  92. package/src/_collections/utils/math/box-bounds.spec.ts +73 -73
  93. package/src/_collections/utils/math/box-bounds.util.ts +183 -183
  94. package/src/_collections/utils/math/math.util.spec.ts +94 -94
  95. package/src/_collections/utils/math/math.util.ts +141 -141
  96. package/src/_collections/utils/math/random.util.spec.ts +82 -82
  97. package/src/_collections/utils/math/random.util.ts +139 -139
  98. package/src/_collections/utils/math/trigonometry.util.spec.ts +57 -57
  99. package/src/_collections/utils/math/trigonometry.util.ts +102 -102
  100. package/src/_collections/utils/math/vector2.util.spec.ts +94 -94
  101. package/src/_collections/utils/math/vector2.util.ts +653 -653
  102. package/src/_collections/utils/object.util.spec.ts +646 -646
  103. package/src/_collections/utils/object.util.ts +739 -739
  104. package/src/_collections/utils/regex/password-regex.util.spec.ts +51 -51
  105. package/src/_collections/utils/regex/password-regex.util.ts +65 -65
  106. package/src/_collections/utils/regex/regex.util.spec.ts +42 -42
  107. package/src/_collections/utils/regex/regex.util.ts +6 -6
  108. package/src/_collections/utils/regex/username-regex.util.spec.ts +61 -61
  109. package/src/_collections/utils/regex/username-regex.util.ts +35 -35
  110. package/src/_collections/utils/require-env.util.spec.ts +231 -231
  111. package/src/_collections/utils/require-env.util.ts +138 -138
  112. package/src/_collections/utils/round-list.util.spec.ts +79 -79
  113. package/src/_collections/utils/round-list.util.ts +162 -162
  114. package/src/_collections/utils/secret-mask.util.spec.ts +66 -66
  115. package/src/_collections/utils/secret-mask.util.ts +262 -262
  116. package/src/_collections/utils/stack.util.spec.ts +372 -372
  117. package/src/_collections/utils/stack.util.ts +164 -164
  118. package/src/_collections/utils/string-case.util.spec.ts +441 -441
  119. package/src/_collections/utils/string-case.util.ts +362 -362
  120. package/src/_collections/utils/string.util.spec.ts +975 -975
  121. package/src/_collections/utils/string.util.ts +449 -449
  122. package/src/_collections/utils/time.util.spec.ts +50 -50
  123. package/src/_collections/utils/time.util.ts +481 -481
  124. package/src/_collections/utils/type-cloning-facility.util.spec.ts +51 -51
  125. package/src/_collections/utils/type-cloning-facility.util.ts +168 -168
  126. package/src/_collections/utils/utilities.util.spec.ts +201 -201
  127. package/src/_collections/utils/utilities.util.ts +68 -68
  128. package/src/_collections/utils/uuid.util.spec.ts +30 -30
  129. package/src/_collections/utils/uuid.util.ts +50 -50
  130. package/src/_enums/basic-property-type.enum.ts +20 -20
  131. package/src/_enums/data-model-type.enum.ts +29 -29
  132. package/src/_enums/environment-flag.enum.ts +28 -28
  133. package/src/_enums/error-level.enum.ts +43 -43
  134. package/src/_enums/error-status.enum.ts +30 -30
  135. package/src/_enums/http/http-call-type.enum.ts +43 -43
  136. package/src/_enums/http/http-event-type.enum.ts +40 -40
  137. package/src/_enums/http/http-response-type.enum.ts +18 -18
  138. package/src/_enums/log-style.enum.ts +44 -44
  139. package/src/_enums/server-connection-status.enum.ts +6 -6
  140. package/src/_enums/time/day-of-week.enum.ts +55 -55
  141. package/src/_enums/time/month.enum.ts +25 -25
  142. package/src/_enums/time/relative-date.enum.ts +24 -24
  143. package/src/_models/control-models/data-model-params.control-model.spec.ts +156 -156
  144. package/src/_models/control-models/data-model-params.control-model.ts +362 -362
  145. package/src/_models/control-models/data-property-params.control-model.spec.ts +93 -93
  146. package/src/_models/control-models/data-property-params.control-model.ts +210 -210
  147. package/src/_models/control-models/error.control-model.spec.ts +975 -975
  148. package/src/_models/control-models/error.control-model.ts +1280 -1280
  149. package/src/_models/control-models/http/http-error-response.control-model.spec.ts +116 -116
  150. package/src/_models/control-models/http/http-error-response.control-model.ts +52 -52
  151. package/src/_models/control-models/http/http-headers.control-model.spec.ts +25 -25
  152. package/src/_models/control-models/http/http-headers.control-model.ts +124 -124
  153. package/src/_models/control-models/http/http-response.model-base.spec.ts +46 -46
  154. package/src/_models/control-models/http/http-response.model-base.ts +57 -57
  155. package/src/_models/control-models/poll.control-model.spec.ts +63 -63
  156. package/src/_models/control-models/poll.control-model.ts +151 -151
  157. package/src/_models/control-models/range-value.control-model.spec.ts +187 -187
  158. package/src/_models/control-models/range-value.control-model.ts +289 -289
  159. package/src/_models/control-models/server-status.control-model.spec.ts +66 -66
  160. package/src/_models/control-models/server-status.control-model.ts +94 -94
  161. package/src/_models/control-models/service-endpoint-settings-base.control-model.spec.ts +145 -145
  162. package/src/_models/control-models/service-endpoint-settings-base.control-model.ts +186 -186
  163. package/src/_models/data-models/errors.data-model.spec.ts +71 -71
  164. package/src/_models/data-models/errors.data-model.ts +200 -200
  165. package/src/_models/data-models/metadata.data-model.spec.ts +184 -184
  166. package/src/_models/data-models/metadata.data-model.ts +153 -153
  167. package/src/_models/interfaces/box-bounds.interface.ts +7 -7
  168. package/src/_models/interfaces/environment/global-log-settings.interface.ts +86 -86
  169. package/src/_models/interfaces/environment/global-settings.interface.ts +69 -69
  170. package/src/_models/interfaces/error-defaults.interface.ts +18 -18
  171. package/src/_models/interfaces/paged.interface.ts +12 -12
  172. package/src/_models/interfaces/random-weight.interface.ts +7 -7
  173. package/src/_models/interfaces/route-settings.interface.ts +15 -15
  174. package/src/_models/interfaces/search-query.interface.ts +23 -23
  175. package/src/_models/interfaces/search-result.interface.ts +5 -5
  176. package/src/_models/interfaces/server-error-statistics.interface.ts +24 -24
  177. package/src/_models/interfaces/vector2.interface.ts +20 -20
  178. package/src/_models/types/db-filter.type.ts +110 -110
  179. package/src/_models/types/db-sort.type.ts +4 -4
  180. package/src/_models/types/ds-filter.type.ts +68 -68
  181. package/src/_models/types/ds-sort.type.ts +21 -21
  182. package/src/_modules/ai/_collections/ai-model-ref.util.ts +88 -88
  183. package/src/_modules/ai/_collections/ai-model-registry.util.spec.ts +37 -37
  184. package/src/_modules/ai/_collections/ai-model-registry.util.ts +30 -30
  185. package/src/_modules/ai/_enums/ai-message-role.enum.ts +7 -7
  186. package/src/_modules/ai/_enums/ai-model-type.enum.ts +7 -7
  187. package/src/_modules/ai/_enums/ai-provider.enum.ts +7 -7
  188. package/src/_modules/ai/_models/ai-call-settings.interface.ts +84 -84
  189. package/src/_modules/ai/_models/ai-config.interface.ts +14 -14
  190. package/src/_modules/ai/_models/ai-embedding-request.interface.ts +20 -20
  191. package/src/_modules/ai/_models/ai-embedding-response.interface.ts +26 -26
  192. package/src/_modules/ai/_models/ai-llm-request.interface.ts +24 -24
  193. package/src/_modules/ai/_models/ai-llm-response.interface.ts +30 -30
  194. package/src/_modules/ai/_models/ai-message.interface.ts +12 -12
  195. package/src/_modules/ai/_models/ai-model-capabilities.interface.ts +35 -35
  196. package/src/_modules/ai/_models/ai-model-info.interface.ts +63 -63
  197. package/src/_modules/ai/_models/ai-model-settings-schema.interface.ts +52 -52
  198. package/src/_modules/ai/_models/ai-provider-capabilities.interface.ts +28 -28
  199. package/src/_modules/ai/_models/ai-settings.interface.ts +17 -17
  200. package/src/_modules/ai/_models/ai-tool-call.interface.ts +18 -18
  201. package/src/_modules/ai/_models/ai-tool-handler.type.ts +11 -11
  202. package/src/_modules/ai/_models/ai-tool-result.interface.ts +16 -16
  203. package/src/_modules/ai/_models/ai-tool.interface.ts +16 -16
  204. package/src/_modules/ai/_models/ai-user-provider-config.control-model.ts +29 -29
  205. package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +135 -135
  206. package/src/_modules/ai/_modules/anthropic/_enums/aai-model.enum.ts +19 -19
  207. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.spec.ts +28 -28
  208. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.ts +23 -23
  209. package/src/_modules/ai/_modules/anthropic/_models/aai-client-options.interface.ts +10 -10
  210. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.spec.ts +22 -22
  211. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.ts +27 -27
  212. package/src/_modules/ai/_modules/anthropic/_models/aai-user-provider-config.control-model.ts +20 -20
  213. package/src/_modules/ai/_modules/anthropic/index.ts +14 -14
  214. package/src/_modules/ai/_modules/document-ai/_models/dai-embedding-info.interface.ts +12 -12
  215. package/src/_modules/ai/_modules/document-ai/_models/dai-vector-search-params.interface.ts +22 -22
  216. package/src/_modules/ai/_modules/document-ai/index.ts +4 -4
  217. package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +40 -40
  218. package/src/_modules/ai/_modules/fdp-ai/_enums/fdpai-model.enum.ts +6 -6
  219. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-call-settings.control-model.ts +19 -19
  220. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-client-options.interface.ts +11 -11
  221. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-settings.control-model.ts +24 -24
  222. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-user-provider-config.control-model.ts +20 -20
  223. package/src/_modules/ai/_modules/fdp-ai/index.ts +11 -11
  224. package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +161 -161
  225. package/src/_modules/ai/_modules/google-ai/_enums/gai-model.enum.ts +16 -16
  226. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.spec.ts +28 -28
  227. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.ts +21 -21
  228. package/src/_modules/ai/_modules/google-ai/_models/gai-client-options.interface.ts +8 -8
  229. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.spec.ts +22 -22
  230. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.ts +25 -25
  231. package/src/_modules/ai/_modules/google-ai/_models/gai-user-provider-config.control-model.ts +20 -20
  232. package/src/_modules/ai/_modules/google-ai/index.ts +14 -14
  233. package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +59 -59
  234. package/src/_modules/ai/_modules/local-ai/_enums/lai-model.enum.ts +6 -6
  235. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.spec.ts +28 -28
  236. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.ts +18 -18
  237. package/src/_modules/ai/_modules/local-ai/_models/lai-client-options.interface.ts +9 -9
  238. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.spec.ts +22 -22
  239. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.ts +23 -23
  240. package/src/_modules/ai/_modules/local-ai/index.ts +14 -14
  241. package/src/_modules/ai/_modules/open-ai/_collections/oai-embedding-model-dimensions.const.ts +7 -7
  242. package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +404 -404
  243. package/src/_modules/ai/_modules/open-ai/_enums/oai-model.enum.ts +179 -179
  244. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.spec.ts +28 -28
  245. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.ts +21 -21
  246. package/src/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts +81 -81
  247. package/src/_modules/ai/_modules/open-ai/_models/oai-embedding-info.interface.ts +13 -13
  248. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.spec.ts +22 -22
  249. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.ts +25 -25
  250. package/src/_modules/ai/_modules/open-ai/_models/oai-user-provider-config.control-model.ts +21 -21
  251. package/src/_modules/ai/_modules/open-ai/index.ts +28 -28
  252. package/src/_modules/ai/index.ts +27 -27
  253. package/src/_modules/ci-tools/_enums/cit-ci-result-code.enum.ts +11 -11
  254. package/src/_modules/ci-tools/_enums/cit-ci-step-result-code.enum.ts +9 -9
  255. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.spec.ts +58 -58
  256. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.ts +77 -77
  257. package/src/_modules/ci-tools/_models/cit-ci-step-result.interface.ts +12 -12
  258. package/src/_modules/ci-tools/index.ts +8 -8
  259. package/src/_modules/crypto/_collections/crypto-v1.util.ts +225 -225
  260. package/src/_modules/crypto/_collections/crypto-v2.util.ts +331 -331
  261. package/src/_modules/crypto/_collections/crypto-v4.util.ts +702 -702
  262. package/src/_modules/crypto/_collections/crypto.util.db-envelope.spec.ts +51 -51
  263. package/src/_modules/crypto/_collections/crypto.util.edge.spec.ts +605 -605
  264. package/src/_modules/crypto/_collections/crypto.util.extra.spec.ts +642 -642
  265. package/src/_modules/crypto/_collections/crypto.util.simple.spec.ts +512 -512
  266. package/src/_modules/crypto/_collections/crypto.util.ts +748 -748
  267. package/src/_modules/crypto/_models/artifact-signature.interface.ts +39 -0
  268. package/src/_modules/crypto/_services/artifact-signature.control-service.spec.ts +223 -0
  269. package/src/_modules/crypto/_services/artifact-signature.control-service.ts +395 -0
  270. package/src/_modules/crypto/index.ts +16 -14
  271. package/src/_modules/custom-data/_collections/cud-module-settings.const.ts +21 -21
  272. package/src/_modules/custom-data/_models/cud.data-model.spec.ts +38 -38
  273. package/src/_modules/custom-data/_models/cud.data-model.ts +39 -39
  274. package/src/_modules/custom-data/index.ts +10 -10
  275. package/src/_modules/data-handler/_models/data-handler-settings.control-model.spec.ts +110 -110
  276. package/src/_modules/data-handler/_models/data-handler-settings.control-model.ts +110 -110
  277. package/src/_modules/data-handler/_models/data-handler.control-model.spec.ts +473 -473
  278. package/src/_modules/data-handler/_models/data-handler.control-model.ts +486 -486
  279. package/src/_modules/data-handler/_models/data-list-handler.control-model.spec.ts +263 -263
  280. package/src/_modules/data-handler/_models/data-list-handler.control-model.ts +252 -252
  281. package/src/_modules/data-handler/_models/data-search-handler.control-model.spec.ts +417 -417
  282. package/src/_modules/data-handler/_models/data-search-handler.control-model.ts +390 -390
  283. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.spec.ts +374 -374
  284. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.ts +274 -274
  285. package/src/_modules/data-handler/index.ts +6 -6
  286. package/src/_modules/game/_collections/audio-mixer.util.spec.ts +198 -198
  287. package/src/_modules/game/_collections/audio-mixer.util.ts +143 -143
  288. package/src/_modules/game/_collections/audio-scale.util.spec.ts +140 -140
  289. package/src/_modules/game/_collections/audio-scale.util.ts +129 -129
  290. package/src/_modules/game/_enums/audio-channel.enum.ts +22 -22
  291. package/src/_modules/game/_models/audio-mixer-config.interface.ts +53 -53
  292. package/src/_modules/game/_models/audio-mixer-settings.interface.ts +38 -38
  293. package/src/_modules/game/_models/audio-mixer-state.interface.ts +36 -36
  294. package/src/_modules/game/_models/audio-mixer.control-model.spec.ts +376 -376
  295. package/src/_modules/game/_models/audio-mixer.control-model.ts +419 -419
  296. package/src/_modules/game/_models/audio-scale.interface.ts +21 -21
  297. package/src/_modules/game/_models/seeded-random-state.interface.ts +21 -21
  298. package/src/_modules/game/_models/seeded-random.control-model.spec.ts +290 -290
  299. package/src/_modules/game/_models/seeded-random.control-model.ts +311 -311
  300. package/src/_modules/game/index.ts +15 -15
  301. package/src/_modules/location/_collections/assets/country-codes-ISO-3166.json +3239 -3239
  302. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166-all-list.json +19035 -19035
  303. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166.json +4993 -4993
  304. package/src/_modules/location/_collections/assets/country-phone-codes.json +1203 -1203
  305. package/src/_modules/location/_collections/assets/country-subdivisions/afghanistan.json +137 -137
  306. package/src/_modules/location/_collections/assets/country-subdivisions/albania.json +49 -49
  307. package/src/_modules/location/_collections/assets/country-subdivisions/algeria.json +193 -193
  308. package/src/_modules/location/_collections/assets/country-subdivisions/andorra.json +29 -29
  309. package/src/_modules/location/_collections/assets/country-subdivisions/angola.json +73 -73
  310. package/src/_modules/location/_collections/assets/country-subdivisions/antigua-and-barbuda.json +33 -33
  311. package/src/_modules/location/_collections/assets/country-subdivisions/argentina.json +97 -97
  312. package/src/_modules/location/_collections/assets/country-subdivisions/armenia.json +45 -45
  313. package/src/_modules/location/_collections/assets/country-subdivisions/australia.json +33 -33
  314. package/src/_modules/location/_collections/assets/country-subdivisions/austria.json +37 -37
  315. package/src/_modules/location/_collections/assets/country-subdivisions/azerbaijan.json +5 -5
  316. package/src/_modules/location/_collections/assets/country-subdivisions/bahamas.json +125 -125
  317. package/src/_modules/location/_collections/assets/country-subdivisions/bahrain.json +21 -21
  318. package/src/_modules/location/_collections/assets/country-subdivisions/bangladesh.json +29 -29
  319. package/src/_modules/location/_collections/assets/country-subdivisions/barbados.json +45 -45
  320. package/src/_modules/location/_collections/assets/country-subdivisions/belarus.json +29 -29
  321. package/src/_modules/location/_collections/assets/country-subdivisions/belgium.json +13 -13
  322. package/src/_modules/location/_collections/assets/country-subdivisions/belize.json +25 -25
  323. package/src/_modules/location/_collections/assets/country-subdivisions/benin.json +49 -49
  324. package/src/_modules/location/_collections/assets/country-subdivisions/bhutan.json +81 -81
  325. package/src/_modules/location/_collections/assets/country-subdivisions/bolivia.json +37 -37
  326. package/src/_modules/location/_collections/assets/country-subdivisions/bosnia-and-herzegovina.json +13 -13
  327. package/src/_modules/location/_collections/assets/country-subdivisions/botswana.json +65 -65
  328. package/src/_modules/location/_collections/assets/country-subdivisions/brazil.json +109 -109
  329. package/src/_modules/location/_collections/assets/country-subdivisions/brunei-darussalam.json +17 -17
  330. package/src/_modules/location/_collections/assets/country-subdivisions/bulgaria.json +113 -113
  331. package/src/_modules/location/_collections/assets/country-subdivisions/burkina-faso.json +53 -53
  332. package/src/_modules/location/_collections/assets/country-subdivisions/burundi.json +69 -69
  333. package/src/_modules/location/_collections/assets/country-subdivisions/cambodia.json +97 -97
  334. package/src/_modules/location/_collections/assets/country-subdivisions/cameroon.json +41 -41
  335. package/src/_modules/location/_collections/assets/country-subdivisions/canada.json +79 -79
  336. package/src/_modules/location/_collections/assets/country-subdivisions/cape-verde.json +9 -9
  337. package/src/_modules/location/_collections/assets/country-subdivisions/central-african-republic.json +69 -69
  338. package/src/_modules/location/_collections/assets/country-subdivisions/chad.json +89 -89
  339. package/src/_modules/location/_collections/assets/country-subdivisions/chile.json +61 -61
  340. package/src/_modules/location/_collections/assets/country-subdivisions/china.json +205 -205
  341. package/src/_modules/location/_collections/assets/country-subdivisions/colombia.json +133 -133
  342. package/src/_modules/location/_collections/assets/country-subdivisions/comoros.json +13 -13
  343. package/src/_modules/location/_collections/assets/country-subdivisions/congo-the-democratic-republic-of-the.json +45 -45
  344. package/src/_modules/location/_collections/assets/country-subdivisions/congo.json +49 -49
  345. package/src/_modules/location/_collections/assets/country-subdivisions/costa-rica.json +29 -29
  346. package/src/_modules/location/_collections/assets/country-subdivisions/cote-d-ivoire-republic-of.json +77 -77
  347. package/src/_modules/location/_collections/assets/country-subdivisions/croatia.json +85 -85
  348. package/src/_modules/location/_collections/assets/country-subdivisions/cuba.json +65 -65
  349. package/src/_modules/location/_collections/assets/country-subdivisions/cyprus.json +25 -25
  350. package/src/_modules/location/_collections/assets/country-subdivisions/czech-republic.json +57 -57
  351. package/src/_modules/location/_collections/assets/country-subdivisions/denmark.json +21 -21
  352. package/src/_modules/location/_collections/assets/country-subdivisions/djibouti.json +25 -25
  353. package/src/_modules/location/_collections/assets/country-subdivisions/dominica.json +41 -41
  354. package/src/_modules/location/_collections/assets/country-subdivisions/dominican-republic.json +41 -41
  355. package/src/_modules/location/_collections/assets/country-subdivisions/ecuador.json +97 -97
  356. package/src/_modules/location/_collections/assets/country-subdivisions/egypt.json +117 -117
  357. package/src/_modules/location/_collections/assets/country-subdivisions/el-salvador.json +57 -57
  358. package/src/_modules/location/_collections/assets/country-subdivisions/equatorial-guinea.json +9 -9
  359. package/src/_modules/location/_collections/assets/country-subdivisions/eritrea.json +25 -25
  360. package/src/_modules/location/_collections/assets/country-subdivisions/estonia.json +61 -61
  361. package/src/_modules/location/_collections/assets/country-subdivisions/ethiopia.json +45 -45
  362. package/src/_modules/location/_collections/assets/country-subdivisions/fiji.json +21 -21
  363. package/src/_modules/location/_collections/assets/country-subdivisions/finland.json +77 -77
  364. package/src/_modules/location/_collections/assets/country-subdivisions/france.json +133 -133
  365. package/src/_modules/location/_collections/assets/country-subdivisions/gabon.json +37 -37
  366. package/src/_modules/location/_collections/assets/country-subdivisions/gambia.json +25 -25
  367. package/src/_modules/location/_collections/assets/country-subdivisions/georgia.json +49 -49
  368. package/src/_modules/location/_collections/assets/country-subdivisions/germany.json +65 -65
  369. package/src/_modules/location/_collections/assets/country-subdivisions/ghana.json +41 -41
  370. package/src/_modules/location/_collections/assets/country-subdivisions/greece.json +53 -53
  371. package/src/_modules/location/_collections/assets/country-subdivisions/greenland.json +17 -17
  372. package/src/_modules/location/_collections/assets/country-subdivisions/grenada.json +29 -29
  373. package/src/_modules/location/_collections/assets/country-subdivisions/guatemala.json +89 -89
  374. package/src/_modules/location/_collections/assets/country-subdivisions/guinea-bissau.json +13 -13
  375. package/src/_modules/location/_collections/assets/country-subdivisions/guinea.json +33 -33
  376. package/src/_modules/location/_collections/assets/country-subdivisions/guyana.json +41 -41
  377. package/src/_modules/location/_collections/assets/country-subdivisions/haiti.json +41 -41
  378. package/src/_modules/location/_collections/assets/country-subdivisions/honduras.json +73 -73
  379. package/src/_modules/location/_collections/assets/country-subdivisions/hong-kong.json +4 -4
  380. package/src/_modules/location/_collections/assets/country-subdivisions/hungary.json +173 -173
  381. package/src/_modules/location/_collections/assets/country-subdivisions/iceland.json +37 -37
  382. package/src/_modules/location/_collections/assets/country-subdivisions/india.json +181 -181
  383. package/src/_modules/location/_collections/assets/country-subdivisions/indonesia.json +29 -29
  384. package/src/_modules/location/_collections/assets/country-subdivisions/iran-islamic-republic-of.json +125 -125
  385. package/src/_modules/location/_collections/assets/country-subdivisions/iraq.json +73 -73
  386. package/src/_modules/location/_collections/assets/country-subdivisions/ireland.json +17 -17
  387. package/src/_modules/location/_collections/assets/country-subdivisions/israel.json +25 -25
  388. package/src/_modules/location/_collections/assets/country-subdivisions/italy.json +81 -81
  389. package/src/_modules/location/_collections/assets/country-subdivisions/jamaica.json +57 -57
  390. package/src/_modules/location/_collections/assets/country-subdivisions/japan.json +189 -189
  391. package/src/_modules/location/_collections/assets/country-subdivisions/jordan.json +49 -49
  392. package/src/_modules/location/_collections/assets/country-subdivisions/kazakhstan.json +65 -65
  393. package/src/_modules/location/_collections/assets/country-subdivisions/kenya.json +33 -33
  394. package/src/_modules/location/_collections/assets/country-subdivisions/kiribati.json +13 -13
  395. package/src/_modules/location/_collections/assets/country-subdivisions/korea-democratic-people-s-republic-of.json +45 -45
  396. package/src/_modules/location/_collections/assets/country-subdivisions/korea-republic-of.json +69 -69
  397. package/src/_modules/location/_collections/assets/country-subdivisions/kuwait.json +25 -25
  398. package/src/_modules/location/_collections/assets/country-subdivisions/kyrgyzstan.json +33 -33
  399. package/src/_modules/location/_collections/assets/country-subdivisions/lao-people-s-democratic-republic.json +73 -73
  400. package/src/_modules/location/_collections/assets/country-subdivisions/latvia.json +477 -477
  401. package/src/_modules/location/_collections/assets/country-subdivisions/lebanon.json +33 -33
  402. package/src/_modules/location/_collections/assets/country-subdivisions/lesotho.json +41 -41
  403. package/src/_modules/location/_collections/assets/country-subdivisions/liberia.json +61 -61
  404. package/src/_modules/location/_collections/assets/country-subdivisions/libyan-arab-jamahiriya.json +89 -89
  405. package/src/_modules/location/_collections/assets/country-subdivisions/liechtenstein.json +45 -45
  406. package/src/_modules/location/_collections/assets/country-subdivisions/lithuania.json +41 -41
  407. package/src/_modules/location/_collections/assets/country-subdivisions/luxembourg.json +13 -13
  408. package/src/_modules/location/_collections/assets/country-subdivisions/macedonia-the-former-yugoslav-republic-of.json +337 -337
  409. package/src/_modules/location/_collections/assets/country-subdivisions/madagascar.json +25 -25
  410. package/src/_modules/location/_collections/assets/country-subdivisions/malawi.json +13 -13
  411. package/src/_modules/location/_collections/assets/country-subdivisions/malaysia.json +81 -81
  412. package/src/_modules/location/_collections/assets/country-subdivisions/maldives.json +33 -33
  413. package/src/_modules/location/_collections/assets/country-subdivisions/mali.json +37 -37
  414. package/src/_modules/location/_collections/assets/country-subdivisions/malta.json +273 -273
  415. package/src/_modules/location/_collections/assets/country-subdivisions/marshall-islands.json +9 -9
  416. package/src/_modules/location/_collections/assets/country-subdivisions/mauritania.json +53 -53
  417. package/src/_modules/location/_collections/assets/country-subdivisions/mauritius.json +69 -69
  418. package/src/_modules/location/_collections/assets/country-subdivisions/mexico.json +161 -161
  419. package/src/_modules/location/_collections/assets/country-subdivisions/micronesia-federated-states-of.json +17 -17
  420. package/src/_modules/location/_collections/assets/country-subdivisions/moldova-republic-of.json +149 -149
  421. package/src/_modules/location/_collections/assets/country-subdivisions/monaco.json +69 -69
  422. package/src/_modules/location/_collections/assets/country-subdivisions/mongolia.json +89 -89
  423. package/src/_modules/location/_collections/assets/country-subdivisions/montenegro.json +93 -93
  424. package/src/_modules/location/_collections/assets/country-subdivisions/morocco.json +65 -65
  425. package/src/_modules/location/_collections/assets/country-subdivisions/mozambique.json +45 -45
  426. package/src/_modules/location/_collections/assets/country-subdivisions/myanmar.json +57 -57
  427. package/src/_modules/location/_collections/assets/country-subdivisions/namibia.json +57 -57
  428. package/src/_modules/location/_collections/assets/country-subdivisions/nauru.json +57 -57
  429. package/src/_modules/location/_collections/assets/country-subdivisions/nepal.json +21 -21
  430. package/src/_modules/location/_collections/assets/country-subdivisions/netherlands.json +91 -91
  431. package/src/_modules/location/_collections/assets/country-subdivisions/new-zealand.json +111 -111
  432. package/src/_modules/location/_collections/assets/country-subdivisions/nicaragua.json +69 -69
  433. package/src/_modules/location/_collections/assets/country-subdivisions/niger.json +33 -33
  434. package/src/_modules/location/_collections/assets/country-subdivisions/nigeria.json +149 -149
  435. package/src/_modules/location/_collections/assets/country-subdivisions/norway.json +85 -85
  436. package/src/_modules/location/_collections/assets/country-subdivisions/oman.json +37 -37
  437. package/src/_modules/location/_collections/assets/country-subdivisions/pakistan.json +33 -33
  438. package/src/_modules/location/_collections/assets/country-subdivisions/palau.json +65 -65
  439. package/src/_modules/location/_collections/assets/country-subdivisions/palestinian-territory-occupied.json +65 -65
  440. package/src/_modules/location/_collections/assets/country-subdivisions/panama.json +53 -53
  441. package/src/_modules/location/_collections/assets/country-subdivisions/papua-new-guinea.json +81 -81
  442. package/src/_modules/location/_collections/assets/country-subdivisions/paraguay.json +73 -73
  443. package/src/_modules/location/_collections/assets/country-subdivisions/peru.json +105 -105
  444. package/src/_modules/location/_collections/assets/country-subdivisions/philippines.json +69 -69
  445. package/src/_modules/location/_collections/assets/country-subdivisions/poland.json +65 -65
  446. package/src/_modules/location/_collections/assets/country-subdivisions/portugal.json +81 -81
  447. package/src/_modules/location/_collections/assets/country-subdivisions/qatar.json +29 -29
  448. package/src/_modules/location/_collections/assets/country-subdivisions/romania.json +169 -169
  449. package/src/_modules/location/_collections/assets/country-subdivisions/russian-federation.json +499 -499
  450. package/src/_modules/location/_collections/assets/country-subdivisions/rwanda.json +21 -21
  451. package/src/_modules/location/_collections/assets/country-subdivisions/saint-helena-ascension-and-tristan-da-cunha.json +13 -13
  452. package/src/_modules/location/_collections/assets/country-subdivisions/saint-kitts-and-nevis.json +9 -9
  453. package/src/_modules/location/_collections/assets/country-subdivisions/saint-lucia.json +45 -45
  454. package/src/_modules/location/_collections/assets/country-subdivisions/saint-vincent-and-the-grenadines.json +25 -25
  455. package/src/_modules/location/_collections/assets/country-subdivisions/samoa.json +45 -45
  456. package/src/_modules/location/_collections/assets/country-subdivisions/san-marino.json +37 -37
  457. package/src/_modules/location/_collections/assets/country-subdivisions/sao-tome-and-principe.json +9 -9
  458. package/src/_modules/location/_collections/assets/country-subdivisions/saudi-arabia.json +53 -53
  459. package/src/_modules/location/_collections/assets/country-subdivisions/senegal.json +57 -57
  460. package/src/_modules/location/_collections/assets/country-subdivisions/serbia.json +9 -9
  461. package/src/_modules/location/_collections/assets/country-subdivisions/seychelles.json +101 -101
  462. package/src/_modules/location/_collections/assets/country-subdivisions/sierra-leone.json +17 -17
  463. package/src/_modules/location/_collections/assets/country-subdivisions/singapore.json +21 -21
  464. package/src/_modules/location/_collections/assets/country-subdivisions/slovakia.json +33 -33
  465. package/src/_modules/location/_collections/assets/country-subdivisions/slovenia.json +841 -841
  466. package/src/_modules/location/_collections/assets/country-subdivisions/solomon-islands.json +41 -41
  467. package/src/_modules/location/_collections/assets/country-subdivisions/somalia.json +73 -73
  468. package/src/_modules/location/_collections/assets/country-subdivisions/south-africa.json +37 -37
  469. package/src/_modules/location/_collections/assets/country-subdivisions/south-sudan.json +41 -41
  470. package/src/_modules/location/_collections/assets/country-subdivisions/spain.json +346 -346
  471. package/src/_modules/location/_collections/assets/country-subdivisions/sri-lanka.json +37 -37
  472. package/src/_modules/location/_collections/assets/country-subdivisions/sudan.json +69 -69
  473. package/src/_modules/location/_collections/assets/country-subdivisions/suriname.json +41 -41
  474. package/src/_modules/location/_collections/assets/country-subdivisions/swaziland.json +17 -17
  475. package/src/_modules/location/_collections/assets/country-subdivisions/sweden.json +85 -85
  476. package/src/_modules/location/_collections/assets/country-subdivisions/switzerland.json +105 -105
  477. package/src/_modules/location/_collections/assets/country-subdivisions/syrian-arab-republic.json +57 -57
  478. package/src/_modules/location/_collections/assets/country-subdivisions/taiwan-province-of-china.json +93 -93
  479. package/src/_modules/location/_collections/assets/country-subdivisions/tajikistan.json +17 -17
  480. package/src/_modules/location/_collections/assets/country-subdivisions/tanzania-united-republic-of.json +105 -105
  481. package/src/_modules/location/_collections/assets/country-subdivisions/thailand.json +313 -313
  482. package/src/_modules/location/_collections/assets/country-subdivisions/timor-leste.json +53 -53
  483. package/src/_modules/location/_collections/assets/country-subdivisions/togo.json +21 -21
  484. package/src/_modules/location/_collections/assets/country-subdivisions/tonga.json +21 -21
  485. package/src/_modules/location/_collections/assets/country-subdivisions/trinidad-and-tobago.json +65 -65
  486. package/src/_modules/location/_collections/assets/country-subdivisions/tunisia.json +97 -97
  487. package/src/_modules/location/_collections/assets/country-subdivisions/turkey.json +325 -325
  488. package/src/_modules/location/_collections/assets/country-subdivisions/turkmenistan.json +25 -25
  489. package/src/_modules/location/_collections/assets/country-subdivisions/tuvalu.json +33 -33
  490. package/src/_modules/location/_collections/assets/country-subdivisions/uganda.json +17 -17
  491. package/src/_modules/location/_collections/assets/country-subdivisions/ukraine.json +109 -109
  492. package/src/_modules/location/_collections/assets/country-subdivisions/united-arab-emirates.json +29 -29
  493. package/src/_modules/location/_collections/assets/country-subdivisions/united-kingdom.json +1196 -1196
  494. package/src/_modules/location/_collections/assets/country-subdivisions/united-states-minor-outlying-islands.json +37 -37
  495. package/src/_modules/location/_collections/assets/country-subdivisions/united-states.json +286 -286
  496. package/src/_modules/location/_collections/assets/country-subdivisions/uruguay.json +77 -77
  497. package/src/_modules/location/_collections/assets/country-subdivisions/uzbekistan.json +57 -57
  498. package/src/_modules/location/_collections/assets/country-subdivisions/vanuatu.json +25 -25
  499. package/src/_modules/location/_collections/assets/country-subdivisions/venezuela.json +101 -101
  500. package/src/_modules/location/_collections/assets/country-subdivisions/viet-nam.json +257 -257
  501. package/src/_modules/location/_collections/assets/country-subdivisions/yemen.json +85 -85
  502. package/src/_modules/location/_collections/assets/country-subdivisions/zambia.json +37 -37
  503. package/src/_modules/location/_collections/assets/country-subdivisions/zimbabwe.json +41 -41
  504. package/src/_modules/location/_collections/loc-country-divisions.const.ts +10 -10
  505. package/src/_modules/location/_collections/loc-country-isos.const.ts +8 -8
  506. package/src/_modules/location/_collections/loc-regions.util.spec.ts +61 -61
  507. package/src/_modules/location/_collections/loc-regions.util.ts +137 -137
  508. package/src/_modules/location/_collections/loc.util.spec.ts +52 -52
  509. package/src/_modules/location/_collections/loc.util.ts +74 -74
  510. package/src/_modules/location/_enums/loc-region.enum.ts +14 -14
  511. package/src/_modules/location/_enums/loc-sub-region.enum.ts +31 -31
  512. package/src/_modules/location/_enums/loc-subdivision-region-type.enum.ts +47 -47
  513. package/src/_modules/location/_models/loc-coordinates.interface.ts +7 -7
  514. package/src/_modules/location/_models/loc-country-division.interface.ts +8 -8
  515. package/src/_modules/location/_models/loc-country-iso.interface.ts +23 -23
  516. package/src/_modules/location/_models/loc-country-phone-code.interface.ts +9 -9
  517. package/src/_modules/location/_models/loc-division-collection.interface.ts +12 -12
  518. package/src/_modules/location/_models/loc-division-region-data.interface.ts +9 -9
  519. package/src/_modules/location/_models/loc-geo-ip-location.interface.ts +27 -27
  520. package/src/_modules/location/index.ts +22 -22
  521. package/src/_modules/messaging/README.md +279 -279
  522. package/src/_modules/messaging/_collections/msg-module-settings.const.ts +46 -46
  523. package/src/_modules/messaging/_enums/msg-attachment-type.enum.ts +26 -26
  524. package/src/_modules/messaging/_enums/msg-conversation-type.enum.ts +20 -20
  525. package/src/_modules/messaging/_enums/msg-delivery-status.enum.ts +17 -17
  526. package/src/_modules/messaging/_enums/msg-event-key.enum.ts +31 -31
  527. package/src/_modules/messaging/_enums/msg-participant-role.enum.ts +20 -20
  528. package/src/_modules/messaging/_enums/msg-provider-type.enum.ts +7 -7
  529. package/src/_modules/messaging/_enums/msg-status.enum.ts +26 -26
  530. package/src/_modules/messaging/_enums/msg-type.enum.ts +23 -23
  531. package/src/_modules/messaging/_models/msg-attachment.interface.ts +46 -46
  532. package/src/_modules/messaging/_models/msg-conversation.data-model.spec.ts +69 -69
  533. package/src/_modules/messaging/_models/msg-conversation.data-model.ts +96 -96
  534. package/src/_modules/messaging/_models/msg-mention.interface.ts +29 -29
  535. package/src/_modules/messaging/_models/msg-message.data-model.spec.ts +79 -79
  536. package/src/_modules/messaging/_models/msg-message.data-model.ts +127 -127
  537. package/src/_modules/messaging/_models/msg-participant.interface.ts +46 -46
  538. package/src/_modules/messaging/_models/msg-reaction.interface.ts +20 -20
  539. package/src/_modules/messaging/_models/msg-thread-info.interface.ts +35 -35
  540. package/src/_modules/messaging/_modules/agent/_enums/agt-process-step-type.enum.ts +35 -35
  541. package/src/_modules/messaging/_modules/agent/_enums/agt-tool-status.enum.ts +23 -23
  542. package/src/_modules/messaging/_modules/agent/_models/agt-process-step.interface.ts +55 -55
  543. package/src/_modules/messaging/_modules/agent/_models/agt-reasoning-info.interface.ts +26 -26
  544. package/src/_modules/messaging/_modules/agent/_models/agt-tool-usage.interface.ts +37 -37
  545. package/src/_modules/messaging/_modules/agent/index.ts +8 -8
  546. package/src/_modules/messaging/index.ts +28 -28
  547. package/src/_modules/ngx-models/_collections/angular-placeholders.ts +34 -34
  548. package/src/_modules/ngx-models/_collections/button-new-style-settings-presets.const.ts +181 -181
  549. package/src/_modules/ngx-models/_collections/dynamo-global.settings.spec.ts +74 -74
  550. package/src/_modules/ngx-models/_collections/dynamo-global.settings.ts +103 -103
  551. package/src/_modules/ngx-models/_enums/button-new/button-new-border-radius.enum.ts +16 -16
  552. package/src/_modules/ngx-models/_enums/button-new/button-new-icon-style-type.enum.ts +14 -14
  553. package/src/_modules/ngx-models/_enums/button-new/button-new-size.enum.ts +16 -16
  554. package/src/_modules/ngx-models/_enums/button-new/button-new-style-type.enum.ts +18 -18
  555. package/src/_modules/ngx-models/_enums/button-type.enum.ts +36 -36
  556. package/src/_modules/ngx-models/_enums/checkbox-label-position.enum.ts +8 -8
  557. package/src/_modules/ngx-models/_enums/container-type.enum.ts +11 -11
  558. package/src/_modules/ngx-models/_enums/errors/error-level.enum.ts +13 -13
  559. package/src/_modules/ngx-models/_enums/errors/error-notification-color.enum.ts +13 -13
  560. package/src/_modules/ngx-models/_enums/errors/error-ui-mode.enum.ts +13 -13
  561. package/src/_modules/ngx-models/_enums/field-appearance.enum.ts +14 -14
  562. package/src/_modules/ngx-models/_enums/field-type.enum.ts +52 -52
  563. package/src/_modules/ngx-models/_enums/file-type.enum.ts +12 -12
  564. package/src/_modules/ngx-models/_enums/flex/flex-layout-align.enum.ts +21 -21
  565. package/src/_modules/ngx-models/_enums/flex/flex-layout.enum.ts +5 -5
  566. package/src/_modules/ngx-models/_enums/form-access.enum.ts +9 -9
  567. package/src/_modules/ngx-models/_enums/form-reset-data.enum.ts +12 -12
  568. package/src/_modules/ngx-models/_enums/form-store-on.enum.ts +9 -9
  569. package/src/_modules/ngx-models/_enums/forms-new/field-new-validator-type.enum.ts +20 -20
  570. package/src/_modules/ngx-models/_enums/frames/header-item-type.enum.ts +15 -15
  571. package/src/_modules/ngx-models/_enums/frames/header-position.enum.ts +10 -10
  572. package/src/_modules/ngx-models/_enums/frames/side-nav-badge-color.enum.ts +13 -13
  573. package/src/_modules/ngx-models/_enums/html/input-types.enum.ts +27 -27
  574. package/src/_modules/ngx-models/_enums/material-color.enum.ts +16 -16
  575. package/src/_modules/ngx-models/_enums/material-tooltip-position.enum.ts +16 -16
  576. package/src/_modules/ngx-models/_enums/preconfigured-field-type.enum.ts +8 -8
  577. package/src/_modules/ngx-models/_enums/storage-type.enum.ts +15 -15
  578. package/src/_modules/ngx-models/_enums/validator-type.enum.ts +9 -9
  579. package/src/_modules/ngx-models/_enums/voice/audio-mime-type.enum.ts +14 -14
  580. package/src/_modules/ngx-models/_enums/voice/voice-provider-type.enum.ts +26 -26
  581. package/src/_modules/ngx-models/_enums/voice/voice-recorder-state.enum.ts +20 -20
  582. package/src/_modules/ngx-models/_models/control-models/button-new-style-settings.control-model.ts +37 -37
  583. package/src/_modules/ngx-models/_models/control-models/button-params.control-model.spec.ts +70 -70
  584. package/src/_modules/ngx-models/_models/control-models/button-params.control-model.ts +332 -332
  585. package/src/_modules/ngx-models/_models/control-models/chat/chat-column-layout-settings.control-model.ts +28 -28
  586. package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.spec.ts +90 -90
  587. package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.ts +134 -134
  588. package/src/_modules/ngx-models/_models/control-models/data-handler.control-model.ts +529 -529
  589. package/src/_modules/ngx-models/_models/control-models/errors/error-notification.control-model.ts +52 -52
  590. package/src/_modules/ngx-models/_models/control-models/errors/error-settings.control-model.ts +34 -34
  591. package/src/_modules/ngx-models/_models/control-models/errors/errors-pojo.spec.ts +86 -86
  592. package/src/_modules/ngx-models/_models/control-models/errors/errors-settings.control-model.ts +52 -52
  593. package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.spec.ts +109 -109
  594. package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.ts +133 -133
  595. package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.spec.ts +109 -109
  596. package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.ts +160 -160
  597. package/src/_modules/ngx-models/_models/control-models/forms-new/checkbox-field-new-settings.control-model.ts +25 -25
  598. package/src/_modules/ngx-models/_models/control-models/forms-new/date-field-new-settings.control-model.ts +26 -26
  599. package/src/_modules/ngx-models/_models/control-models/forms-new/date-range-field-new-settings.control-model.ts +42 -42
  600. package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-field-new-settings.control-model.ts +35 -35
  601. package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-range-field-new-settings.control-model.ts +35 -35
  602. package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-settings.control-model.ts +85 -85
  603. package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts +42 -42
  604. package/src/_modules/ngx-models/_models/control-models/forms-new/form-new-settings.control-model.ts +40 -40
  605. package/src/_modules/ngx-models/_models/control-models/forms-new/forms-new.spec.ts +179 -179
  606. package/src/_modules/ngx-models/_models/control-models/forms-new/index.ts +20 -20
  607. package/src/_modules/ngx-models/_models/control-models/forms-new/multiselect-field-new-settings.control-model.ts +27 -27
  608. package/src/_modules/ngx-models/_models/control-models/forms-new/number-field-new-settings.control-model.ts +24 -24
  609. package/src/_modules/ngx-models/_models/control-models/forms-new/password-field-new-settings.control-model.ts +35 -35
  610. package/src/_modules/ngx-models/_models/control-models/forms-new/radio-select-field-new-settings.control-model.ts +35 -35
  611. package/src/_modules/ngx-models/_models/control-models/forms-new/select-field-new-settings.control-model.ts +46 -46
  612. package/src/_modules/ngx-models/_models/control-models/forms-new/slider-field-new-settings.control-model.ts +37 -37
  613. package/src/_modules/ngx-models/_models/control-models/forms-new/slider-range-field-new-settings.control-model.ts +45 -45
  614. package/src/_modules/ngx-models/_models/control-models/forms-new/text-field-new-settings.control-model.ts +30 -30
  615. package/src/_modules/ngx-models/_models/control-models/forms-new/textarea-field-new-settings.control-model.ts +22 -22
  616. package/src/_modules/ngx-models/_models/control-models/frames/frames-pojo.spec.ts +108 -108
  617. package/src/_modules/ngx-models/_models/control-models/frames/header-item-settings.control-model.ts +52 -52
  618. package/src/_modules/ngx-models/_models/control-models/frames/main-frame-settings.control-model.ts +40 -40
  619. package/src/_modules/ngx-models/_models/control-models/frames/side-nav-item-settings.control-model.ts +55 -55
  620. package/src/_modules/ngx-models/_models/control-models/frames/side-nav-settings.control-model.ts +30 -30
  621. package/src/_modules/ngx-models/_models/control-models/select.control-model.spec.ts +45 -45
  622. package/src/_modules/ngx-models/_models/control-models/select.control-model.ts +28 -28
  623. package/src/_modules/ngx-models/_models/control-models/voice/voice-pojo.spec.ts +111 -111
  624. package/src/_modules/ngx-models/_models/control-models/voice/voice-providers-settings.control-model.ts +74 -74
  625. package/src/_modules/ngx-models/_models/control-models/voice/voice-record-button-settings.control-model.ts +42 -42
  626. package/src/_modules/ngx-models/_models/control-models/voice/voice-recorder-settings.control-model.ts +37 -37
  627. package/src/_modules/ngx-models/_models/interfaces/button-new-settings.interface.ts +74 -74
  628. package/src/_modules/ngx-models/_models/interfaces/confirm-settings.interface.ts +20 -20
  629. package/src/_modules/ngx-models/_models/interfaces/global-settings.interface.ts +67 -67
  630. package/src/_modules/ngx-models/_models/interfaces/select-options-custom-constructor.interface.ts +40 -40
  631. package/src/_modules/ngx-models/_models/interfaces/storage.service.spec.ts +18 -18
  632. package/src/_modules/ngx-models/_models/interfaces/storage.service.ts +40 -40
  633. package/src/_modules/ngx-models/_models/interfaces/voice/speak-options.interface.ts +19 -19
  634. package/src/_modules/ngx-models/_models/interfaces/voice/speak-result.interface.ts +14 -14
  635. package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-options.interface.ts +14 -14
  636. package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-result.interface.ts +15 -15
  637. package/src/_modules/ngx-models/_models/interfaces/voice/voice-profile.interface.ts +18 -18
  638. package/src/_modules/ngx-models/_models/interfaces/voice/voice-provider-init.interface.ts +21 -21
  639. package/src/_modules/ngx-models/_utils/shared.service.spec.ts +7 -7
  640. package/src/_modules/ngx-models/_utils/shared.service.ts +541 -541
  641. package/src/_modules/ngx-models/index.ts +110 -110
  642. package/src/_modules/pipe/_collections/pip-transforms.const.ts +42 -42
  643. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.spec.ts +47 -47
  644. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.ts +41 -41
  645. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.spec.ts +39 -39
  646. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.ts +30 -30
  647. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.spec.ts +41 -41
  648. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.ts +36 -36
  649. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.spec.ts +62 -62
  650. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.ts +17 -17
  651. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.spec.ts +34 -34
  652. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.ts +25 -25
  653. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.spec.ts +67 -67
  654. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.ts +226 -226
  655. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.spec.ts +28 -28
  656. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.ts +21 -21
  657. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.spec.ts +59 -59
  658. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.ts +106 -106
  659. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.spec.ts +31 -31
  660. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.ts +35 -35
  661. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.spec.ts +44 -44
  662. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.ts +23 -23
  663. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.spec.ts +21 -21
  664. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.ts +33 -33
  665. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.spec.ts +62 -62
  666. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.ts +80 -80
  667. package/src/_modules/pipe/_enums/pip-range-pipe-setting.enum.ts +15 -15
  668. package/src/_modules/pipe/_enums/pip.enum.ts +65 -65
  669. package/src/_modules/pipe/_models/pip-multi-pipe-settings.type.ts +8 -8
  670. package/src/_modules/pipe/_models/pip-transforms.interface.ts +30 -30
  671. package/src/_modules/pipe/index.ts +30 -30
  672. package/src/_modules/security/_collections/stored-secret.util.spec.ts +81 -81
  673. package/src/_modules/security/_collections/stored-secret.util.ts +96 -96
  674. package/src/_modules/security/_models/stored-secret.control-model.ts +55 -55
  675. package/src/_modules/security/index.ts +9 -9
  676. package/src/_modules/socket/_enums/sck-event-key.enum.ts +21 -21
  677. package/src/_modules/socket/_models/sck-client-params.control-model.spec.ts +67 -67
  678. package/src/_modules/socket/_models/sck-client-params.control-model.ts +50 -50
  679. package/src/_modules/socket/_models/sck-socket-event.control-model.spec.ts +89 -66
  680. package/src/_modules/socket/_models/sck-socket-event.control-model.ts +185 -172
  681. package/src/_modules/socket/_services/sck-client.service-base.spec.ts +99 -99
  682. package/src/_modules/socket/_services/sck-client.service-base.ts +353 -353
  683. package/src/_modules/socket/index.ts +14 -14
  684. package/src/_modules/state-machine/_models/state-machine-config.interface.ts +19 -19
  685. package/src/_modules/state-machine/_models/state-machine-event.interface.ts +25 -25
  686. package/src/_modules/state-machine/_models/state-machine.control-model.spec.ts +314 -314
  687. package/src/_modules/state-machine/_models/state-machine.control-model.ts +298 -298
  688. package/src/_modules/state-machine/_models/state-transition-result.interface.ts +53 -53
  689. package/src/_modules/state-machine/_models/state-transition.interface.ts +30 -30
  690. package/src/_modules/state-machine/index.ts +6 -6
  691. package/src/_modules/test/_collections/tst-module-settings.const.ts +67 -67
  692. package/src/_modules/test/index.ts +5 -5
  693. package/src/_modules/usage/_collections/usg-module-settings.const.ts +33 -33
  694. package/src/_modules/usage/_models/usg-action.control-model.spec.ts +27 -27
  695. package/src/_modules/usage/_models/usg-action.control-model.ts +28 -28
  696. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.spec.ts +36 -36
  697. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.ts +35 -35
  698. package/src/_modules/usage/_models/usg-data.control-model.spec.ts +41 -41
  699. package/src/_modules/usage/_models/usg-data.control-model.ts +35 -35
  700. package/src/_modules/usage/_models/usg-session.data-model.spec.ts +97 -97
  701. package/src/_modules/usage/_models/usg-session.data-model.ts +72 -72
  702. package/src/_modules/usage/index.ts +11 -11
  703. package/src/index.ts +104 -104
  704. package/tsconfig.app.json +12 -12
  705. package/tsconfig.json +31 -31
  706. package/tsconfig.test.json +16 -16
  707. package/tslint.json +153 -153
@@ -1,419 +1,419 @@
1
-
2
-
3
- import { DyFM_Error } from '../../../_models/control-models/error.control-model';
4
-
5
- import { DyFM_AudioScale_Util } from '../_collections/audio-scale.util';
6
-
7
- import { DyFM_AudioMixer_Config } from './audio-mixer-config.interface';
8
- import { DyFM_AudioMixer_Settings } from './audio-mixer-settings.interface';
9
- import { DyFM_AudioMixer_State } from './audio-mixer-state.interface';
10
- import { DyFM_AudioScale } from './audio-scale.interface';
11
-
12
-
13
- /**
14
- * **Csatorna- es skala-agnosztikus** jatek-audio mixer: a projekt deklaralja a sajat
15
- * csatornait es szamabrazolasat, a modell pedig kezeli az allapotot es kiszamolja az
16
- * effektiv hangerot.
17
- *
18
- * **Miert letezik a `DyFM_AudioMixer_Util` (round-1) mellett:** az a util negy FIX csatornara
19
- * (`music` / `ambience` / `effects`) es `0..1` skalara epul. Ez a Prototyper harom prototipusara
20
- * igaz, de a **Hero Coordinator** csatornai `music` / `dialog` / `interface`, az ertekei pedig
21
- * `0-100` egeszek. A fix alak ott csatorna-vesztessel es kotelezo adat-migracioval jarna.
22
- * Ez a modell mindkettot kiszolgalja; a round-1 alak `createClassic()` presetkent tovabb el.
23
- *
24
- * **Rendereles-agnosztikus:** NINCS DOM, Web Audio, Angular vagy Node fuggese. A tenyleges
25
- * lejatszas (HTMLAudioElement, Web Audio `GainNode`, vagy barmi mas) a fogyasztoe — ez a
26
- * **modell + szamitas**.
27
- *
28
- * **Hasznalat (Hero Coordinator-stilus, 0-100 egesz):**
29
- * ```typescript
30
- * const mixer = DyFM_AudioMixer_ControlModel.createPercent(['music', 'dialog', 'interface'], {
31
- * music: 36, dialog: 84, interface: 68,
32
- * }, 72);
33
- *
34
- * let state = mixer.merge(JSON.parse(localStorage.getItem('audio') ?? 'null'));
35
- * gainNode.gain.value = mixer.getEffectiveVolume(state, 'interface'); // MINDIG 0..1
36
- *
37
- * state = mixer.withChannelVolume(state, 'music', 40); // a sajat skalajan adjuk meg
38
- * localStorage.setItem('audio', JSON.stringify(state));
39
- * ```
40
- *
41
- * **Hasznalat (Prototyper-stilus, 0..1):**
42
- * ```typescript
43
- * const mixer = DyFM_AudioMixer_ControlModel.createClassic();
44
- * const state = DyFM_AudioMixer_ControlModel.fromClassicSettings(legacySettings);
45
- * ```
46
- */
47
- export class DyFM_AudioMixer_ControlModel {
48
-
49
- /** A `master` fenntartott nev — nem lehet sima csatorna, mert minden csatornara szorzodik. */
50
- static readonly masterChannel: string = 'master';
51
-
52
- /** A validalt, sajat peldany-config (a hivo altal atadott objektumtol fuggetlen masolat). */
53
- private readonly config: DyFM_AudioMixer_Config;
54
-
55
- /**
56
- * A config validalasa **konstruktor-idoben** tortenik: egy elgepelt csatorna-nev vagy hianyzo
57
- * skala igy a jatek inditasakor derul ki, nem hangleajatszas kozben.
58
- */
59
- constructor(config: DyFM_AudioMixer_Config) {
60
- if (!config || !Array.isArray(config.channels) || !config.channels.length) {
61
- throw new DyFM_Error({
62
- errorCode: 'DYFM-AUDIO-MIXER-001',
63
- message: 'DyFM_AudioMixer_ControlModel: config.channels must be a non-empty string array',
64
- additionalContent: { config: config },
65
- });
66
- }
67
-
68
- const seen: string[] = [];
69
-
70
- for (const channel of config.channels) {
71
- if (typeof channel !== 'string' || !channel.length) {
72
- throw new DyFM_Error({
73
- errorCode: 'DYFM-AUDIO-MIXER-002',
74
- message: 'DyFM_AudioMixer_ControlModel: every channel name must be a non-empty string',
75
- additionalContent: { channels: config.channels },
76
- });
77
- }
78
-
79
- if (channel === DyFM_AudioMixer_ControlModel.masterChannel) {
80
- throw new DyFM_Error({
81
- errorCode: 'DYFM-AUDIO-MIXER-003',
82
- message: 'DyFM_AudioMixer_ControlModel: "master" is reserved and must not be listed in channels',
83
- additionalContent: { channels: config.channels },
84
- });
85
- }
86
-
87
- if (seen.includes(channel)) {
88
- throw new DyFM_Error({
89
- errorCode: 'DYFM-AUDIO-MIXER-004',
90
- message: 'DyFM_AudioMixer_ControlModel: duplicate channel name',
91
- additionalContent: { channel: channel, channels: config.channels },
92
- });
93
- }
94
-
95
- seen.push(channel);
96
- }
97
-
98
- const scale: DyFM_AudioScale = config.scale && typeof config.scale.max === 'number'
99
- ? { max: config.scale.max, integer: config.scale.integer === true }
100
- : DyFM_AudioScale_Util.getUnitScale();
101
-
102
- this.config = {
103
- channels: [...config.channels],
104
- scale: scale,
105
- defaults: config.defaults ? { ...config.defaults } : {},
106
- defaultMaster: config.defaultMaster,
107
- defaultChannelVolume: config.defaultChannelVolume,
108
- defaultPlayWhenUnfocused: config.defaultPlayWhenUnfocused === true,
109
- };
110
- }
111
-
112
- /**
113
- * A round-1 `DyFM_AudioMixer_Settings` alakjaval egyenerteku mixer (`music` / `ambience` /
114
- * `effects`, `0..1` skala, 0.8 default). A Prototyper-stilusu fogyasztoknak.
115
- */
116
- static createClassic(): DyFM_AudioMixer_ControlModel {
117
- return new DyFM_AudioMixer_ControlModel({
118
- channels: ['music', 'ambience', 'effects'],
119
- scale: DyFM_AudioScale_Util.getUnitScale(),
120
- defaultMaster: DyFM_AudioScale_Util.defaultRatio,
121
- defaultChannelVolume: DyFM_AudioScale_Util.defaultRatio,
122
- });
123
- }
124
-
125
- /**
126
- * `0-100` egesz skalaju mixer tetszoleges csatorna-keszlettel — a Hero Coordinator-stilusu
127
- * fogyasztoknak, akik igy **adat-migracio nelkul** vehetik hasznalatba a bedrock modellt.
128
- */
129
- static createPercent(
130
- channels: string[],
131
- defaults?: Record<string, number>,
132
- defaultMaster?: number,
133
- ): DyFM_AudioMixer_ControlModel {
134
- return new DyFM_AudioMixer_ControlModel({
135
- channels: channels,
136
- scale: DyFM_AudioScale_Util.getPercentScale(),
137
- defaults: defaults,
138
- defaultMaster: defaultMaster,
139
- });
140
- }
141
-
142
- /** A round-1 fix alakot atalakitja a nyitott allapot-alakra (migracios hid). */
143
- static fromClassicSettings(settings: DyFM_AudioMixer_Settings): DyFM_AudioMixer_State {
144
- const safe: DyFM_AudioMixer_Settings = settings ?? ({} as DyFM_AudioMixer_Settings);
145
- const scale: DyFM_AudioScale = DyFM_AudioScale_Util.getUnitScale();
146
-
147
- return {
148
- master: DyFM_AudioScale_Util.toUnit(safe.master, scale),
149
- channels: {
150
- music: DyFM_AudioScale_Util.toUnit(safe.music, scale),
151
- ambience: DyFM_AudioScale_Util.toUnit(safe.ambience, scale),
152
- effects: DyFM_AudioScale_Util.toUnit(safe.effects, scale),
153
- },
154
- muted: safe.muted === true,
155
- // Statikus metodus -> nincs peldany-config, ezert a GLOBALIS default (`false`) ervenyes.
156
- playWhenUnfocused: safe.playWhenUnfocused === true,
157
- };
158
- }
159
-
160
- /**
161
- * A nyitott allapot-alakot visszaalakitja a round-1 fix alakra (migracios hid visszafele).
162
- *
163
- * **Peldany-metodus**, mert a helyes konverziohoz ismerni kell a peldany skalajat: egy
164
- * `0-100`-as allapotot igy is `0..1`-re normalizal, ahogy a round-1 alak varja. (Statikus
165
- * valtozatban ez nemaan rossz erteket adna.)
166
- *
167
- * A klasszikus keszleten kivuli csatornak (pl. `dialog`) **elvesznek** — ez a round-1 alak
168
- * korlatja, nem a konverzioe.
169
- */
170
- toClassicSettings(state: DyFM_AudioMixer_State): DyFM_AudioMixer_Settings {
171
- const safe: DyFM_AudioMixer_State = this.merge(state);
172
- const scale: DyFM_AudioScale = this.config.scale;
173
-
174
- const classic: DyFM_AudioMixer_Settings = {
175
- master: DyFM_AudioScale_Util.toUnit(safe.master, scale),
176
- music: DyFM_AudioScale_Util.toUnit(safe.channels['music'], scale),
177
- ambience: DyFM_AudioScale_Util.toUnit(safe.channels['ambience'], scale),
178
- effects: DyFM_AudioScale_Util.toUnit(safe.channels['effects'], scale),
179
- muted: safe.muted === true,
180
- };
181
-
182
- // A kapcsolot CSAK bekapcsolt allapotban irjuk ki. Igy a round-1 alakot mar hasznalo
183
- // projektek payloadja valtozatlan marad (nem jelenik meg benne egy uj `false` mezo),
184
- // a bekapcsolt allapot viszont tulel egy oda-vissza konverziot.
185
- if (safe.playWhenUnfocused) {
186
- classic.playWhenUnfocused = true;
187
- }
188
-
189
- return classic;
190
- }
191
-
192
- /** A peldany configja (masolat — a mutalasa nem hat vissza a modellre). */
193
- getConfig(): DyFM_AudioMixer_Config {
194
- return {
195
- channels: [...this.config.channels],
196
- scale: { max: this.config.scale.max, integer: this.config.scale.integer },
197
- defaults: { ...this.config.defaults },
198
- defaultMaster: this.config.defaultMaster,
199
- defaultChannelVolume: this.config.defaultChannelVolume,
200
- };
201
- }
202
-
203
- /** A deklaralt csatorna-nevek (a `master` nelkul). */
204
- getChannels(): string[] {
205
- return [...this.config.channels];
206
- }
207
-
208
- /** Igaz, ha a nev a deklaralt csatornak kozott van (a `master` NEM az). */
209
- hasChannel(channel: string): boolean {
210
- return this.config.channels.includes(channel);
211
- }
212
-
213
- /**
214
- * Alapertelmezett allapot a **sajat skalan**. Minden hivas UJ objektumot ad vissza, hogy a
215
- * hivo szabadon mutalhassa.
216
- */
217
- getDefaults(): DyFM_AudioMixer_State {
218
- const channels: Record<string, number> = {};
219
-
220
- for (const channel of this.config.channels) {
221
- channels[channel] = this.getDefaultChannelVolume(channel);
222
- }
223
-
224
- return {
225
- master: this.getDefaultMaster(),
226
- channels: channels,
227
- muted: false,
228
- playWhenUnfocused: this.config.defaultPlayWhenUnfocused === true,
229
- };
230
- }
231
-
232
- /**
233
- * Reszleges / hianyzo / serult allapotbol teljes, ervenyes allapotot allit elo: a hianyzo
234
- * csatornak a defaultot kapjak, az ertekek a sajat skalara szorulnak.
235
- *
236
- * **Ez a migracios biztositek:** egy regi payload, ami meg nem ismert egy kesobb bevezetett
237
- * csatornat, igy is betoltheto marad. A **nem deklaralt** csatornak kiesnek — igy egy
238
- * eltavolitott csatorna nem szivarog vissza a mentesbol. Serult (NaN / nem-szam) ertek eseten
239
- * a csatorna DEFAULT-jat kapja, nem 0-t — egy hibas mentes ne nemitson el csendben.
240
- *
241
- * **Figyelem:** ez a nyitott (`channels` rekord) alakot varja. A round-1 LAPOS alakot
242
- * (`{ master, music, ambience, effects, muted }`) eloszor a `fromClassicSettings()`-szel
243
- * kell atalakitani — kulonben a csatornak a defaultot kapjak.
244
- */
245
- merge(partial?: Partial<DyFM_AudioMixer_State> | null): DyFM_AudioMixer_State {
246
- const defaults: DyFM_AudioMixer_State = this.getDefaults();
247
-
248
- if (!partial) {
249
- return defaults;
250
- }
251
-
252
- const source: Record<string, number> = partial.channels ?? {};
253
- const channels: Record<string, number> = {};
254
-
255
- for (const channel of this.config.channels) {
256
- const raw: number = source[channel];
257
-
258
- channels[channel] = raw === undefined || raw === null
259
- ? defaults.channels[channel]
260
- : DyFM_AudioScale_Util.clampToScale(raw, this.config.scale, defaults.channels[channel]);
261
- }
262
-
263
- const master: number = partial.master === undefined || partial.master === null
264
- ? defaults.master
265
- : DyFM_AudioScale_Util.clampToScale(partial.master, this.config.scale, defaults.master);
266
-
267
- // A hianyzo `playWhenUnfocused` a CONFIG alapertelmezeset kapja, NEM vakon `false`-t:
268
- // igy egy regi (mezo nelkuli) mentes betoltese nem irja felul a jatek sajat dontetet.
269
- const playWhenUnfocused: boolean =
270
- partial.playWhenUnfocused === undefined || partial.playWhenUnfocused === null
271
- ? defaults.playWhenUnfocused
272
- : partial.playWhenUnfocused === true;
273
-
274
- return {
275
- master: master,
276
- channels: channels,
277
- muted: partial.muted === true,
278
- playWhenUnfocused: playWhenUnfocused,
279
- };
280
- }
281
-
282
- /**
283
- * Egy csatorna **effektiv** hangereje `0..1`-ben — ezt varja a `HTMLAudioElement.volume` es a
284
- * Web Audio `GainNode.gain.value`, fuggetlenul attol, milyen skalan tarol a projekt.
285
- *
286
- * A csatorna sajat erteke szorozva a master-rel; nemitas eseten mindig 0. A `'master'` nevre
287
- * a master sajat (normalizalt) erteket adja vissza, nem negyzetre emelve.
288
- *
289
- * **Dob**, ha a csatorna nincs deklaralva — egy elgepelt csatorna-nev igy nem nemul el
290
- * csendben, hanem azonnal kiderul (`core-rich-error-handling`).
291
- */
292
- getEffectiveVolume(state: DyFM_AudioMixer_State, channel: string): number {
293
- if (channel !== DyFM_AudioMixer_ControlModel.masterChannel && !this.hasChannel(channel)) {
294
- throw new DyFM_Error({
295
- errorCode: 'DYFM-AUDIO-MIXER-005',
296
- message: 'DyFM_AudioMixer_ControlModel.getEffectiveVolume: unknown channel',
297
- additionalContent: { channel: channel, declaredChannels: this.config.channels },
298
- });
299
- }
300
-
301
- const safe: DyFM_AudioMixer_State = this.merge(state);
302
-
303
- if (safe.muted) {
304
- return 0;
305
- }
306
-
307
- const masterUnit: number = DyFM_AudioScale_Util.toUnit(safe.master, this.config.scale);
308
-
309
- if (channel === DyFM_AudioMixer_ControlModel.masterChannel) {
310
- return masterUnit;
311
- }
312
-
313
- const channelUnit: number = DyFM_AudioScale_Util.toUnit(safe.channels[channel], this.config.scale);
314
-
315
- return DyFM_AudioScale_Util.clampUnit(channelUnit * masterUnit);
316
- }
317
-
318
- /**
319
- * Egy csatorna hangerejenek beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza
320
- * (immutable update), hogy signal-/state-alapu tarolokban is biztonsagos legyen.
321
- */
322
- withChannelVolume(
323
- state: DyFM_AudioMixer_State,
324
- channel: string,
325
- volume: number,
326
- ): DyFM_AudioMixer_State {
327
- if (!this.hasChannel(channel)) {
328
- throw new DyFM_Error({
329
- errorCode: 'DYFM-AUDIO-MIXER-006',
330
- message: 'DyFM_AudioMixer_ControlModel.withChannelVolume: unknown channel',
331
- additionalContent: { channel: channel, declaredChannels: this.config.channels },
332
- });
333
- }
334
-
335
- const next: DyFM_AudioMixer_State = this.merge(state);
336
- next.channels[channel] = DyFM_AudioScale_Util.clampToScale(volume, this.config.scale);
337
-
338
- return next;
339
- }
340
-
341
- /** A master beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza. */
342
- withMasterVolume(state: DyFM_AudioMixer_State, volume: number): DyFM_AudioMixer_State {
343
- const next: DyFM_AudioMixer_State = this.merge(state);
344
- next.master = DyFM_AudioScale_Util.clampToScale(volume, this.config.scale);
345
-
346
- return next;
347
- }
348
-
349
- /** Nemitas beallitasa — UJ allapot-objektumot ad vissza. */
350
- withMuted(state: DyFM_AudioMixer_State, muted: boolean): DyFM_AudioMixer_State {
351
- const next: DyFM_AudioMixer_State = this.merge(state);
352
- next.muted = muted === true;
353
-
354
- return next;
355
- }
356
-
357
- /**
358
- * A "szoljon-e hattervben" kapcsolo beallitasa — UJ allapot-objektumot ad vissza.
359
- *
360
- * A modell csak a SZANDEKOT tarolja; a tenyleges szuneteltetes a lejatszo-reteg dolga
361
- * (`visibilitychange` / `blur`), mert ez a reteg DOM-fuggetlen.
362
- */
363
- withPlayWhenUnfocused(
364
- state: DyFM_AudioMixer_State,
365
- playWhenUnfocused: boolean,
366
- ): DyFM_AudioMixer_State {
367
- const next: DyFM_AudioMixer_State = this.merge(state);
368
- next.playWhenUnfocused = playWhenUnfocused === true;
369
-
370
- return next;
371
- }
372
-
373
- /** Ket allapot ertek szerinti egyezese (mentes-szukseg / change-detection dontesehez). */
374
- isEqual(a: DyFM_AudioMixer_State, b: DyFM_AudioMixer_State): boolean {
375
- const left: DyFM_AudioMixer_State = this.merge(a);
376
- const right: DyFM_AudioMixer_State = this.merge(b);
377
-
378
- if (
379
- left.master !== right.master
380
- || left.muted !== right.muted
381
- || left.playWhenUnfocused !== right.playWhenUnfocused
382
- ) {
383
- return false;
384
- }
385
-
386
- for (const channel of this.config.channels) {
387
- if (left.channels[channel] !== right.channels[channel]) {
388
- return false;
389
- }
390
- }
391
-
392
- return true;
393
- }
394
-
395
- /** A master alapertelmezese a sajat skalan (config, kulonben a maximum 80%-a). */
396
- private getDefaultMaster(): number {
397
- if (typeof this.config.defaultMaster === 'number' && !Number.isNaN(this.config.defaultMaster)) {
398
- return DyFM_AudioScale_Util.clampToScale(this.config.defaultMaster, this.config.scale);
399
- }
400
-
401
- return DyFM_AudioScale_Util.fromUnit(DyFM_AudioScale_Util.defaultRatio, this.config.scale);
402
- }
403
-
404
- /** Egy csatorna alapertelmezese a sajat skalan (per-csatorna, kulonben kozos, kulonben 80%). */
405
- private getDefaultChannelVolume(channel: string): number {
406
- const perChannel: number = (this.config.defaults ?? {})[channel];
407
-
408
- if (typeof perChannel === 'number' && !Number.isNaN(perChannel)) {
409
- return DyFM_AudioScale_Util.clampToScale(perChannel, this.config.scale);
410
- }
411
-
412
- if (typeof this.config.defaultChannelVolume === 'number'
413
- && !Number.isNaN(this.config.defaultChannelVolume)) {
414
- return DyFM_AudioScale_Util.clampToScale(this.config.defaultChannelVolume, this.config.scale);
415
- }
416
-
417
- return DyFM_AudioScale_Util.fromUnit(DyFM_AudioScale_Util.defaultRatio, this.config.scale);
418
- }
419
- }
1
+
2
+
3
+ import { DyFM_Error } from '../../../_models/control-models/error.control-model';
4
+
5
+ import { DyFM_AudioScale_Util } from '../_collections/audio-scale.util';
6
+
7
+ import { DyFM_AudioMixer_Config } from './audio-mixer-config.interface';
8
+ import { DyFM_AudioMixer_Settings } from './audio-mixer-settings.interface';
9
+ import { DyFM_AudioMixer_State } from './audio-mixer-state.interface';
10
+ import { DyFM_AudioScale } from './audio-scale.interface';
11
+
12
+
13
+ /**
14
+ * **Csatorna- es skala-agnosztikus** jatek-audio mixer: a projekt deklaralja a sajat
15
+ * csatornait es szamabrazolasat, a modell pedig kezeli az allapotot es kiszamolja az
16
+ * effektiv hangerot.
17
+ *
18
+ * **Miert letezik a `DyFM_AudioMixer_Util` (round-1) mellett:** az a util negy FIX csatornara
19
+ * (`music` / `ambience` / `effects`) es `0..1` skalara epul. Ez a Prototyper harom prototipusara
20
+ * igaz, de a **Hero Coordinator** csatornai `music` / `dialog` / `interface`, az ertekei pedig
21
+ * `0-100` egeszek. A fix alak ott csatorna-vesztessel es kotelezo adat-migracioval jarna.
22
+ * Ez a modell mindkettot kiszolgalja; a round-1 alak `createClassic()` presetkent tovabb el.
23
+ *
24
+ * **Rendereles-agnosztikus:** NINCS DOM, Web Audio, Angular vagy Node fuggese. A tenyleges
25
+ * lejatszas (HTMLAudioElement, Web Audio `GainNode`, vagy barmi mas) a fogyasztoe — ez a
26
+ * **modell + szamitas**.
27
+ *
28
+ * **Hasznalat (Hero Coordinator-stilus, 0-100 egesz):**
29
+ * ```typescript
30
+ * const mixer = DyFM_AudioMixer_ControlModel.createPercent(['music', 'dialog', 'interface'], {
31
+ * music: 36, dialog: 84, interface: 68,
32
+ * }, 72);
33
+ *
34
+ * let state = mixer.merge(JSON.parse(localStorage.getItem('audio') ?? 'null'));
35
+ * gainNode.gain.value = mixer.getEffectiveVolume(state, 'interface'); // MINDIG 0..1
36
+ *
37
+ * state = mixer.withChannelVolume(state, 'music', 40); // a sajat skalajan adjuk meg
38
+ * localStorage.setItem('audio', JSON.stringify(state));
39
+ * ```
40
+ *
41
+ * **Hasznalat (Prototyper-stilus, 0..1):**
42
+ * ```typescript
43
+ * const mixer = DyFM_AudioMixer_ControlModel.createClassic();
44
+ * const state = DyFM_AudioMixer_ControlModel.fromClassicSettings(legacySettings);
45
+ * ```
46
+ */
47
+ export class DyFM_AudioMixer_ControlModel {
48
+
49
+ /** A `master` fenntartott nev — nem lehet sima csatorna, mert minden csatornara szorzodik. */
50
+ static readonly masterChannel: string = 'master';
51
+
52
+ /** A validalt, sajat peldany-config (a hivo altal atadott objektumtol fuggetlen masolat). */
53
+ private readonly config: DyFM_AudioMixer_Config;
54
+
55
+ /**
56
+ * A config validalasa **konstruktor-idoben** tortenik: egy elgepelt csatorna-nev vagy hianyzo
57
+ * skala igy a jatek inditasakor derul ki, nem hangleajatszas kozben.
58
+ */
59
+ constructor(config: DyFM_AudioMixer_Config) {
60
+ if (!config || !Array.isArray(config.channels) || !config.channels.length) {
61
+ throw new DyFM_Error({
62
+ errorCode: 'DYFM-AUDIO-MIXER-001',
63
+ message: 'DyFM_AudioMixer_ControlModel: config.channels must be a non-empty string array',
64
+ additionalContent: { config: config },
65
+ });
66
+ }
67
+
68
+ const seen: string[] = [];
69
+
70
+ for (const channel of config.channels) {
71
+ if (typeof channel !== 'string' || !channel.length) {
72
+ throw new DyFM_Error({
73
+ errorCode: 'DYFM-AUDIO-MIXER-002',
74
+ message: 'DyFM_AudioMixer_ControlModel: every channel name must be a non-empty string',
75
+ additionalContent: { channels: config.channels },
76
+ });
77
+ }
78
+
79
+ if (channel === DyFM_AudioMixer_ControlModel.masterChannel) {
80
+ throw new DyFM_Error({
81
+ errorCode: 'DYFM-AUDIO-MIXER-003',
82
+ message: 'DyFM_AudioMixer_ControlModel: "master" is reserved and must not be listed in channels',
83
+ additionalContent: { channels: config.channels },
84
+ });
85
+ }
86
+
87
+ if (seen.includes(channel)) {
88
+ throw new DyFM_Error({
89
+ errorCode: 'DYFM-AUDIO-MIXER-004',
90
+ message: 'DyFM_AudioMixer_ControlModel: duplicate channel name',
91
+ additionalContent: { channel: channel, channels: config.channels },
92
+ });
93
+ }
94
+
95
+ seen.push(channel);
96
+ }
97
+
98
+ const scale: DyFM_AudioScale = config.scale && typeof config.scale.max === 'number'
99
+ ? { max: config.scale.max, integer: config.scale.integer === true }
100
+ : DyFM_AudioScale_Util.getUnitScale();
101
+
102
+ this.config = {
103
+ channels: [...config.channels],
104
+ scale: scale,
105
+ defaults: config.defaults ? { ...config.defaults } : {},
106
+ defaultMaster: config.defaultMaster,
107
+ defaultChannelVolume: config.defaultChannelVolume,
108
+ defaultPlayWhenUnfocused: config.defaultPlayWhenUnfocused === true,
109
+ };
110
+ }
111
+
112
+ /**
113
+ * A round-1 `DyFM_AudioMixer_Settings` alakjaval egyenerteku mixer (`music` / `ambience` /
114
+ * `effects`, `0..1` skala, 0.8 default). A Prototyper-stilusu fogyasztoknak.
115
+ */
116
+ static createClassic(): DyFM_AudioMixer_ControlModel {
117
+ return new DyFM_AudioMixer_ControlModel({
118
+ channels: ['music', 'ambience', 'effects'],
119
+ scale: DyFM_AudioScale_Util.getUnitScale(),
120
+ defaultMaster: DyFM_AudioScale_Util.defaultRatio,
121
+ defaultChannelVolume: DyFM_AudioScale_Util.defaultRatio,
122
+ });
123
+ }
124
+
125
+ /**
126
+ * `0-100` egesz skalaju mixer tetszoleges csatorna-keszlettel — a Hero Coordinator-stilusu
127
+ * fogyasztoknak, akik igy **adat-migracio nelkul** vehetik hasznalatba a bedrock modellt.
128
+ */
129
+ static createPercent(
130
+ channels: string[],
131
+ defaults?: Record<string, number>,
132
+ defaultMaster?: number,
133
+ ): DyFM_AudioMixer_ControlModel {
134
+ return new DyFM_AudioMixer_ControlModel({
135
+ channels: channels,
136
+ scale: DyFM_AudioScale_Util.getPercentScale(),
137
+ defaults: defaults,
138
+ defaultMaster: defaultMaster,
139
+ });
140
+ }
141
+
142
+ /** A round-1 fix alakot atalakitja a nyitott allapot-alakra (migracios hid). */
143
+ static fromClassicSettings(settings: DyFM_AudioMixer_Settings): DyFM_AudioMixer_State {
144
+ const safe: DyFM_AudioMixer_Settings = settings ?? ({} as DyFM_AudioMixer_Settings);
145
+ const scale: DyFM_AudioScale = DyFM_AudioScale_Util.getUnitScale();
146
+
147
+ return {
148
+ master: DyFM_AudioScale_Util.toUnit(safe.master, scale),
149
+ channels: {
150
+ music: DyFM_AudioScale_Util.toUnit(safe.music, scale),
151
+ ambience: DyFM_AudioScale_Util.toUnit(safe.ambience, scale),
152
+ effects: DyFM_AudioScale_Util.toUnit(safe.effects, scale),
153
+ },
154
+ muted: safe.muted === true,
155
+ // Statikus metodus -> nincs peldany-config, ezert a GLOBALIS default (`false`) ervenyes.
156
+ playWhenUnfocused: safe.playWhenUnfocused === true,
157
+ };
158
+ }
159
+
160
+ /**
161
+ * A nyitott allapot-alakot visszaalakitja a round-1 fix alakra (migracios hid visszafele).
162
+ *
163
+ * **Peldany-metodus**, mert a helyes konverziohoz ismerni kell a peldany skalajat: egy
164
+ * `0-100`-as allapotot igy is `0..1`-re normalizal, ahogy a round-1 alak varja. (Statikus
165
+ * valtozatban ez nemaan rossz erteket adna.)
166
+ *
167
+ * A klasszikus keszleten kivuli csatornak (pl. `dialog`) **elvesznek** — ez a round-1 alak
168
+ * korlatja, nem a konverzioe.
169
+ */
170
+ toClassicSettings(state: DyFM_AudioMixer_State): DyFM_AudioMixer_Settings {
171
+ const safe: DyFM_AudioMixer_State = this.merge(state);
172
+ const scale: DyFM_AudioScale = this.config.scale;
173
+
174
+ const classic: DyFM_AudioMixer_Settings = {
175
+ master: DyFM_AudioScale_Util.toUnit(safe.master, scale),
176
+ music: DyFM_AudioScale_Util.toUnit(safe.channels['music'], scale),
177
+ ambience: DyFM_AudioScale_Util.toUnit(safe.channels['ambience'], scale),
178
+ effects: DyFM_AudioScale_Util.toUnit(safe.channels['effects'], scale),
179
+ muted: safe.muted === true,
180
+ };
181
+
182
+ // A kapcsolot CSAK bekapcsolt allapotban irjuk ki. Igy a round-1 alakot mar hasznalo
183
+ // projektek payloadja valtozatlan marad (nem jelenik meg benne egy uj `false` mezo),
184
+ // a bekapcsolt allapot viszont tulel egy oda-vissza konverziot.
185
+ if (safe.playWhenUnfocused) {
186
+ classic.playWhenUnfocused = true;
187
+ }
188
+
189
+ return classic;
190
+ }
191
+
192
+ /** A peldany configja (masolat — a mutalasa nem hat vissza a modellre). */
193
+ getConfig(): DyFM_AudioMixer_Config {
194
+ return {
195
+ channels: [...this.config.channels],
196
+ scale: { max: this.config.scale.max, integer: this.config.scale.integer },
197
+ defaults: { ...this.config.defaults },
198
+ defaultMaster: this.config.defaultMaster,
199
+ defaultChannelVolume: this.config.defaultChannelVolume,
200
+ };
201
+ }
202
+
203
+ /** A deklaralt csatorna-nevek (a `master` nelkul). */
204
+ getChannels(): string[] {
205
+ return [...this.config.channels];
206
+ }
207
+
208
+ /** Igaz, ha a nev a deklaralt csatornak kozott van (a `master` NEM az). */
209
+ hasChannel(channel: string): boolean {
210
+ return this.config.channels.includes(channel);
211
+ }
212
+
213
+ /**
214
+ * Alapertelmezett allapot a **sajat skalan**. Minden hivas UJ objektumot ad vissza, hogy a
215
+ * hivo szabadon mutalhassa.
216
+ */
217
+ getDefaults(): DyFM_AudioMixer_State {
218
+ const channels: Record<string, number> = {};
219
+
220
+ for (const channel of this.config.channels) {
221
+ channels[channel] = this.getDefaultChannelVolume(channel);
222
+ }
223
+
224
+ return {
225
+ master: this.getDefaultMaster(),
226
+ channels: channels,
227
+ muted: false,
228
+ playWhenUnfocused: this.config.defaultPlayWhenUnfocused === true,
229
+ };
230
+ }
231
+
232
+ /**
233
+ * Reszleges / hianyzo / serult allapotbol teljes, ervenyes allapotot allit elo: a hianyzo
234
+ * csatornak a defaultot kapjak, az ertekek a sajat skalara szorulnak.
235
+ *
236
+ * **Ez a migracios biztositek:** egy regi payload, ami meg nem ismert egy kesobb bevezetett
237
+ * csatornat, igy is betoltheto marad. A **nem deklaralt** csatornak kiesnek — igy egy
238
+ * eltavolitott csatorna nem szivarog vissza a mentesbol. Serult (NaN / nem-szam) ertek eseten
239
+ * a csatorna DEFAULT-jat kapja, nem 0-t — egy hibas mentes ne nemitson el csendben.
240
+ *
241
+ * **Figyelem:** ez a nyitott (`channels` rekord) alakot varja. A round-1 LAPOS alakot
242
+ * (`{ master, music, ambience, effects, muted }`) eloszor a `fromClassicSettings()`-szel
243
+ * kell atalakitani — kulonben a csatornak a defaultot kapjak.
244
+ */
245
+ merge(partial?: Partial<DyFM_AudioMixer_State> | null): DyFM_AudioMixer_State {
246
+ const defaults: DyFM_AudioMixer_State = this.getDefaults();
247
+
248
+ if (!partial) {
249
+ return defaults;
250
+ }
251
+
252
+ const source: Record<string, number> = partial.channels ?? {};
253
+ const channels: Record<string, number> = {};
254
+
255
+ for (const channel of this.config.channels) {
256
+ const raw: number = source[channel];
257
+
258
+ channels[channel] = raw === undefined || raw === null
259
+ ? defaults.channels[channel]
260
+ : DyFM_AudioScale_Util.clampToScale(raw, this.config.scale, defaults.channels[channel]);
261
+ }
262
+
263
+ const master: number = partial.master === undefined || partial.master === null
264
+ ? defaults.master
265
+ : DyFM_AudioScale_Util.clampToScale(partial.master, this.config.scale, defaults.master);
266
+
267
+ // A hianyzo `playWhenUnfocused` a CONFIG alapertelmezeset kapja, NEM vakon `false`-t:
268
+ // igy egy regi (mezo nelkuli) mentes betoltese nem irja felul a jatek sajat dontetet.
269
+ const playWhenUnfocused: boolean =
270
+ partial.playWhenUnfocused === undefined || partial.playWhenUnfocused === null
271
+ ? defaults.playWhenUnfocused
272
+ : partial.playWhenUnfocused === true;
273
+
274
+ return {
275
+ master: master,
276
+ channels: channels,
277
+ muted: partial.muted === true,
278
+ playWhenUnfocused: playWhenUnfocused,
279
+ };
280
+ }
281
+
282
+ /**
283
+ * Egy csatorna **effektiv** hangereje `0..1`-ben — ezt varja a `HTMLAudioElement.volume` es a
284
+ * Web Audio `GainNode.gain.value`, fuggetlenul attol, milyen skalan tarol a projekt.
285
+ *
286
+ * A csatorna sajat erteke szorozva a master-rel; nemitas eseten mindig 0. A `'master'` nevre
287
+ * a master sajat (normalizalt) erteket adja vissza, nem negyzetre emelve.
288
+ *
289
+ * **Dob**, ha a csatorna nincs deklaralva — egy elgepelt csatorna-nev igy nem nemul el
290
+ * csendben, hanem azonnal kiderul (`core-rich-error-handling`).
291
+ */
292
+ getEffectiveVolume(state: DyFM_AudioMixer_State, channel: string): number {
293
+ if (channel !== DyFM_AudioMixer_ControlModel.masterChannel && !this.hasChannel(channel)) {
294
+ throw new DyFM_Error({
295
+ errorCode: 'DYFM-AUDIO-MIXER-005',
296
+ message: 'DyFM_AudioMixer_ControlModel.getEffectiveVolume: unknown channel',
297
+ additionalContent: { channel: channel, declaredChannels: this.config.channels },
298
+ });
299
+ }
300
+
301
+ const safe: DyFM_AudioMixer_State = this.merge(state);
302
+
303
+ if (safe.muted) {
304
+ return 0;
305
+ }
306
+
307
+ const masterUnit: number = DyFM_AudioScale_Util.toUnit(safe.master, this.config.scale);
308
+
309
+ if (channel === DyFM_AudioMixer_ControlModel.masterChannel) {
310
+ return masterUnit;
311
+ }
312
+
313
+ const channelUnit: number = DyFM_AudioScale_Util.toUnit(safe.channels[channel], this.config.scale);
314
+
315
+ return DyFM_AudioScale_Util.clampUnit(channelUnit * masterUnit);
316
+ }
317
+
318
+ /**
319
+ * Egy csatorna hangerejenek beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza
320
+ * (immutable update), hogy signal-/state-alapu tarolokban is biztonsagos legyen.
321
+ */
322
+ withChannelVolume(
323
+ state: DyFM_AudioMixer_State,
324
+ channel: string,
325
+ volume: number,
326
+ ): DyFM_AudioMixer_State {
327
+ if (!this.hasChannel(channel)) {
328
+ throw new DyFM_Error({
329
+ errorCode: 'DYFM-AUDIO-MIXER-006',
330
+ message: 'DyFM_AudioMixer_ControlModel.withChannelVolume: unknown channel',
331
+ additionalContent: { channel: channel, declaredChannels: this.config.channels },
332
+ });
333
+ }
334
+
335
+ const next: DyFM_AudioMixer_State = this.merge(state);
336
+ next.channels[channel] = DyFM_AudioScale_Util.clampToScale(volume, this.config.scale);
337
+
338
+ return next;
339
+ }
340
+
341
+ /** A master beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza. */
342
+ withMasterVolume(state: DyFM_AudioMixer_State, volume: number): DyFM_AudioMixer_State {
343
+ const next: DyFM_AudioMixer_State = this.merge(state);
344
+ next.master = DyFM_AudioScale_Util.clampToScale(volume, this.config.scale);
345
+
346
+ return next;
347
+ }
348
+
349
+ /** Nemitas beallitasa — UJ allapot-objektumot ad vissza. */
350
+ withMuted(state: DyFM_AudioMixer_State, muted: boolean): DyFM_AudioMixer_State {
351
+ const next: DyFM_AudioMixer_State = this.merge(state);
352
+ next.muted = muted === true;
353
+
354
+ return next;
355
+ }
356
+
357
+ /**
358
+ * A "szoljon-e hattervben" kapcsolo beallitasa — UJ allapot-objektumot ad vissza.
359
+ *
360
+ * A modell csak a SZANDEKOT tarolja; a tenyleges szuneteltetes a lejatszo-reteg dolga
361
+ * (`visibilitychange` / `blur`), mert ez a reteg DOM-fuggetlen.
362
+ */
363
+ withPlayWhenUnfocused(
364
+ state: DyFM_AudioMixer_State,
365
+ playWhenUnfocused: boolean,
366
+ ): DyFM_AudioMixer_State {
367
+ const next: DyFM_AudioMixer_State = this.merge(state);
368
+ next.playWhenUnfocused = playWhenUnfocused === true;
369
+
370
+ return next;
371
+ }
372
+
373
+ /** Ket allapot ertek szerinti egyezese (mentes-szukseg / change-detection dontesehez). */
374
+ isEqual(a: DyFM_AudioMixer_State, b: DyFM_AudioMixer_State): boolean {
375
+ const left: DyFM_AudioMixer_State = this.merge(a);
376
+ const right: DyFM_AudioMixer_State = this.merge(b);
377
+
378
+ if (
379
+ left.master !== right.master
380
+ || left.muted !== right.muted
381
+ || left.playWhenUnfocused !== right.playWhenUnfocused
382
+ ) {
383
+ return false;
384
+ }
385
+
386
+ for (const channel of this.config.channels) {
387
+ if (left.channels[channel] !== right.channels[channel]) {
388
+ return false;
389
+ }
390
+ }
391
+
392
+ return true;
393
+ }
394
+
395
+ /** A master alapertelmezese a sajat skalan (config, kulonben a maximum 80%-a). */
396
+ private getDefaultMaster(): number {
397
+ if (typeof this.config.defaultMaster === 'number' && !Number.isNaN(this.config.defaultMaster)) {
398
+ return DyFM_AudioScale_Util.clampToScale(this.config.defaultMaster, this.config.scale);
399
+ }
400
+
401
+ return DyFM_AudioScale_Util.fromUnit(DyFM_AudioScale_Util.defaultRatio, this.config.scale);
402
+ }
403
+
404
+ /** Egy csatorna alapertelmezese a sajat skalan (per-csatorna, kulonben kozos, kulonben 80%). */
405
+ private getDefaultChannelVolume(channel: string): number {
406
+ const perChannel: number = (this.config.defaults ?? {})[channel];
407
+
408
+ if (typeof perChannel === 'number' && !Number.isNaN(perChannel)) {
409
+ return DyFM_AudioScale_Util.clampToScale(perChannel, this.config.scale);
410
+ }
411
+
412
+ if (typeof this.config.defaultChannelVolume === 'number'
413
+ && !Number.isNaN(this.config.defaultChannelVolume)) {
414
+ return DyFM_AudioScale_Util.clampToScale(this.config.defaultChannelVolume, this.config.scale);
415
+ }
416
+
417
+ return DyFM_AudioScale_Util.fromUnit(DyFM_AudioScale_Util.defaultRatio, this.config.scale);
418
+ }
419
+ }