@siliconst/metaui 1.4.34 → 1.4.37

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 (499) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
  4. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
  6. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
  10. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
  11. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
  13. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +62 -2
  14. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +54 -0
  16. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -1
  17. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +59 -2
  20. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +43 -47
  21. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +2 -2
  23. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +61 -66
  27. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +120 -63
  28. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +16 -4
  30. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +126 -65
  34. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
  35. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +6 -4
  37. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  40. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +47 -39
  41. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
  42. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
  44. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  47. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
  48. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
  49. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +4 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +7 -2
  55. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +212 -34
  56. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
  58. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  60. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +214 -35
  62. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +3 -1
  63. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +3 -1
  68. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +5 -0
  69. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +6 -0
  74. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
  75. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
  80. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +127 -50
  81. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +13 -0
  83. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  84. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +140 -57
  87. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +310 -0
  88. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
  89. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +73 -0
  90. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
  91. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
  92. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
  93. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +307 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +34 -13
  95. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +4 -4
  97. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  100. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +45 -20
  101. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
  102. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  105. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  106. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
  107. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
  108. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
  110. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  111. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
  114. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
  116. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  117. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
  118. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
  119. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
  120. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
  121. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
  122. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
  123. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
  124. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
  125. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +19 -0
  127. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  128. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +22 -0
  129. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +26 -31
  130. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  132. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +22 -25
  135. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +40 -6
  136. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  138. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +37 -5
  141. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +69 -56
  142. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
  144. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +4 -3
  150. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +4 -4
  155. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
  156. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
  160. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
  162. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
  163. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
  164. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +1 -1
  165. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
  168. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +16 -12
  169. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
  170. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
  171. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +5 -5
  172. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
  175. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +25 -17
  176. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
  177. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +5 -5
  179. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
  181. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +23 -16
  183. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
  184. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +10 -74
  186. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
  187. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
  189. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +54 -117
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +7 -4
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +6 -4
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +4 -4
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +5 -5
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +45 -4
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +143 -13
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +3 -3
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +2 -2
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +3 -3
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +2 -2
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +3 -3
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +9 -4
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +2 -2
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +3 -3
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +2 -2
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +3 -3
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +2 -2
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +3 -3
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +2 -2
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +3 -3
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +6 -5
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +35 -20
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +39 -22
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +5 -3
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +4 -3
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +2 -2
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +3 -3
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +2 -2
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +3 -3
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +28 -12
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +29 -10
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +3 -3
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +3 -3
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +2 -2
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +3 -3
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +2 -2
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +4 -4
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -2
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  374. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  375. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +3 -3
  376. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
  377. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  378. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
  379. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  380. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  381. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  382. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
  383. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
  384. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  385. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
  386. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  387. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  388. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  389. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
  390. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +2 -2
  391. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  392. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
  393. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  394. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  395. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  396. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +3 -3
  397. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +2 -2
  398. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  399. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
  400. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  401. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  402. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  403. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +3 -3
  404. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  405. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  406. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +110 -109
  407. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
  408. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
  409. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
  410. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
  411. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
  412. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +66 -64
  413. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +29 -8
  414. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
  415. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +1 -1
  416. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
  417. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
  418. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
  419. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +145 -118
  420. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  421. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  422. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +106 -105
  423. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
  424. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
  425. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
  426. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
  427. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
  428. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
  429. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
  430. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
  431. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
  432. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
  433. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
  434. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
  435. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
  436. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
  437. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
  438. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
  439. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
  440. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
  441. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
  442. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
  443. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
  444. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
  445. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
  446. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
  447. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
  448. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
  449. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
  450. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
  451. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
  452. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
  453. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
  454. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
  455. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
  456. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
  457. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
  458. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
  459. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
  460. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
  461. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
  462. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
  463. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
  464. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
  465. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
  466. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
  467. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
  468. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
  469. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
  470. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
  471. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
  472. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
  473. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
  474. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
  475. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
  476. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
  477. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
  478. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
  479. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
  480. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
  481. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
  482. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
  483. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
  484. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
  485. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
  486. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
  487. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
  488. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
  489. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
  490. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
  491. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
  492. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
  493. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
  494. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
  495. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
  496. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
  497. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
  498. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
  499. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -72
@@ -1,14 +1,14 @@
1
- sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/Logger", "./DefaultLayoutGenerator", "sap/ui/core/Messaging"], function (___ConditionEngine, ___PluginRegistry, Text, ___utils_Logger, ___DefaultLayoutGenerator, Messaging) {
1
+ sap.ui.define(["./PluginRegistry", "sap/m/Text", "../utils/Logger", "./DefaultLayoutGenerator", "./PipelineManager"], function (___PluginRegistry, Text, ___utils_Logger, ___DefaultLayoutGenerator, ___PipelineManager) {
2
2
  "use strict";
3
3
 
4
4
  /**
5
5
  * @file Engine.ts
6
6
  * @description The central orchestrator that routes data between the Layout Factory and Plugin Registry (v2).
7
7
  */
8
- const ConditionEngine = ___ConditionEngine["ConditionEngine"];
9
8
  const PluginRegistry = ___PluginRegistry["PluginRegistry"];
10
9
  const Logger = ___utils_Logger["Logger"];
11
10
  const DefaultLayoutGenerator = ___DefaultLayoutGenerator["DefaultLayoutGenerator"];
11
+ const GlobalPipeline = ___PipelineManager["GlobalPipeline"];
12
12
  /**
13
13
  * The Engine is responsible for translating a normalized schema into a physical UI5 layout.
14
14
  * It delegates layout generation to the configured `LayoutManager` and field generation to the `PluginRegistry`.
@@ -20,14 +20,17 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
20
20
  * @public
21
21
  */
22
22
  class Engine {
23
- /** Handles dynamic conditional logic across the active form. */
24
- conditionEngine = null;
25
-
26
23
  /** Array of all instantiated plugins generated during the current build. */
27
24
  activePlugins = [];
28
25
 
26
+ /** Array of template plugins generated for table rows to prevent memory leaks during destruction. */
27
+ templatePlugins = [];
28
+
29
29
  /** Deterministic scope ID injected by the host control to prevent clone collisions. */
30
30
 
31
+ /** Ledger tracking local vs cross-field errors to prevent visual race conditions. */
32
+ validationLedger = new Map();
33
+
31
34
  /** Reference to the GeneratorHost that instantiated this engine, for retrieving global definitions. */
32
35
 
33
36
  /** Callback to notify the host that an internal field changed. */
@@ -67,13 +70,12 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
67
70
  * @returns The generated root UI5 Control container.
68
71
  */
69
72
  build(schema, model, modelName = "meta", onSubmit, engineScopeId, onChange) {
70
- this.conditionEngine = new ConditionEngine(schema);
71
73
  this.activePlugins = [];
72
74
  this.activeModel = model;
73
75
  this.engineScopeId = engineScopeId;
74
76
  this.onChange = (isValid, fieldKey, errorMessage, controlId) => {
75
- if (this.conditionEngine && fieldKey) {
76
- this.conditionEngine.handleEvent(fieldKey, isValid);
77
+ if (fieldKey) {
78
+ this.reportSchemaError(fieldKey, isValid ? null : errorMessage || "Invalid input");
77
79
  }
78
80
  if (onChange) {
79
81
  onChange(isValid, fieldKey, errorMessage, controlId);
@@ -117,12 +119,14 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
117
119
  plugin,
118
120
  path: bindingPath
119
121
  });
122
+ } else {
123
+ this.templatePlugins.push({
124
+ plugin,
125
+ path: bindingPath
126
+ });
120
127
  }
121
128
  const scopeId = isTemplate ? undefined : this.engineScopeId;
122
129
  const control = plugin.render(fieldMeta, bindingPath, modelName, scopeId, this.onChange, this.activeModel);
123
- if (this.conditionEngine) {
124
- this.conditionEngine.registerPlugin(bindingPath, plugin);
125
- }
126
130
  return control;
127
131
  } catch (error) {
128
132
  this.hasPartialRenderingErrors = true;
@@ -174,8 +178,8 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
174
178
  for (const item of this.activePlugins) {
175
179
  try {
176
180
  const result = item.plugin.validate();
177
- if (applyVisualState && typeof item.plugin.setVisualValidationState === "function") {
178
- item.plugin.setVisualValidationState(result.isValid, result.errorMessage);
181
+ if (applyVisualState) {
182
+ this.reportSchemaError(item.path, result.isValid ? null : result.errorMessage || "Invalid input");
179
183
  }
180
184
  if (!result.isValid) {
181
185
  // Ensure the path is bound to the error so GeneratorHost knows where to target it
@@ -188,6 +192,103 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
188
192
  Logger.error(`[MetaUI Engine] Error validating plugin at ${item.path}`, error.message);
189
193
  }
190
194
  }
195
+
196
+ // 2. Recursively validate arrays via StateManager payload traversing for Table layout rows
197
+ if (this.host && typeof this.host.getStateManager === "function") {
198
+ const stateManager = this.host.getStateManager();
199
+ if (stateManager) {
200
+ const payload = stateManager.extractPayload();
201
+ const schema = stateManager.getSchema ? stateManager.getSchema() : this.host.getParsedSchema?.();
202
+ if (payload && schema) {
203
+ const arrayErrors = this.validatePayloadArrays(schema, payload, "");
204
+ if (applyVisualState) {
205
+ arrayErrors.forEach(err => {
206
+ if (err.fieldKey) {
207
+ this.reportSchemaError(err.fieldKey, err.isValid ? null : err.errorMessage || "Invalid input");
208
+ }
209
+ });
210
+ }
211
+ errors.push(...arrayErrors.filter(e => !e.isValid));
212
+ }
213
+ }
214
+ }
215
+ return errors;
216
+ }
217
+ onArrayMutated(arrayPath) {
218
+ if (this.host && typeof this.host.getStateManager === "function") {
219
+ const stateManager = this.host.getStateManager();
220
+ if (stateManager && typeof stateManager.clearArrayMessages === "function") {
221
+ stateManager.clearArrayMessages(arrayPath);
222
+ }
223
+ }
224
+ }
225
+ validatePayloadArrays(schema, payload, currentPath) {
226
+ const errors = [];
227
+ if (!schema || !payload || typeof payload !== "object") return errors;
228
+ if (schema.type === "object" && schema.properties) {
229
+ for (const key of Object.keys(schema.properties)) {
230
+ const propSchema = schema.properties[key];
231
+ if (payload[key] !== undefined) {
232
+ const childPath = currentPath ? `${currentPath}/${key}` : key;
233
+ errors.push(...this.validatePayloadArrays(propSchema, payload[key], childPath));
234
+ }
235
+ }
236
+ } else if (schema.type === "array" && schema.items && Array.isArray(payload)) {
237
+ payload.forEach((item, index) => {
238
+ const itemPath = currentPath ? `${currentPath}/${index}` : `${index}`;
239
+ if (schema.items.type === "object" && schema.items.properties) {
240
+ for (const key of Object.keys(schema.items.properties)) {
241
+ const propMeta = schema.items.properties[key];
242
+ const propPath = `${itemPath}/${key}`;
243
+ const val = item ? item[key] : undefined;
244
+ const validatorsToRun = [];
245
+ const argsMap = {};
246
+ if (propMeta.required) validatorsToRun.push("required");
247
+ if (propMeta.maxLength !== undefined) {
248
+ validatorsToRun.push("maxLength");
249
+ argsMap["maxLength"] = propMeta.maxLength;
250
+ }
251
+ if (propMeta.minLength !== undefined) {
252
+ validatorsToRun.push("minLength");
253
+ argsMap["minLength"] = propMeta.minLength;
254
+ }
255
+ if (propMeta.pattern !== undefined) {
256
+ validatorsToRun.push("pattern");
257
+ argsMap["pattern"] = {
258
+ regex: propMeta.pattern
259
+ };
260
+ }
261
+ if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {
262
+ validatorsToRun.push("range");
263
+ argsMap["range"] = {
264
+ min: propMeta.minimum,
265
+ max: propMeta.maximum
266
+ };
267
+ }
268
+ const format = propMeta.ui?.format;
269
+ if (format === "email" || format === "url" || format === "iban") {
270
+ validatorsToRun.push(format);
271
+ }
272
+ if (validatorsToRun.length > 0) {
273
+ const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);
274
+ if (!res.isValid) {
275
+ errors.push({
276
+ isValid: false,
277
+ errorMessage: res.errorMessage,
278
+ fieldKey: propPath,
279
+ fieldLabel: propMeta.ui?.label || key
280
+ });
281
+ } else {
282
+ errors.push({
283
+ isValid: true,
284
+ fieldKey: propPath
285
+ }); // Push successful state to clear old errors
286
+ }
287
+ }
288
+ }
289
+ }
290
+ });
291
+ }
191
292
  return errors;
192
293
  }
193
294
 
@@ -199,41 +300,118 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
199
300
  * @returns {IPlugin | undefined} The plugin instance, or undefined if not found.
200
301
  */
201
302
  getPluginByPath(path) {
202
- const cleanPath = path.startsWith("/") ? path : `/${path}`;
203
- const match = this.activePlugins.find(p => p.path === cleanPath || p.path === `/${cleanPath}`);
303
+ const cleanPath = path.replace(/^\//, "");
304
+ const match = this.activePlugins.find(p => p.path.replace(/^\//, "") === cleanPath);
204
305
  return match ? match.plugin : undefined;
205
306
  }
206
307
 
207
308
  /**
208
- * Cleans up internal state and destroys the condition engine to prevent memory leaks.
309
+ * Reports a localized schema validation error to the coordinator ledger.
209
310
  */
210
- destroy() {
211
- if (this.conditionEngine) {
212
- this.conditionEngine.destroy();
213
- this.conditionEngine = null;
311
+ reportSchemaError(fieldPath, errorMessage) {
312
+ const cleanPath = fieldPath.replace(/^\//, "");
313
+ if (!this.validationLedger.has(cleanPath)) {
314
+ this.validationLedger.set(cleanPath, {
315
+ schemaError: null,
316
+ policyError: null
317
+ });
214
318
  }
319
+ this.validationLedger.get(cleanPath).schemaError = errorMessage;
320
+ this.resolveVisualState(cleanPath);
321
+ }
215
322
 
216
- // ------------------------------------------------------------------------
217
- // Ghost Error Prevention
218
- // Flush MessageManager for active plugins before destroying their controls
219
- // ------------------------------------------------------------------------
220
- const messageManager = Messaging;
221
- const existingMessages = messageManager.getMessageModel().getData();
222
- const messagesToRemove = [];
223
- for (const item of this.activePlugins) {
224
- if (this.activeModel) {
225
- const targetPath = `/${item.path.replace(/^\//, "")}`;
226
- const matched = existingMessages.filter(msg => msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.activeModel.getId());
227
- messagesToRemove.push(...matched);
323
+ /**
324
+ * Reports a cross-field policy error to the coordinator ledger.
325
+ */
326
+ reportPolicyError(fieldPath, errorMessage) {
327
+ const cleanPath = fieldPath.replace(/^\//, "");
328
+ if (!this.validationLedger.has(cleanPath)) {
329
+ this.validationLedger.set(cleanPath, {
330
+ schemaError: null,
331
+ policyError: null
332
+ });
333
+ }
334
+ this.validationLedger.get(cleanPath).policyError = errorMessage;
335
+ this.resolveVisualState(cleanPath);
336
+ }
337
+
338
+ /**
339
+ * Computes the final visual state by checking both engines and applies it to the plugin.
340
+ */
341
+ resolveVisualState(cleanPath) {
342
+ const plugin = this.getPluginByPath(cleanPath);
343
+ const ledgerEntry = this.validationLedger.get(cleanPath);
344
+ if (!ledgerEntry) return;
345
+ const isError = ledgerEntry.policyError !== null || ledgerEntry.schemaError !== null;
346
+ const errorMessage = ledgerEntry.policyError || ledgerEntry.schemaError;
347
+ if (plugin && typeof plugin.setVisualValidationState === "function") {
348
+ plugin.setVisualValidationState(!isError, isError ? errorMessage || undefined : undefined);
349
+ } else {
350
+ // Un-tracked template clones (Table Layout rows)
351
+ this.setNativeControlError(cleanPath, isError ? errorMessage || undefined : undefined);
352
+ }
353
+ }
354
+ setNativeControlError(targetPath, errorMessage) {
355
+ if (this.host && this.host.generatedContent) {
356
+ const rootControl = this.host.generatedContent;
357
+ this.traverseAndSetError(rootControl, targetPath, errorMessage);
358
+ }
359
+ }
360
+ traverseAndSetError(control, targetPath, errorMessage) {
361
+ if (!control) return;
362
+ const bindingInfos = [control.getBindingInfo("value"), control.getBindingInfo("selectedKey"), control.getBindingInfo("dateValue"), control.getBindingInfo("selected")];
363
+ for (const info of bindingInfos) {
364
+ if (info && info.parts && info.parts.length > 0) {
365
+ const boundPath = info.parts[0].path;
366
+ // UI5 relative bindings drop the leading slash in the context, but retain it in the path
367
+ if (boundPath === targetPath || targetPath.endsWith(boundPath)) {
368
+ // Ensure we match the exact row context path
369
+ const context = control.getBindingContext(this.host.activeModelName);
370
+ if (context) {
371
+ const fullPath = context.getPath() + "/" + boundPath;
372
+ const cleanedFullPath = fullPath.replace(/^\//, "");
373
+ if (cleanedFullPath === targetPath) {
374
+ if (typeof control.setValueState === "function") {
375
+ control.setValueState(errorMessage ? "Error" : "None");
376
+ if (typeof control.setValueStateText === "function") {
377
+ control.setValueStateText(errorMessage || "");
378
+ }
379
+ }
380
+ }
381
+ }
382
+ }
228
383
  }
384
+ }
385
+ if (typeof control.getAggregation === "function" && typeof control.getMetadata === "function") {
386
+ const aggs = control.getMetadata().getAggregations();
387
+ for (const aggName in aggs) {
388
+ const child = control.getAggregation(aggName);
389
+ if (Array.isArray(child)) {
390
+ child.forEach(c => this.traverseAndSetError(c, targetPath, errorMessage));
391
+ } else if (child) {
392
+ this.traverseAndSetError(child, targetPath, errorMessage);
393
+ }
394
+ }
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Cleans up internal state and destroys the condition engine to prevent memory leaks.
400
+ */
401
+ destroy() {
402
+ for (const item of this.activePlugins) {
229
403
  if (typeof item.plugin.destroy === "function") {
230
404
  item.plugin.destroy();
231
405
  }
232
406
  }
233
- if (messagesToRemove.length > 0) {
234
- messageManager.removeMessages(messagesToRemove);
407
+ for (const item of this.templatePlugins) {
408
+ if (typeof item.plugin.destroy === "function") {
409
+ item.plugin.destroy();
410
+ }
235
411
  }
412
+ this.validationLedger.clear();
236
413
  this.activePlugins = [];
414
+ this.templatePlugins = [];
237
415
  }
238
416
  }
239
417
  var __exports = {
@@ -1 +1 @@
1
- {"version":3,"file":"Engine-dbg.js","names":["ConditionEngine","___ConditionEngine","PluginRegistry","___PluginRegistry","Logger","___utils_Logger","DefaultLayoutGenerator","___DefaultLayoutGenerator","Engine","conditionEngine","activePlugins","isEditable","hasPartialRenderingErrors","useMessageManager","constructor","editable","pluginRegistry","getInstance","build","schema","model","modelName","onSubmit","engineScopeId","onChange","activeModel","isValid","fieldKey","errorMessage","controlId","handleEvent","layoutStrategy","type","layoutManager","getLayout","render","error","msg","message","showErrorPopup","Text","text","generateField","fieldMeta","bindingPath","isTemplate","plugin","getPlugin","ui","widget","setEditable","setUseMessageManager","push","path","scopeId","undefined","control","registerPlugin","generateLayout","ensureLayout","warn","validateAll","applyVisualState","errors","item","result","validate","setVisualValidationState","replace","name","getPluginByPath","cleanPath","startsWith","match","find","p","destroy","messageManager","Messaging","existingMessages","getMessageModel","getData","messagesToRemove","targetPath","matched","filter","getTarget","getMessageProcessor","getId","length","removeMessages","__exports","__esModule"],"sources":["Engine.ts"],"sourcesContent":["/**\n * @file Engine.ts\n * @description The central orchestrator that routes data between the Layout Factory and Plugin Registry (v2).\n */\n\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { ILayoutManager } from \"../interfaces/ILayoutManager\";\nimport { IPlugin, IPluginValidationResult } from \"../interfaces/IPlugin\";\nimport { ConditionEngine } from \"./ConditionEngine\";\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport Control from \"sap/ui/core/Control\";\nimport VBox from \"sap/m/VBox\";\nimport Text from \"sap/m/Text\";\nimport { Logger } from \"../utils/Logger\";\nimport { DefaultLayoutGenerator } from \"./DefaultLayoutGenerator\";\nimport Core from \"sap/ui/core/Core\";\nimport Messaging from \"sap/ui/core/Messaging\";\n\n/**\n * The Engine is responsible for translating a normalized schema into a physical UI5 layout.\n * It delegates layout generation to the configured `LayoutManager` and field generation to the `PluginRegistry`.\n * It strictly routes execution flow and tracks active plugins for validation.\n * It embodies the \"Plugin-First Philosophy\" by routing all complex field and layout rendering\n * through discrete, decoupled plugins rather than handling native overrides.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class Engine {\n /** Handles dynamic conditional logic across the active form. */\n private conditionEngine: ConditionEngine | null = null;\n\n /** Array of all instantiated plugins generated during the current build. */\n private activePlugins: { plugin: IPlugin, path: string }[] = [];\n\n /** Deterministic scope ID injected by the host control to prevent clone collisions. */\n public engineScopeId?: string;\n\n private activeModel?: any;\n\n /** Reference to the GeneratorHost that instantiated this engine, for retrieving global definitions. */\n public host?: unknown;\n\n /** Callback to notify the host that an internal field changed. */\n public onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /** Tracks whether the entire engine is running in Editable mode. */\n public readonly isEditable: boolean = true;\n\n /** Tracks if any fields or sub-layouts failed to render, requiring a warning strip. */\n public hasPartialRenderingErrors: boolean = false;\n\n /** Tracks whether the engine should delegate visual state to the global MessageManager. */\n public readonly useMessageManager: boolean = false;\n\n /** The injected PluginRegistry instance */\n public readonly pluginRegistry: PluginRegistry;\n\n /**\n * Initializes a new Engine instance.\n * @param editable Whether the engine should render form fields as editable or read-only.\n * @param useMessageManager Whether to delegate visual state to UI5 MessageManager.\n * @param pluginRegistry Optional injected plugin registry. Defaults to singleton.\n */\n constructor(editable: boolean = true, useMessageManager: boolean = false, pluginRegistry?: PluginRegistry) {\n this.isEditable = editable;\n this.useMessageManager = useMessageManager;\n this.pluginRegistry = pluginRegistry || PluginRegistry.getInstance();\n }\n\n /**\n * Bootstraps the layout generation process by resolving the correct layout strategy.\n * \n * @param schema The normalized JSON schema representing the view.\n * @param model The active StateManager JSONModel instance.\n * @param modelName The UI5 model alias used for isolation.\n * @param onSubmit Callback fired when form is submitted.\n * @param engineScopeId Deterministic scope ID for this engine instance.\n * @param onChange Callback fired when field values change.\n * @returns The generated root UI5 Control container.\n */\n public build(schema: ISchema, model: any, modelName: string = \"meta\", onSubmit?: () => void, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n this.conditionEngine = new ConditionEngine(schema);\n this.activePlugins = [];\n this.activeModel = model;\n this.engineScopeId = engineScopeId;\n this.onChange = (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => {\n if (this.conditionEngine && fieldKey) {\n this.conditionEngine.handleEvent(fieldKey, isValid);\n }\n if (onChange) {\n onChange(isValid, fieldKey, errorMessage, controlId);\n }\n };\n\n try {\n const layoutStrategy = schema.layoutStrategy || (schema.type === \"array\" ? \"table\" : \"form\");\n const layoutManager = this.pluginRegistry.getLayout(layoutStrategy);\n\n return layoutManager.render(schema, modelName, this, onSubmit);\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(\"[MetaUI Engine] Critical error during layout generation\", msg);\n Logger.showErrorPopup(`Engine failed to generate the layout.\\n\\nDetails: ${msg}`);\n return new Text({ text: \"Critical Layout Error\" });\n }\n }\n\n /**\n * Instantiates the correct plugin for a specific field based on type and widget hints,\n * and tracks the plugin for global validation.\n * \n * @param fieldMeta The metadata schema specific to the field.\n * @param bindingPath The JSON path representing the field within the payload.\n * @param modelName The UI5 JSONModel name used for data binding.\n * @returns The generated UI5 Control for the field.\n */\n public generateField(fieldMeta: IPropertyMetadata, bindingPath: string, modelName: string, isTemplate: boolean = false): Control {\n try {\n const plugin = this.pluginRegistry.getPlugin(fieldMeta.type || \"string\", fieldMeta.ui?.widget);\n if (typeof plugin.setEditable === \"function\") {\n plugin.setEditable(this.isEditable);\n }\n\n if (typeof plugin.setUseMessageManager === \"function\") {\n plugin.setUseMessageManager(this.useMessageManager);\n }\n\n if (!isTemplate) {\n this.activePlugins.push({ plugin, path: bindingPath });\n }\n const scopeId = isTemplate ? undefined : this.engineScopeId;\n const control = plugin.render(fieldMeta, bindingPath, modelName, scopeId, this.onChange, this.activeModel);\n\n if (this.conditionEngine) {\n this.conditionEngine.registerPlugin(bindingPath, plugin);\n }\n\n return control;\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(`[MetaUI Engine] Failed to generate field at ${bindingPath}`, msg);\n Logger.showErrorPopup(`Failed to generate field '${bindingPath}'.\\n\\nDetails: ${msg}`);\n return new Text({ text: `[Error generating field ${bindingPath}]` });\n }\n }\n\n /**\n * Generates a sub-layout (like an embedded table or nested form) without \n * destroying the current Engine state or Condition tracking.\n * \n * @param schema The normalized JSON schema representing the view.\n * @param modelName The UI5 JSONModel name used for data binding (defaults to \"meta\").\n * @param bindingPath Optional path to bind the sub-layout to a specific array/object property.\n * @returns The generated root UI5 Control container.\n */\n public generateLayout(schema: ISchema, modelName: string, bindingPath?: string): Control {\n try {\n if (DefaultLayoutGenerator.ensureLayout(schema)) {\n Logger.warn(`[MetaUI Engine] Missing 'uiLayout' array in sub-schema for ${bindingPath}. Synthesized a default layout mapping.`);\n }\n\n const layoutStrategy = schema.layoutStrategy || (schema.type === \"array\" ? \"table\" : \"form\");\n const layoutManager = this.pluginRegistry.getLayout(layoutStrategy);\n return layoutManager.render(schema, modelName, this, undefined, bindingPath);\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(`[MetaUI Engine] Critical error generating sub-layout for ${bindingPath}`, msg);\n Logger.showErrorPopup(`Engine failed to generate a sub-layout.\\n\\nDetails: ${msg}`);\n return new Text({ text: \"Critical Sub-Layout Error\" });\n }\n }\n\n /**\n * Iterates through all active plugins and triggers their internal validation pipelines.\n * \n * @param applyVisualState If true, explicitly instructs the plugin to natively paint its own ValueState.\n * @returns {IPluginValidationResult[]} Array of validation error objects. Empty array if valid.\n */\n public validateAll(applyVisualState: boolean = false): IPluginValidationResult[] {\n const errors: IPluginValidationResult[] = [];\n for (const item of this.activePlugins) {\n try {\n const result = item.plugin.validate();\n if (applyVisualState && typeof item.plugin.setVisualValidationState === \"function\") {\n item.plugin.setVisualValidationState(result.isValid, result.errorMessage);\n }\n\n if (!result.isValid) {\n // Ensure the path is bound to the error so GeneratorHost knows where to target it\n result.fieldKey = result.fieldKey || item.path.replace(/^\\//, \"\");\n errors.push(result);\n // Add console log to find which plugin fails silently\n Logger.error(\"[MetaUI Validation] Plugin failed validation silently:\", item.path || item.plugin.constructor.name);\n }\n } catch (error) {\n Logger.error(`[MetaUI Engine] Error validating plugin at ${item.path}`, (error as Error).message);\n }\n }\n return errors;\n }\n\n /**\n * Retrieves an active plugin instance by its absolute binding path.\n * Useful for programmatic field manipulation (e.g., custom error injection).\n * \n * @param path The binding path (e.g. \"/General/CustomerName\").\n * @returns {IPlugin | undefined} The plugin instance, or undefined if not found.\n */\n public getPluginByPath(path: string): import(\"../interfaces/IPlugin\").IPlugin | undefined {\n const cleanPath = path.startsWith(\"/\") ? path : `/${path}`;\n const match = this.activePlugins.find(p => p.path === cleanPath || p.path === `/${cleanPath}`);\n return match ? match.plugin : undefined;\n }\n\n /**\n * Cleans up internal state and destroys the condition engine to prevent memory leaks.\n */\n public destroy(): void {\n if (this.conditionEngine) {\n this.conditionEngine.destroy();\n this.conditionEngine = null;\n }\n\n // ------------------------------------------------------------------------\n // Ghost Error Prevention\n // Flush MessageManager for active plugins before destroying their controls\n // ------------------------------------------------------------------------\n const messageManager = Messaging;\n const existingMessages = messageManager.getMessageModel().getData();\n const messagesToRemove: unknown[] = [];\n\n for (const item of this.activePlugins) {\n if (this.activeModel) {\n const targetPath = `/${item.path.replace(/^\\//, \"\")}`;\n const matched = (existingMessages as { getTarget: () => string, getMessageProcessor: () => { getId: () => string } }[]).filter(msg =>\n msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.activeModel!.getId()\n );\n messagesToRemove.push(...matched);\n }\n if (typeof item.plugin.destroy === \"function\") {\n item.plugin.destroy();\n }\n }\n\n if (messagesToRemove.length > 0) {\n messageManager.removeMessages(messagesToRemove);\n }\n\n this.activePlugins = [];\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Engine-dbg.js","names":["PluginRegistry","___PluginRegistry","Logger","___utils_Logger","DefaultLayoutGenerator","___DefaultLayoutGenerator","GlobalPipeline","___PipelineManager","Engine","activePlugins","templatePlugins","validationLedger","Map","isEditable","hasPartialRenderingErrors","useMessageManager","constructor","editable","pluginRegistry","getInstance","build","schema","model","modelName","onSubmit","engineScopeId","onChange","activeModel","isValid","fieldKey","errorMessage","controlId","reportSchemaError","layoutStrategy","type","layoutManager","getLayout","render","error","msg","message","showErrorPopup","Text","text","generateField","fieldMeta","bindingPath","isTemplate","plugin","getPlugin","ui","widget","setEditable","setUseMessageManager","push","path","scopeId","undefined","control","generateLayout","ensureLayout","warn","validateAll","applyVisualState","errors","item","result","validate","replace","name","host","getStateManager","stateManager","payload","extractPayload","getSchema","getParsedSchema","arrayErrors","validatePayloadArrays","forEach","err","filter","e","onArrayMutated","arrayPath","clearArrayMessages","currentPath","properties","key","Object","keys","propSchema","childPath","items","Array","isArray","index","itemPath","propMeta","propPath","val","validatorsToRun","argsMap","required","maxLength","minLength","pattern","regex","minimum","maximum","min","max","format","length","res","executeValidation","fieldLabel","label","getPluginByPath","cleanPath","match","find","p","fieldPath","has","set","schemaError","policyError","get","resolveVisualState","reportPolicyError","ledgerEntry","isError","setVisualValidationState","setNativeControlError","targetPath","generatedContent","rootControl","traverseAndSetError","bindingInfos","getBindingInfo","info","parts","boundPath","endsWith","context","getBindingContext","activeModelName","fullPath","getPath","cleanedFullPath","setValueState","setValueStateText","getAggregation","getMetadata","aggs","getAggregations","aggName","child","c","destroy","clear","__exports","__esModule"],"sources":["Engine.ts"],"sourcesContent":["/**\n * @file Engine.ts\n * @description The central orchestrator that routes data between the Layout Factory and Plugin Registry (v2).\n */\n\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { ILayoutManager } from \"../interfaces/ILayoutManager\";\nimport { IPlugin, IPluginValidationResult } from \"../interfaces/IPlugin\";\n\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport Control from \"sap/ui/core/Control\";\nimport VBox from \"sap/m/VBox\";\nimport Text from \"sap/m/Text\";\nimport { Logger } from \"../utils/Logger\";\nimport { DefaultLayoutGenerator } from \"./DefaultLayoutGenerator\";\nimport Core from \"sap/ui/core/Core\";\nimport Messaging from \"sap/ui/core/Messaging\";\nimport { GlobalPipeline } from \"./PipelineManager\";\n\n/**\n * The Engine is responsible for translating a normalized schema into a physical UI5 layout.\n * It delegates layout generation to the configured `LayoutManager` and field generation to the `PluginRegistry`.\n * It strictly routes execution flow and tracks active plugins for validation.\n * It embodies the \"Plugin-First Philosophy\" by routing all complex field and layout rendering\n * through discrete, decoupled plugins rather than handling native overrides.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class Engine {\n\n\n /** Array of all instantiated plugins generated during the current build. */\n private activePlugins: { plugin: IPlugin, path: string }[] = [];\n\n /** Array of template plugins generated for table rows to prevent memory leaks during destruction. */\n private templatePlugins: { plugin: IPlugin, path: string }[] = [];\n\n /** Deterministic scope ID injected by the host control to prevent clone collisions. */\n public engineScopeId?: string;\n\n private activeModel?: unknown;\n\n /** Ledger tracking local vs cross-field errors to prevent visual race conditions. */\n private validationLedger: Map<string, { schemaError: string | null, policyError: string | null }> = new Map();\n\n /** Reference to the GeneratorHost that instantiated this engine, for retrieving global definitions. */\n public host?: unknown;\n\n /** Callback to notify the host that an internal field changed. */\n public onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /** Tracks whether the entire engine is running in Editable mode. */\n public readonly isEditable: boolean = true;\n\n /** Tracks if any fields or sub-layouts failed to render, requiring a warning strip. */\n public hasPartialRenderingErrors: boolean = false;\n\n /** Tracks whether the engine should delegate visual state to the global MessageManager. */\n public readonly useMessageManager: boolean = false;\n\n /** The injected PluginRegistry instance */\n public readonly pluginRegistry: PluginRegistry;\n\n /**\n * Initializes a new Engine instance.\n * @param editable Whether the engine should render form fields as editable or read-only.\n * @param useMessageManager Whether to delegate visual state to UI5 MessageManager.\n * @param pluginRegistry Optional injected plugin registry. Defaults to singleton.\n */\n constructor(editable: boolean = true, useMessageManager: boolean = false, pluginRegistry?: PluginRegistry) {\n this.isEditable = editable;\n this.useMessageManager = useMessageManager;\n this.pluginRegistry = pluginRegistry || PluginRegistry.getInstance();\n }\n\n /**\n * Bootstraps the layout generation process by resolving the correct layout strategy.\n * \n * @param schema The normalized JSON schema representing the view.\n * @param model The active StateManager JSONModel instance.\n * @param modelName The UI5 model alias used for isolation.\n * @param onSubmit Callback fired when form is submitted.\n * @param engineScopeId Deterministic scope ID for this engine instance.\n * @param onChange Callback fired when field values change.\n * @returns The generated root UI5 Control container.\n */\n public build(schema: ISchema, model: unknown, modelName: string = \"meta\", onSubmit?: () => void, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n\n this.activePlugins = [];\n this.activeModel = model;\n this.engineScopeId = engineScopeId;\n this.onChange = (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => {\n if (fieldKey) {\n this.reportSchemaError(fieldKey, isValid ? null : errorMessage || \"Invalid input\");\n }\n\n if (onChange) {\n onChange(isValid, fieldKey, errorMessage, controlId);\n }\n };\n\n try {\n const layoutStrategy = schema.layoutStrategy || (schema.type === \"array\" ? \"table\" : \"form\");\n const layoutManager = this.pluginRegistry.getLayout(layoutStrategy);\n\n return layoutManager.render(schema, modelName, this, onSubmit);\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(\"[MetaUI Engine] Critical error during layout generation\", msg);\n Logger.showErrorPopup(`Engine failed to generate the layout.\\n\\nDetails: ${msg}`);\n return new Text({ text: \"Critical Layout Error\" });\n }\n }\n\n /**\n * Instantiates the correct plugin for a specific field based on type and widget hints,\n * and tracks the plugin for global validation.\n * \n * @param fieldMeta The metadata schema specific to the field.\n * @param bindingPath The JSON path representing the field within the payload.\n * @param modelName The UI5 JSONModel name used for data binding.\n * @returns The generated UI5 Control for the field.\n */\n public generateField(fieldMeta: IPropertyMetadata, bindingPath: string, modelName: string, isTemplate: boolean = false): Control {\n try {\n const plugin = this.pluginRegistry.getPlugin(fieldMeta.type || \"string\", fieldMeta.ui?.widget);\n if (typeof plugin.setEditable === \"function\") {\n plugin.setEditable(this.isEditable);\n }\n\n if (typeof plugin.setUseMessageManager === \"function\") {\n plugin.setUseMessageManager(this.useMessageManager);\n }\n\n if (!isTemplate) {\n this.activePlugins.push({ plugin, path: bindingPath });\n } else {\n this.templatePlugins.push({ plugin, path: bindingPath });\n }\n const scopeId = isTemplate ? undefined : this.engineScopeId;\n const control = plugin.render(fieldMeta, bindingPath, modelName, scopeId, this.onChange, this.activeModel);\n\n\n\n return control;\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(`[MetaUI Engine] Failed to generate field at ${bindingPath}`, msg);\n Logger.showErrorPopup(`Failed to generate field '${bindingPath}'.\\n\\nDetails: ${msg}`);\n return new Text({ text: `[Error generating field ${bindingPath}]` });\n }\n }\n\n /**\n * Generates a sub-layout (like an embedded table or nested form) without \n * destroying the current Engine state or Condition tracking.\n * \n * @param schema The normalized JSON schema representing the view.\n * @param modelName The UI5 JSONModel name used for data binding (defaults to \"meta\").\n * @param bindingPath Optional path to bind the sub-layout to a specific array/object property.\n * @returns The generated root UI5 Control container.\n */\n public generateLayout(schema: ISchema, modelName: string, bindingPath?: string): Control {\n try {\n if (DefaultLayoutGenerator.ensureLayout(schema)) {\n Logger.warn(`[MetaUI Engine] Missing 'uiLayout' array in sub-schema for ${bindingPath}. Synthesized a default layout mapping.`);\n }\n\n const layoutStrategy = schema.layoutStrategy || (schema.type === \"array\" ? \"table\" : \"form\");\n const layoutManager = this.pluginRegistry.getLayout(layoutStrategy);\n return layoutManager.render(schema, modelName, this, undefined, bindingPath);\n } catch (error) {\n this.hasPartialRenderingErrors = true;\n const msg = (error as Error).message;\n Logger.error(`[MetaUI Engine] Critical error generating sub-layout for ${bindingPath}`, msg);\n Logger.showErrorPopup(`Engine failed to generate a sub-layout.\\n\\nDetails: ${msg}`);\n return new Text({ text: \"Critical Sub-Layout Error\" });\n }\n }\n\n /**\n * Iterates through all active plugins and triggers their internal validation pipelines.\n * \n * @param applyVisualState If true, explicitly instructs the plugin to natively paint its own ValueState.\n * @returns {IPluginValidationResult[]} Array of validation error objects. Empty array if valid.\n */\n public validateAll(applyVisualState: boolean = false): IPluginValidationResult[] {\n const errors: IPluginValidationResult[] = [];\n for (const item of this.activePlugins) {\n try {\n const result = item.plugin.validate();\n if (applyVisualState) {\n this.reportSchemaError(item.path, result.isValid ? null : result.errorMessage || \"Invalid input\");\n }\n\n if (!result.isValid) {\n // Ensure the path is bound to the error so GeneratorHost knows where to target it\n result.fieldKey = result.fieldKey || item.path.replace(/^\\//, \"\");\n errors.push(result);\n // Add console log to find which plugin fails silently\n Logger.error(\"[MetaUI Validation] Plugin failed validation silently:\", item.path || item.plugin.constructor.name);\n }\n } catch (error) {\n Logger.error(`[MetaUI Engine] Error validating plugin at ${item.path}`, (error as Error).message);\n }\n }\n\n // 2. Recursively validate arrays via StateManager payload traversing for Table layout rows\n if (this.host && typeof (this.host as any).getStateManager === \"function\") {\n const stateManager = (this.host as any).getStateManager();\n if (stateManager) {\n const payload = stateManager.extractPayload();\n const schema = stateManager.getSchema ? stateManager.getSchema() : (this.host as any).getParsedSchema?.();\n if (payload && schema) {\n const arrayErrors = this.validatePayloadArrays(schema, payload, \"\");\n if (applyVisualState) {\n arrayErrors.forEach(err => {\n if (err.fieldKey) {\n this.reportSchemaError(err.fieldKey, err.isValid ? null : err.errorMessage || \"Invalid input\");\n }\n });\n }\n errors.push(...arrayErrors.filter(e => !e.isValid));\n }\n }\n }\n\n return errors;\n }\n\n public onArrayMutated(arrayPath: string): void {\n if (this.host && typeof (this.host as any).getStateManager === \"function\") {\n const stateManager = (this.host as any).getStateManager();\n if (stateManager && typeof stateManager.clearArrayMessages === \"function\") {\n stateManager.clearArrayMessages(arrayPath);\n }\n }\n }\n\n private validatePayloadArrays(schema: any, payload: any, currentPath: string): IPluginValidationResult[] {\n const errors: IPluginValidationResult[] = [];\n if (!schema || !payload || typeof payload !== \"object\") return errors;\n\n if (schema.type === \"object\" && schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n if (payload[key] !== undefined) {\n const childPath = currentPath ? `${currentPath}/${key}` : key;\n errors.push(...this.validatePayloadArrays(propSchema, payload[key], childPath));\n }\n }\n } else if (schema.type === \"array\" && schema.items && Array.isArray(payload)) {\n payload.forEach((item, index) => {\n const itemPath = currentPath ? `${currentPath}/${index}` : `${index}`;\n if (schema.items.type === \"object\" && schema.items.properties) {\n for (const key of Object.keys(schema.items.properties)) {\n const propMeta = schema.items.properties[key];\n const propPath = `${itemPath}/${key}`;\n const val = item ? item[key] : undefined;\n \n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (propMeta.required) validatorsToRun.push(\"required\");\n if (propMeta.maxLength !== undefined) {\n validatorsToRun.push(\"maxLength\");\n argsMap[\"maxLength\"] = propMeta.maxLength;\n }\n if (propMeta.minLength !== undefined) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = propMeta.minLength;\n }\n if (propMeta.pattern !== undefined) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = { regex: propMeta.pattern };\n }\n if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: propMeta.minimum, max: propMeta.maximum };\n }\n const format = propMeta.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n \n if (validatorsToRun.length > 0) {\n const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n if (!res.isValid) {\n errors.push({\n isValid: false,\n errorMessage: res.errorMessage,\n fieldKey: propPath,\n fieldLabel: propMeta.ui?.label || key\n });\n } else {\n errors.push({ isValid: true, fieldKey: propPath }); // Push successful state to clear old errors\n }\n }\n }\n }\n });\n }\n return errors;\n }\n\n /**\n * Retrieves an active plugin instance by its absolute binding path.\n * Useful for programmatic field manipulation (e.g., custom error injection).\n * \n * @param path The binding path (e.g. \"/General/CustomerName\").\n * @returns {IPlugin | undefined} The plugin instance, or undefined if not found.\n */\n public getPluginByPath(path: string): import(\"../interfaces/IPlugin\").IPlugin | undefined {\n const cleanPath = path.replace(/^\\//, \"\");\n const match = this.activePlugins.find(p => p.path.replace(/^\\//, \"\") === cleanPath);\n return match ? match.plugin : undefined;\n }\n\n /**\n * Reports a localized schema validation error to the coordinator ledger.\n */\n public reportSchemaError(fieldPath: string, errorMessage: string | null): void {\n const cleanPath = fieldPath.replace(/^\\//, \"\");\n if (!this.validationLedger.has(cleanPath)) {\n this.validationLedger.set(cleanPath, { schemaError: null, policyError: null });\n }\n this.validationLedger.get(cleanPath)!.schemaError = errorMessage;\n this.resolveVisualState(cleanPath);\n }\n\n /**\n * Reports a cross-field policy error to the coordinator ledger.\n */\n public reportPolicyError(fieldPath: string, errorMessage: string | null): void {\n const cleanPath = fieldPath.replace(/^\\//, \"\");\n if (!this.validationLedger.has(cleanPath)) {\n this.validationLedger.set(cleanPath, { schemaError: null, policyError: null });\n }\n this.validationLedger.get(cleanPath)!.policyError = errorMessage;\n this.resolveVisualState(cleanPath);\n }\n\n /**\n * Computes the final visual state by checking both engines and applies it to the plugin.\n */\n private resolveVisualState(cleanPath: string): void {\n const plugin = this.getPluginByPath(cleanPath);\n const ledgerEntry = this.validationLedger.get(cleanPath);\n if (!ledgerEntry) return;\n\n const isError = ledgerEntry.policyError !== null || ledgerEntry.schemaError !== null;\n const errorMessage = ledgerEntry.policyError || ledgerEntry.schemaError;\n\n if (plugin && typeof plugin.setVisualValidationState === \"function\") {\n plugin.setVisualValidationState(!isError, isError ? errorMessage || undefined : undefined);\n } else {\n // Un-tracked template clones (Table Layout rows)\n this.setNativeControlError(cleanPath, isError ? errorMessage || undefined : undefined);\n }\n }\n\n private setNativeControlError(targetPath: string, errorMessage?: string): void {\n if (this.host && (this.host as any).generatedContent) {\n const rootControl = (this.host as any).generatedContent;\n this.traverseAndSetError(rootControl, targetPath, errorMessage);\n }\n }\n\n private traverseAndSetError(control: any, targetPath: string, errorMessage?: string): void {\n if (!control) return;\n \n const bindingInfos = [control.getBindingInfo(\"value\"), control.getBindingInfo(\"selectedKey\"), control.getBindingInfo(\"dateValue\"), control.getBindingInfo(\"selected\")];\n for (const info of bindingInfos) {\n if (info && info.parts && info.parts.length > 0) {\n const boundPath = info.parts[0].path;\n // UI5 relative bindings drop the leading slash in the context, but retain it in the path\n if (boundPath === targetPath || targetPath.endsWith(boundPath)) {\n // Ensure we match the exact row context path\n const context = control.getBindingContext((this.host as any).activeModelName);\n if (context) {\n const fullPath = context.getPath() + \"/\" + boundPath;\n const cleanedFullPath = fullPath.replace(/^\\//, \"\");\n if (cleanedFullPath === targetPath) {\n if (typeof control.setValueState === \"function\") {\n control.setValueState(errorMessage ? \"Error\" : \"None\");\n if (typeof control.setValueStateText === \"function\") {\n control.setValueStateText(errorMessage || \"\");\n }\n }\n }\n }\n }\n }\n }\n \n if (typeof control.getAggregation === \"function\" && typeof control.getMetadata === \"function\") {\n const aggs = control.getMetadata().getAggregations();\n for (const aggName in aggs) {\n const child = control.getAggregation(aggName);\n if (Array.isArray(child)) {\n child.forEach(c => this.traverseAndSetError(c, targetPath, errorMessage));\n } else if (child) {\n this.traverseAndSetError(child, targetPath, errorMessage);\n }\n }\n }\n }\n\n /**\n * Cleans up internal state and destroys the condition engine to prevent memory leaks.\n */\n public destroy(): void {\n\n\n for (const item of this.activePlugins) {\n if (typeof item.plugin.destroy === \"function\") {\n item.plugin.destroy();\n }\n }\n\n for (const item of this.templatePlugins) {\n if (typeof item.plugin.destroy === \"function\") {\n item.plugin.destroy();\n }\n }\n\n this.validationLedger.clear();\n this.activePlugins = [];\n this.templatePlugins = [];\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -18,13 +18,15 @@ declare module "nz/co/siliconst/ui5/metaui/core/Engine" {
18
18
  * @public
19
19
  */
20
20
  export class Engine {
21
- /** Handles dynamic conditional logic across the active form. */
22
- private conditionEngine;
23
21
  /** Array of all instantiated plugins generated during the current build. */
24
22
  private activePlugins;
23
+ /** Array of template plugins generated for table rows to prevent memory leaks during destruction. */
24
+ private templatePlugins;
25
25
  /** Deterministic scope ID injected by the host control to prevent clone collisions. */
26
26
  engineScopeId?: string;
27
27
  private activeModel?;
28
+ /** Ledger tracking local vs cross-field errors to prevent visual race conditions. */
29
+ private validationLedger;
28
30
  /** Reference to the GeneratorHost that instantiated this engine, for retrieving global definitions. */
29
31
  host?: unknown;
30
32
  /** Callback to notify the host that an internal field changed. */
@@ -55,7 +57,7 @@ declare module "nz/co/siliconst/ui5/metaui/core/Engine" {
55
57
  * @param onChange Callback fired when field values change.
56
58
  * @returns The generated root UI5 Control container.
57
59
  */
58
- build(schema: ISchema, model: any, modelName?: string, onSubmit?: () => void, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control;
60
+ build(schema: ISchema, model: unknown, modelName?: string, onSubmit?: () => void, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control;
59
61
  /**
60
62
  * Instantiates the correct plugin for a specific field based on type and widget hints,
61
63
  * and tracks the plugin for global validation.
@@ -83,6 +85,8 @@ declare module "nz/co/siliconst/ui5/metaui/core/Engine" {
83
85
  * @returns {IPluginValidationResult[]} Array of validation error objects. Empty array if valid.
84
86
  */
85
87
  validateAll(applyVisualState?: boolean): IPluginValidationResult[];
88
+ onArrayMutated(arrayPath: string): void;
89
+ private validatePayloadArrays;
86
90
  /**
87
91
  * Retrieves an active plugin instance by its absolute binding path.
88
92
  * Useful for programmatic field manipulation (e.g., custom error injection).
@@ -91,6 +95,20 @@ declare module "nz/co/siliconst/ui5/metaui/core/Engine" {
91
95
  * @returns {IPlugin | undefined} The plugin instance, or undefined if not found.
92
96
  */
93
97
  getPluginByPath(path: string): import("nz/co/siliconst/ui5/metaui/interfaces/IPlugin").IPlugin | undefined;
98
+ /**
99
+ * Reports a localized schema validation error to the coordinator ledger.
100
+ */
101
+ reportSchemaError(fieldPath: string, errorMessage: string | null): void;
102
+ /**
103
+ * Reports a cross-field policy error to the coordinator ledger.
104
+ */
105
+ reportPolicyError(fieldPath: string, errorMessage: string | null): void;
106
+ /**
107
+ * Computes the final visual state by checking both engines and applies it to the plugin.
108
+ */
109
+ private resolveVisualState;
110
+ private setNativeControlError;
111
+ private traverseAndSetError;
94
112
  /**
95
113
  * Cleans up internal state and destroys the condition engine to prevent memory leaks.
96
114
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wCAAwC,CAAC;IACxD;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAE3F,OAAO,EAAW,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;IAEjG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;IAChF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAQ1C;;;;;;;;;OASG;IACH,MAAa,MAAM;QACf,gEAAgE;QAChE,OAAO,CAAC,eAAe,CAAgC;QAEvD,4EAA4E;QAC5E,OAAO,CAAC,aAAa,CAA2C;QAEhE,uFAAuF;QAChF,aAAa,CAAC,EAAE,MAAM,CAAC;QAE9B,OAAO,CAAC,WAAW,CAAC,CAAM;QAE1B,uGAAuG;QAChG,IAAI,CAAC,EAAE,OAAO,CAAC;QAEtB,kEAAkE;QAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAE3G,oEAAoE;QACpE,SAAgB,UAAU,EAAE,OAAO,CAAQ;QAE3C,uFAAuF;QAChF,yBAAyB,EAAE,OAAO,CAAS;QAElD,2FAA2F;QAC3F,SAAgB,iBAAiB,EAAE,OAAO,CAAS;QAEnD,2CAA2C;QAC3C,SAAgB,cAAc,EAAE,cAAc,CAAC;QAE/C;;;;;WAKG;oBACS,QAAQ,GAAE,OAAc,EAAE,iBAAiB,GAAE,OAAe,EAAE,cAAc,CAAC,EAAE,cAAc;QAMzG;;;;;;;;;;WAUG;QACI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,GAAE,MAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA4BlO;;;;;;;;WAQG;QACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO;QA+BhI;;;;;;;;WAQG;QACI,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;QAkBxF;;;;;WAKG;QACI,WAAW,CAAC,gBAAgB,GAAE,OAAe,GAAG,uBAAuB,EAAE;QAuBhF;;;;;;WAMG;QACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,+CAA+C,EAAE,OAAO,GAAG,SAAS;QAMjH;;WAEG;QACI,OAAO,IAAI,IAAI;KAiCzB;CAEA"}
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wCAAwC,CAAC;IACxD;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAE3F,OAAO,EAAW,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;IAEjG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;IAChF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAS1C;;;;;;;;;OASG;IACH,MAAa,MAAM;QAGf,4EAA4E;QAC5E,OAAO,CAAC,aAAa,CAA2C;QAEhE,qGAAqG;QACrG,OAAO,CAAC,eAAe,CAA2C;QAElE,uFAAuF;QAChF,aAAa,CAAC,EAAE,MAAM,CAAC;QAE9B,OAAO,CAAC,WAAW,CAAC,CAAU;QAE9B,qFAAqF;QACrF,OAAO,CAAC,gBAAgB,CAAsF;QAE9G,uGAAuG;QAChG,IAAI,CAAC,EAAE,OAAO,CAAC;QAEtB,kEAAkE;QAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAE3G,oEAAoE;QACpE,SAAgB,UAAU,EAAE,OAAO,CAAQ;QAE3C,uFAAuF;QAChF,yBAAyB,EAAE,OAAO,CAAS;QAElD,2FAA2F;QAC3F,SAAgB,iBAAiB,EAAE,OAAO,CAAS;QAEnD,2CAA2C;QAC3C,SAAgB,cAAc,EAAE,cAAc,CAAC;QAE/C;;;;;WAKG;oBACS,QAAQ,GAAE,OAAc,EAAE,iBAAiB,GAAE,OAAe,EAAE,cAAc,CAAC,EAAE,cAAc;QAMzG;;;;;;;;;;WAUG;QACI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,MAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA6BtO;;;;;;;;WAQG;QACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO;QA+BhI;;;;;;;;WAQG;QACI,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;QAkBxF;;;;;WAKG;QACI,WAAW,CAAC,gBAAgB,GAAE,OAAe,GAAG,uBAAuB,EAAE;QA4CzE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;QAS9C,OAAO,CAAC,qBAAqB;QAkE7B;;;;;;WAMG;QACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,+CAA+C,EAAE,OAAO,GAAG,SAAS;QAMjH;;WAEG;QACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;QAS9E;;WAEG;QACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;QAS9E;;WAEG;QACH,OAAO,CAAC,kBAAkB;QAgB1B,OAAO,CAAC,qBAAqB;QAO7B,OAAO,CAAC,mBAAmB;QAwC3B;;WAEG;QACI,OAAO,IAAI,IAAI;KAmBzB;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./ConditionEngine","./PluginRegistry","sap/m/Text","../utils/Logger","./DefaultLayoutGenerator","sap/ui/core/Messaging"],function(e,t,i,n,s,a){"use strict";const r=e["ConditionEngine"];const o=t["PluginRegistry"];const g=n["Logger"];const l=s["DefaultLayoutGenerator"];class u{conditionEngine=null;activePlugins=[];isEditable=true;hasPartialRenderingErrors=false;useMessageManager=false;constructor(e=true,t=false,i){this.isEditable=e;this.useMessageManager=t;this.pluginRegistry=i||o.getInstance()}build(e,t,n="meta",s,a,o){this.conditionEngine=new r(e);this.activePlugins=[];this.activeModel=t;this.engineScopeId=a;this.onChange=(e,t,i,n)=>{if(this.conditionEngine&&t){this.conditionEngine.handleEvent(t,e)}if(o){o(e,t,i,n)}};try{const t=e.layoutStrategy||(e.type==="array"?"table":"form");const i=this.pluginRegistry.getLayout(t);return i.render(e,n,this,s)}catch(e){this.hasPartialRenderingErrors=true;const t=e.message;g.error("[MetaUI Engine] Critical error during layout generation",t);g.showErrorPopup(`Engine failed to generate the layout.\n\nDetails: ${t}`);return new i({text:"Critical Layout Error"})}}generateField(e,t,n,s=false){try{const i=this.pluginRegistry.getPlugin(e.type||"string",e.ui?.widget);if(typeof i.setEditable==="function"){i.setEditable(this.isEditable)}if(typeof i.setUseMessageManager==="function"){i.setUseMessageManager(this.useMessageManager)}if(!s){this.activePlugins.push({plugin:i,path:t})}const a=s?undefined:this.engineScopeId;const r=i.render(e,t,n,a,this.onChange,this.activeModel);if(this.conditionEngine){this.conditionEngine.registerPlugin(t,i)}return r}catch(e){this.hasPartialRenderingErrors=true;const n=e.message;g.error(`[MetaUI Engine] Failed to generate field at ${t}`,n);g.showErrorPopup(`Failed to generate field '${t}'.\n\nDetails: ${n}`);return new i({text:`[Error generating field ${t}]`})}}generateLayout(e,t,n){try{if(l.ensureLayout(e)){g.warn(`[MetaUI Engine] Missing 'uiLayout' array in sub-schema for ${n}. Synthesized a default layout mapping.`)}const i=e.layoutStrategy||(e.type==="array"?"table":"form");const s=this.pluginRegistry.getLayout(i);return s.render(e,t,this,undefined,n)}catch(e){this.hasPartialRenderingErrors=true;const t=e.message;g.error(`[MetaUI Engine] Critical error generating sub-layout for ${n}`,t);g.showErrorPopup(`Engine failed to generate a sub-layout.\n\nDetails: ${t}`);return new i({text:"Critical Sub-Layout Error"})}}validateAll(e=false){const t=[];for(const i of this.activePlugins){try{const n=i.plugin.validate();if(e&&typeof i.plugin.setVisualValidationState==="function"){i.plugin.setVisualValidationState(n.isValid,n.errorMessage)}if(!n.isValid){n.fieldKey=n.fieldKey||i.path.replace(/^\//,"");t.push(n);g.error("[MetaUI Validation] Plugin failed validation silently:",i.path||i.plugin.constructor.name)}}catch(e){g.error(`[MetaUI Engine] Error validating plugin at ${i.path}`,e.message)}}return t}getPluginByPath(e){const t=e.startsWith("/")?e:`/${e}`;const i=this.activePlugins.find(e=>e.path===t||e.path===`/${t}`);return i?i.plugin:undefined}destroy(){if(this.conditionEngine){this.conditionEngine.destroy();this.conditionEngine=null}const e=a;const t=e.getMessageModel().getData();const i=[];for(const e of this.activePlugins){if(this.activeModel){const n=`/${e.path.replace(/^\//,"")}`;const s=t.filter(e=>e.getTarget()===n&&e.getMessageProcessor()&&e.getMessageProcessor().getId()===this.activeModel.getId());i.push(...s)}if(typeof e.plugin.destroy==="function"){e.plugin.destroy()}}if(i.length>0){e.removeMessages(i)}this.activePlugins=[]}}var c={__esModule:true};c.Engine=u;return c});
1
+ sap.ui.define(["./PluginRegistry","sap/m/Text","../utils/Logger","./DefaultLayoutGenerator","./PipelineManager"],function(e,t,i,r,n){"use strict";const a=e["PluginRegistry"];const s=i["Logger"];const o=r["DefaultLayoutGenerator"];const l=n["GlobalPipeline"];class g{activePlugins=[];templatePlugins=[];validationLedger=new Map;isEditable=true;hasPartialRenderingErrors=false;useMessageManager=false;constructor(e=true,t=false,i){this.isEditable=e;this.useMessageManager=t;this.pluginRegistry=i||a.getInstance()}build(e,i,r="meta",n,a,o){this.activePlugins=[];this.activeModel=i;this.engineScopeId=a;this.onChange=(e,t,i,r)=>{if(t){this.reportSchemaError(t,e?null:i||"Invalid input")}if(o){o(e,t,i,r)}};try{const t=e.layoutStrategy||(e.type==="array"?"table":"form");const i=this.pluginRegistry.getLayout(t);return i.render(e,r,this,n)}catch(e){this.hasPartialRenderingErrors=true;const i=e.message;s.error("[MetaUI Engine] Critical error during layout generation",i);s.showErrorPopup(`Engine failed to generate the layout.\n\nDetails: ${i}`);return new t({text:"Critical Layout Error"})}}generateField(e,i,r,n=false){try{const t=this.pluginRegistry.getPlugin(e.type||"string",e.ui?.widget);if(typeof t.setEditable==="function"){t.setEditable(this.isEditable)}if(typeof t.setUseMessageManager==="function"){t.setUseMessageManager(this.useMessageManager)}if(!n){this.activePlugins.push({plugin:t,path:i})}else{this.templatePlugins.push({plugin:t,path:i})}const a=n?undefined:this.engineScopeId;const s=t.render(e,i,r,a,this.onChange,this.activeModel);return s}catch(e){this.hasPartialRenderingErrors=true;const r=e.message;s.error(`[MetaUI Engine] Failed to generate field at ${i}`,r);s.showErrorPopup(`Failed to generate field '${i}'.\n\nDetails: ${r}`);return new t({text:`[Error generating field ${i}]`})}}generateLayout(e,i,r){try{if(o.ensureLayout(e)){s.warn(`[MetaUI Engine] Missing 'uiLayout' array in sub-schema for ${r}. Synthesized a default layout mapping.`)}const t=e.layoutStrategy||(e.type==="array"?"table":"form");const n=this.pluginRegistry.getLayout(t);return n.render(e,i,this,undefined,r)}catch(e){this.hasPartialRenderingErrors=true;const i=e.message;s.error(`[MetaUI Engine] Critical error generating sub-layout for ${r}`,i);s.showErrorPopup(`Engine failed to generate a sub-layout.\n\nDetails: ${i}`);return new t({text:"Critical Sub-Layout Error"})}}validateAll(e=false){const t=[];for(const i of this.activePlugins){try{const r=i.plugin.validate();if(e){this.reportSchemaError(i.path,r.isValid?null:r.errorMessage||"Invalid input")}if(!r.isValid){r.fieldKey=r.fieldKey||i.path.replace(/^\//,"");t.push(r);s.error("[MetaUI Validation] Plugin failed validation silently:",i.path||i.plugin.constructor.name)}}catch(e){s.error(`[MetaUI Engine] Error validating plugin at ${i.path}`,e.message)}}if(this.host&&typeof this.host.getStateManager==="function"){const i=this.host.getStateManager();if(i){const r=i.extractPayload();const n=i.getSchema?i.getSchema():this.host.getParsedSchema?.();if(r&&n){const i=this.validatePayloadArrays(n,r,"");if(e){i.forEach(e=>{if(e.fieldKey){this.reportSchemaError(e.fieldKey,e.isValid?null:e.errorMessage||"Invalid input")}})}t.push(...i.filter(e=>!e.isValid))}}}return t}onArrayMutated(e){if(this.host&&typeof this.host.getStateManager==="function"){const t=this.host.getStateManager();if(t&&typeof t.clearArrayMessages==="function"){t.clearArrayMessages(e)}}}validatePayloadArrays(e,t,i){const r=[];if(!e||!t||typeof t!=="object")return r;if(e.type==="object"&&e.properties){for(const n of Object.keys(e.properties)){const a=e.properties[n];if(t[n]!==undefined){const e=i?`${i}/${n}`:n;r.push(...this.validatePayloadArrays(a,t[n],e))}}}else if(e.type==="array"&&e.items&&Array.isArray(t)){t.forEach((t,n)=>{const a=i?`${i}/${n}`:`${n}`;if(e.items.type==="object"&&e.items.properties){for(const i of Object.keys(e.items.properties)){const n=e.items.properties[i];const s=`${a}/${i}`;const o=t?t[i]:undefined;const g=[];const u={};if(n.required)g.push("required");if(n.maxLength!==undefined){g.push("maxLength");u["maxLength"]=n.maxLength}if(n.minLength!==undefined){g.push("minLength");u["minLength"]=n.minLength}if(n.pattern!==undefined){g.push("pattern");u["pattern"]={regex:n.pattern}}if(n.minimum!==undefined||n.maximum!==undefined){g.push("range");u["range"]={min:n.minimum,max:n.maximum}}const c=n.ui?.format;if(c==="email"||c==="url"||c==="iban"){g.push(c)}if(g.length>0){const e=l.executeValidation(o,g,u);if(!e.isValid){r.push({isValid:false,errorMessage:e.errorMessage,fieldKey:s,fieldLabel:n.ui?.label||i})}else{r.push({isValid:true,fieldKey:s})}}}}})}return r}getPluginByPath(e){const t=e.replace(/^\//,"");const i=this.activePlugins.find(e=>e.path.replace(/^\//,"")===t);return i?i.plugin:undefined}reportSchemaError(e,t){const i=e.replace(/^\//,"");if(!this.validationLedger.has(i)){this.validationLedger.set(i,{schemaError:null,policyError:null})}this.validationLedger.get(i).schemaError=t;this.resolveVisualState(i)}reportPolicyError(e,t){const i=e.replace(/^\//,"");if(!this.validationLedger.has(i)){this.validationLedger.set(i,{schemaError:null,policyError:null})}this.validationLedger.get(i).policyError=t;this.resolveVisualState(i)}resolveVisualState(e){const t=this.getPluginByPath(e);const i=this.validationLedger.get(e);if(!i)return;const r=i.policyError!==null||i.schemaError!==null;const n=i.policyError||i.schemaError;if(t&&typeof t.setVisualValidationState==="function"){t.setVisualValidationState(!r,r?n||undefined:undefined)}else{this.setNativeControlError(e,r?n||undefined:undefined)}}setNativeControlError(e,t){if(this.host&&this.host.generatedContent){const i=this.host.generatedContent;this.traverseAndSetError(i,e,t)}}traverseAndSetError(e,t,i){if(!e)return;const r=[e.getBindingInfo("value"),e.getBindingInfo("selectedKey"),e.getBindingInfo("dateValue"),e.getBindingInfo("selected")];for(const n of r){if(n&&n.parts&&n.parts.length>0){const r=n.parts[0].path;if(r===t||t.endsWith(r)){const n=e.getBindingContext(this.host.activeModelName);if(n){const a=n.getPath()+"/"+r;const s=a.replace(/^\//,"");if(s===t){if(typeof e.setValueState==="function"){e.setValueState(i?"Error":"None");if(typeof e.setValueStateText==="function"){e.setValueStateText(i||"")}}}}}}}if(typeof e.getAggregation==="function"&&typeof e.getMetadata==="function"){const r=e.getMetadata().getAggregations();for(const n in r){const r=e.getAggregation(n);if(Array.isArray(r)){r.forEach(e=>this.traverseAndSetError(e,t,i))}else if(r){this.traverseAndSetError(r,t,i)}}}}destroy(){for(const e of this.activePlugins){if(typeof e.plugin.destroy==="function"){e.plugin.destroy()}}for(const e of this.templatePlugins){if(typeof e.plugin.destroy==="function"){e.plugin.destroy()}}this.validationLedger.clear();this.activePlugins=[];this.templatePlugins=[]}}var u={__esModule:true};u.Engine=g;return u});
2
2
  //# sourceMappingURL=Engine.js.map