@siliconst/metaui 1.4.14 → 1.4.20

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 (405) hide show
  1. package/package.json +1 -1
  2. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig-dbg.js +47 -0
  3. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig-dbg.js.map +1 -0
  4. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.d.ts +28 -0
  5. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.d.ts.map +1 -0
  6. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.js +2 -0
  7. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.js.map +1 -0
  8. package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.ts +39 -0
  9. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +83 -0
  10. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -0
  11. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +30 -0
  12. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -0
  13. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +2 -0
  14. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -0
  15. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +74 -0
  16. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy-dbg.js +61 -0
  17. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy-dbg.js.map +1 -0
  18. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.d.ts +13 -0
  19. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.d.ts.map +1 -0
  20. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.js +2 -0
  21. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.js.map +1 -0
  22. package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.ts +59 -0
  23. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js +50 -0
  24. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -0
  25. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.d.ts +12 -0
  26. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.d.ts.map +1 -0
  27. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js +2 -0
  28. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -0
  29. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +44 -0
  30. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +79 -13
  31. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +12 -0
  33. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  35. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +77 -15
  37. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +31 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +15 -0
  40. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  42. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +26 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +35 -0
  45. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +8 -0
  47. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  49. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +37 -0
  51. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +28 -6
  52. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +3 -2
  54. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  56. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +30 -6
  58. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +11 -32
  59. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
  60. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -1
  63. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +9 -13
  64. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +6 -2
  65. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +2 -0
  67. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  68. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +12 -7
  71. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +4 -0
  72. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  75. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +4 -0
  77. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js +3 -3
  78. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts +1 -1
  80. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.ts +3 -3
  84. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +4 -4
  85. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +2 -2
  87. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +10 -10
  91. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +1 -1
  92. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  93. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  94. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +1 -1
  100. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  101. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +19 -3
  102. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +22 -3
  104. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js.map +1 -1
  105. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts +3 -2
  106. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts.map +1 -1
  107. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.ts +3 -2
  108. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +18 -2
  109. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  110. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  111. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +19 -2
  114. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +63 -43
  117. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  118. package/src/nz/co/siliconst/ui5/metaui/library.d.ts +4 -0
  119. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  120. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  121. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  122. package/src/nz/co/siliconst/ui5/metaui/library.ts +6 -0
  123. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder-dbg.js +93 -0
  124. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder-dbg.js.map +1 -0
  125. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.d.ts +52 -0
  126. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.d.ts.map +1 -0
  127. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.js +2 -0
  128. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.js.map +1 -0
  129. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.ts +88 -0
  130. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +47 -0
  131. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -0
  132. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +25 -0
  133. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -0
  134. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +2 -0
  135. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -0
  136. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +43 -0
  137. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js +68 -0
  138. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -0
  139. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +21 -0
  140. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -0
  141. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js +2 -0
  142. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -0
  143. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +61 -0
  144. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper-dbg.js +45 -0
  145. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper-dbg.js.map +1 -0
  146. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.d.ts +25 -0
  147. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.d.ts.map +1 -0
  148. package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerTypeMapper.js → openapi/OpenApiTypeMapper.js} +2 -2
  149. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.js.map +1 -0
  150. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.ts +36 -0
  151. package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerUIMapper-dbg.js → openapi/OpenApiUIMapper-dbg.js} +23 -14
  152. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -0
  153. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +34 -0
  154. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -0
  155. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +2 -0
  156. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -0
  157. package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerUIMapper.ts → openapi/OpenApiUIMapper.ts} +22 -13
  158. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +50 -0
  159. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -0
  160. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.d.ts +25 -0
  161. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.d.ts.map +1 -0
  162. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js +2 -0
  163. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -0
  164. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +43 -0
  165. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin-dbg.js +2 -0
  166. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin-dbg.js.map +1 -0
  167. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.d.ts +23 -0
  168. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.d.ts.map +1 -0
  169. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.js +2 -0
  170. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.js.map +1 -0
  171. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.ts +21 -0
  172. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +117 -0
  173. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -0
  174. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +47 -0
  175. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -0
  176. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +2 -0
  177. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -0
  178. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +113 -0
  179. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin-dbg.js +2 -0
  180. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin-dbg.js.map +1 -0
  181. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.d.ts +26 -0
  182. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.d.ts.map +1 -0
  183. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.js +2 -0
  184. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.js.map +1 -0
  185. package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.ts +25 -0
  186. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +106 -0
  187. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -0
  188. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +27 -0
  189. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -0
  190. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +2 -0
  191. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -0
  192. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +104 -0
  193. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +107 -0
  194. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -0
  195. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +27 -0
  196. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -0
  197. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +2 -0
  198. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -0
  199. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +105 -0
  200. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +347 -0
  201. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -0
  202. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +110 -0
  203. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -0
  204. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +2 -0
  205. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -0
  206. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +377 -0
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +11 -0
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +13 -0
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +2 -2
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +2 -2
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +34 -27
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +17 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +36 -11
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +4 -4
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +4 -4
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +2 -2
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +1 -1
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +5 -8
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +5 -8
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +5 -8
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +5 -8
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +217 -0
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -0
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts +26 -0
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -0
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +2 -0
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -0
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +249 -0
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +4 -4
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +4 -4
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +4 -3
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +4 -3
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +3 -4
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +4 -5
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +2 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js +1 -1
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +2 -1
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +116 -49
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +17 -2
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +115 -54
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +4 -4
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +4 -4
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +37 -12
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +4 -4
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +40 -15
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +3 -2
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +3 -2
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +194 -0
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -0
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +25 -0
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -0
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +2 -0
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -0
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +192 -0
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +2 -2
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +2 -2
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +3 -2
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +3 -2
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +79 -0
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -0
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +35 -0
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -0
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +2 -0
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -0
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +80 -0
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -2
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +2 -2
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +4 -4
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +4 -4
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +2 -2
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +2 -2
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +5 -8
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +5 -8
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +3 -4
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +3 -4
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js +2 -2
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js +1 -1
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +2 -2
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js +2 -2
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js +1 -1
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +2 -2
  374. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor-dbg.js +146 -0
  375. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor-dbg.js.map +1 -0
  376. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.d.ts +27 -0
  377. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.d.ts.map +1 -0
  378. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.js +2 -0
  379. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.js.map +1 -0
  380. package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.ts +160 -0
  381. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js +0 -226
  382. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js.map +0 -1
  383. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts +0 -63
  384. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts.map +0 -1
  385. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js +0 -2
  386. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js.map +0 -1
  387. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.ts +0 -233
  388. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js +0 -43
  389. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js.map +0 -1
  390. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts +0 -15
  391. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts.map +0 -1
  392. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js +0 -2
  393. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js.map +0 -1
  394. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.ts +0 -37
  395. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js +0 -37
  396. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js.map +0 -1
  397. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts +0 -18
  398. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts.map +0 -1
  399. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js.map +0 -1
  400. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.ts +0 -28
  401. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js.map +0 -1
  402. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts +0 -27
  403. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts.map +0 -1
  404. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js +0 -2
  405. package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js.map +0 -1
@@ -37,6 +37,8 @@ export default class GeneratorHost extends Control {
37
37
  static readonly metadata = {
38
38
  properties: {
39
39
  schemaDefinition: { type: "any", defaultValue: null },
40
+ schemaDefinitions: { type: "object", defaultValue: {} },
41
+ schemaTarget: { type: "string", defaultValue: null },
40
42
  data: { type: "object", defaultValue: null, bindable: "bindable" },
41
43
  dataJson: { type: "string", defaultValue: null, bindable: "bindable" },
42
44
  liveUpdate: { type: "boolean", defaultValue: false },
@@ -146,6 +148,23 @@ export default class GeneratorHost extends Control {
146
148
  return this.stateManager;
147
149
  }
148
150
 
151
+ /**
152
+ * Resolves a reference pointer against the global schema definitions dictionary.
153
+ * @param refPath The string reference path (e.g., "#/definitions/User")
154
+ * @returns The resolved ISchema or undefined
155
+ */
156
+ public getSchemaDefinition(refPath: string): ISchema | undefined {
157
+ const defs = this.getProperty("schemaDefinitions") as Record<string, ISchema>;
158
+ if (!defs || !refPath) return undefined;
159
+ let key = refPath;
160
+ if (key.startsWith("#/definitions/")) {
161
+ key = key.substring(14);
162
+ } else if (key.startsWith("#/components/schemas/")) {
163
+ key = key.substring(21);
164
+ }
165
+ return defs[key];
166
+ }
167
+
149
168
  /**
150
169
  * Safely destroys the currently generated UI tree and cleans up references.
151
170
  * This is called before every regeneration to prevent memory leaks.
@@ -341,7 +360,7 @@ export default class GeneratorHost extends Control {
341
360
  return this;
342
361
  }
343
362
 
344
- if (propertyName === "editable" || propertyName === "debugMode" || propertyName === "schemaDefinition") {
363
+ if (propertyName === "editable" || propertyName === "debugMode" || propertyName === "schemaDefinition" || propertyName === "schemaTarget") {
345
364
  const currentVal = this.getProperty(propertyName);
346
365
  if (currentVal !== value) {
347
366
  super.setProperty(propertyName, value, suppressInvalidate);
@@ -479,6 +498,11 @@ export default class GeneratorHost extends Control {
479
498
  this.setBusy(false);
480
499
  }
481
500
 
501
+ // Inject defaults into empty payload values
502
+ if (normalizedSchema && finalData) {
503
+ this.dataSyncDelegate.injectSchemaDefaults(normalizedSchema, finalData);
504
+ }
505
+
482
506
  this.activeModelName = "metaUI_" + this.getId();
483
507
  this.stateManager = new StateManager(finalData, normalizedSchema, this.activeModelName);
484
508
  this.stateManager.setUseMessageManager(this.getProperty("useMessageManager") === true);
@@ -488,6 +512,7 @@ export default class GeneratorHost extends Control {
488
512
  const isEditable = this.getProperty("editable") !== false;
489
513
  const useMessageManager = this.getProperty("useMessageManager") === true;
490
514
  this.engine = new Engine(isEditable, useMessageManager);
515
+ this.engine.host = this;
491
516
  }
492
517
 
493
518
  this.generatedContent = this.engine.build(
@@ -96,6 +96,41 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/base/util/extend", "../../../util
96
96
  throw new Error(msg);
97
97
  }
98
98
  }
99
+
100
+ /**
101
+ * Recursively scans an ISchema for `default` properties and injects them into the rootData
102
+ * object if those properties are currently undefined.
103
+ *
104
+ * @param schema The MetaUI ISchema tree.
105
+ * @param rootData The data payload to mutate.
106
+ */
107
+ injectSchemaDefaults(schema, rootData, depth = 0) {
108
+ if (!schema || !rootData || typeof rootData !== "object" || depth > 8) return;
109
+ if (schema.type === "object" && schema.properties) {
110
+ for (const key of Object.keys(schema.properties)) {
111
+ const propSchema = schema.properties[key];
112
+ if (rootData[key] === undefined) {
113
+ if (propSchema.default !== undefined) {
114
+ rootData[key] = propSchema.default;
115
+ } else if (propSchema.type === "object") {
116
+ const tempObj = {};
117
+ this.injectSchemaDefaults(propSchema, tempObj, depth + 1);
118
+ if (Object.keys(tempObj).length > 0) {
119
+ rootData[key] = tempObj;
120
+ }
121
+ }
122
+ } else if (typeof rootData[key] === "object" && rootData[key] !== null) {
123
+ this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);
124
+ }
125
+ }
126
+ } else if (schema.type === "array" && schema.items && Array.isArray(rootData)) {
127
+ for (let i = 0; i < rootData.length; i++) {
128
+ if (typeof rootData[i] === "object" && rootData[i] !== null) {
129
+ this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);
130
+ }
131
+ }
132
+ }
133
+ }
99
134
  }
100
135
  var __exports = {
101
136
  __esModule: true
@@ -1 +1 @@
1
- {"version":3,"file":"DataSyncDelegate-dbg.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DataSyncDelegate-dbg.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","injectSchemaDefaults","schema","rootData","depth","type","properties","key","Object","keys","propSchema","undefined","default","tempObj","length","items","Array","isArray","i","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively scans an ISchema for `default` properties and injects them into the rootData \n * object if those properties are currently undefined.\n * \n * @param schema The MetaUI ISchema tree.\n * @param rootData The data payload to mutate.\n */\n public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {\n if (!schema || !rootData || typeof rootData !== \"object\" || depth > 8) return;\n\n if (schema.type === \"object\" && schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n \n if (rootData[key] === undefined) {\n if (propSchema.default !== undefined) {\n rootData[key] = propSchema.default;\n } else if (propSchema.type === \"object\") {\n const tempObj = {};\n this.injectSchemaDefaults(propSchema, tempObj, depth + 1);\n if (Object.keys(tempObj).length > 0) {\n rootData[key] = tempObj;\n }\n }\n } else if (typeof rootData[key] === \"object\" && rootData[key] !== null) {\n this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);\n }\n }\n } else if (schema.type === \"array\" && schema.items && Array.isArray(rootData)) {\n for (let i = 0; i < rootData.length; i++) {\n if (typeof rootData[i] === \"object\" && rootData[i] !== null) {\n this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -31,6 +31,14 @@ declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDeleg
31
31
  * Intercepts and parses live updates to the data payload from two-way Fiori bindings.
32
32
  */
33
33
  handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void;
34
+ /**
35
+ * Recursively scans an ISchema for `default` properties and injects them into the rootData
36
+ * object if those properties are currently undefined.
37
+ *
38
+ * @param schema The MetaUI ISchema tree.
39
+ * @param rootData The data payload to mutate.
40
+ */
41
+ injectSchemaDefaults(schema: unknown, rootData: unknown, depth?: number): void;
34
42
  }
35
43
  }
36
44
  //# sourceMappingURL=DataSyncDelegate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataSyncDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qEAAqE,CAAC;IAMrF,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;IAE5E,UAAiB,aAAa;QAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAClF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,UAAU,IAAI,IAAI,CAAC;QACnB,eAAe,IAAI,YAAY,GAAG,IAAI,CAAC;QACvC,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACnD,uBAAuB,IAAI,IAAI,CAAC;KACnC;IAED;;OAEG;IACH,MAAa,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAgB;QAC5B,OAAO,CAAC,sBAAsB,CAAuB;QACrD,OAAO,CAAC,qBAAqB,CAAwC;QACrE,OAAO,CAAC,qBAAqB,CAAwC;QAErE;;;WAGG;oBACS,IAAI,EAAE,aAAa;QAI/B;;WAEG;QACI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QAW7D;;WAEG;QACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;KAoE1G;CAEA"}
1
+ {"version":3,"file":"DataSyncDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qEAAqE,CAAC;IAMrF,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;IAE5E,UAAiB,aAAa;QAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAClF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,UAAU,IAAI,IAAI,CAAC;QACnB,eAAe,IAAI,YAAY,GAAG,IAAI,CAAC;QACvC,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACnD,uBAAuB,IAAI,IAAI,CAAC;KACnC;IAED;;OAEG;IACH,MAAa,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAgB;QAC5B,OAAO,CAAC,sBAAsB,CAAuB;QACrD,OAAO,CAAC,qBAAqB,CAAwC;QACrE,OAAO,CAAC,qBAAqB,CAAwC;QAErE;;;WAGG;oBACS,IAAI,EAAE,aAAa;QAI/B;;WAEG;QACI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QAW7D;;WAEG;QACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;QAqEvG;;;;;;WAMG;QACI,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;KA6B3F;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["sap/base/util/deepEqual","sap/base/util/extend","../../../utils/Logger","../../../core/SchemaNormalizer"],function(t,e,s,a){"use strict";const o=s["Logger"];const r=a["SchemaNormalizer"];class i{_lastPushedPayloadJson=null;_lastPushedPayloadObj=null;_lastReceivedInputObj=null;constructor(t){this.host=t}pushToBindings(e){const s=JSON.stringify(e,null,2);this._lastPushedPayloadJson=s;this._lastPushedPayloadObj=t({},e)?null:JSON.parse(JSON.stringify(e));this.host.setProperty("data",e,true);this.host.setProperty("dataJson",s,true)}handleInputDataHotSwap(s,a,i){let h=null;if(typeof a==="string"){try{h=JSON.parse(a)}catch(t){this.host.setBaseProperty(s,a,true);return}}else{h=a}if(h===null){this.host.setBaseProperty(s,a,true);return}if(this._lastReceivedInputObj&&t(h,this._lastReceivedInputObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped stale data injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}if(this._lastPushedPayloadObj&&t(h,this._lastPushedPayloadObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped echo for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}this._lastReceivedInputObj=e(true,{},h);if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Accepted external injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,true);const n=this.host.getStateManager();if(!n){this.host.invalidate();return}try{n.getModel().setData(h,false);if(!this.host.getProperty("schemaDefinition")&&typeof this.host.getParsedSchema==="function"){const e=r.inferSchemaFromData(h);const s=this.host.getParsedSchema();if(!t(e,s)){this.host.tearDownGeneratedLayout();this.host.invalidate()}}}catch(t){const e=`Failed to hot-swap ${s}: `+t.message;o.error("[MetaUI]",e,"DataSyncDelegate");throw new Error(e)}}}var h={__esModule:true};h.DataSyncDelegate=i;return h});
1
+ sap.ui.define(["sap/base/util/deepEqual","sap/base/util/extend","../../../utils/Logger","../../../core/SchemaNormalizer"],function(e,t,s,a){"use strict";const o=s["Logger"];const r=a["SchemaNormalizer"];class i{_lastPushedPayloadJson=null;_lastPushedPayloadObj=null;_lastReceivedInputObj=null;constructor(e){this.host=e}pushToBindings(t){const s=JSON.stringify(t,null,2);this._lastPushedPayloadJson=s;this._lastPushedPayloadObj=e({},t)?null:JSON.parse(JSON.stringify(t));this.host.setProperty("data",t,true);this.host.setProperty("dataJson",s,true)}handleInputDataHotSwap(s,a,i){let n=null;if(typeof a==="string"){try{n=JSON.parse(a)}catch(e){this.host.setBaseProperty(s,a,true);return}}else{n=a}if(n===null){this.host.setBaseProperty(s,a,true);return}if(this._lastReceivedInputObj&&e(n,this._lastReceivedInputObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped stale data injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}if(this._lastPushedPayloadObj&&e(n,this._lastPushedPayloadObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped echo for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}this._lastReceivedInputObj=t(true,{},n);if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Accepted external injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,true);const h=this.host.getStateManager();if(!h){this.host.invalidate();return}try{h.getModel().setData(n,false);if(!this.host.getProperty("schemaDefinition")&&typeof this.host.getParsedSchema==="function"){const t=r.inferSchemaFromData(n);const s=this.host.getParsedSchema();if(!e(t,s)){this.host.tearDownGeneratedLayout();this.host.invalidate()}}}catch(e){const t=`Failed to hot-swap ${s}: `+e.message;o.error("[MetaUI]",t,"DataSyncDelegate");throw new Error(t)}}injectSchemaDefaults(e,t,s=0){if(!e||!t||typeof t!=="object"||s>8)return;if(e.type==="object"&&e.properties){for(const a of Object.keys(e.properties)){const o=e.properties[a];if(t[a]===undefined){if(o.default!==undefined){t[a]=o.default}else if(o.type==="object"){const e={};this.injectSchemaDefaults(o,e,s+1);if(Object.keys(e).length>0){t[a]=e}}}else if(typeof t[a]==="object"&&t[a]!==null){this.injectSchemaDefaults(o,t[a],s+1)}}}else if(e.type==="array"&&e.items&&Array.isArray(t)){for(let a=0;a<t.length;a++){if(typeof t[a]==="object"&&t[a]!==null){this.injectSchemaDefaults(e.items,t[a],s+1)}}}}}var n={__esModule:true};n.DataSyncDelegate=i;return n});
2
2
  //# sourceMappingURL=DataSyncDelegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataSyncDelegate.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","this","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n}\n"],"mappings":"+JAESA,EAAMC,EAAA,gBACNC,EAAgBC,EAAA,oBAkBlB,MAAMC,EAEDC,uBAAwC,KACxCC,sBAAwD,KACxDC,sBAAwD,KAMhEC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAKOE,eAAeC,GAClB,MAAMC,EAAaC,KAAKC,UAAUH,EAAS,KAAM,GAGjDF,KAAKL,uBAAyBQ,EAC9BH,KAAKJ,sBAAwBU,EAAU,CAAC,EAAGJ,GAAW,KAAOE,KAAKG,MAAMH,KAAKC,UAAUH,IAEvFF,KAAKD,KAAKS,YAAY,OAAQN,EAAS,MACvCF,KAAKD,KAAKS,YAAY,WAAYL,EAAY,KAClD,CAKOM,uBAAuBC,EAAsBC,EAAgBC,GAChE,IAAIC,EAA8C,KAElD,UAAWF,IAAU,SAAU,CAC3B,IACIE,EAAcT,KAAKG,MAAMI,EAC7B,CAAE,MAAOG,GACLd,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CACJ,KAAO,CACHE,EAAcF,CAClB,CAEA,GAAIE,IAAgB,KAAM,CACtBb,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CAGA,GAAIX,KAAKH,uBAAyBS,EAAUO,EAAab,KAAKH,uBAAwB,CAClF,GAAIG,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oCAAoCP,IAAgB,mBACjF,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAGA,GAAIZ,KAAKJ,uBAAyBU,EAAUO,EAAab,KAAKJ,uBAAwB,CAClF,GAAII,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oBAAoBP,IAAgB,mBACjE,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAEAZ,KAAKH,sBAAwBqB,EAAO,KAAM,CAAC,EAAGL,GAE9C,GAAIb,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,mCAAmCP,IAAgB,mBAChF,CAEAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAE/C,MAAMQ,EAAenB,KAAKD,KAAKqB,kBAC/B,IAAKD,EAAc,CACfnB,KAAKD,KAAKsB,aACV,MACJ,CAEA,IACIF,EAAaG,WAAWC,QAAQV,EAAa,OAE7C,IAAKb,KAAKD,KAAKiB,YAAY,4BAA8BhB,KAAKD,KAAKyB,kBAAoB,WAAY,CAC/F,MAAMC,EAAoBjC,EAAiBkC,oBAAoBb,GAC/D,MAAMc,EAAe3B,KAAKD,KAAKyB,kBAC/B,IAAKlB,EAAUmB,EAAmBE,GAAe,CAC7C3B,KAAKD,KAAK6B,0BACV5B,KAAKD,KAAKsB,YACd,CACJ,CACJ,CAAE,MAAOP,GACL,MAAMe,EAAM,sBAAsBnB,MAAoBI,EAAYgB,QAClExC,EAAOyC,MAAM,WAAYF,EAAK,oBAC9B,MAAM,IAAIG,MAAMH,EACpB,CACJ,EACH,IAAAI,EAAA,CAAAC,WAAA,MAAAD,EAAAvC,mBAAA,OAAAuC,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DataSyncDelegate.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","this","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","injectSchemaDefaults","schema","rootData","depth","type","properties","key","Object","keys","propSchema","undefined","default","tempObj","length","items","Array","isArray","i","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively scans an ISchema for `default` properties and injects them into the rootData \n * object if those properties are currently undefined.\n * \n * @param schema The MetaUI ISchema tree.\n * @param rootData The data payload to mutate.\n */\n public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {\n if (!schema || !rootData || typeof rootData !== \"object\" || depth > 8) return;\n\n if (schema.type === \"object\" && schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n \n if (rootData[key] === undefined) {\n if (propSchema.default !== undefined) {\n rootData[key] = propSchema.default;\n } else if (propSchema.type === \"object\") {\n const tempObj = {};\n this.injectSchemaDefaults(propSchema, tempObj, depth + 1);\n if (Object.keys(tempObj).length > 0) {\n rootData[key] = tempObj;\n }\n }\n } else if (typeof rootData[key] === \"object\" && rootData[key] !== null) {\n this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);\n }\n }\n } else if (schema.type === \"array\" && schema.items && Array.isArray(rootData)) {\n for (let i = 0; i < rootData.length; i++) {\n if (typeof rootData[i] === \"object\" && rootData[i] !== null) {\n this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);\n }\n }\n }\n }\n}\n"],"mappings":"+JAESA,EAAMC,EAAA,gBACNC,EAAgBC,EAAA,oBAkBlB,MAAMC,EAEDC,uBAAwC,KACxCC,sBAAwD,KACxDC,sBAAwD,KAMhEC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAKOE,eAAeC,GAClB,MAAMC,EAAaC,KAAKC,UAAUH,EAAS,KAAM,GAGjDF,KAAKL,uBAAyBQ,EAC9BH,KAAKJ,sBAAwBU,EAAU,CAAC,EAAGJ,GAAW,KAAOE,KAAKG,MAAMH,KAAKC,UAAUH,IAEvFF,KAAKD,KAAKS,YAAY,OAAQN,EAAS,MACvCF,KAAKD,KAAKS,YAAY,WAAYL,EAAY,KAClD,CAKOM,uBAAuBC,EAAsBC,EAAgBC,GAChE,IAAIC,EAA8C,KAElD,UAAWF,IAAU,SAAU,CAC3B,IACIE,EAAcT,KAAKG,MAAMI,EAC7B,CAAE,MAAOG,GACLd,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CACJ,KAAO,CACHE,EAAcF,CAClB,CAEA,GAAIE,IAAgB,KAAM,CACtBb,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CAGA,GAAIX,KAAKH,uBAAyBS,EAAUO,EAAab,KAAKH,uBAAwB,CAClF,GAAIG,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oCAAoCP,IAAgB,mBACjF,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAGA,GAAIZ,KAAKJ,uBAAyBU,EAAUO,EAAab,KAAKJ,uBAAwB,CAClF,GAAII,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oBAAoBP,IAAgB,mBACjE,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAEAZ,KAAKH,sBAAwBqB,EAAO,KAAM,CAAC,EAAGL,GAE9C,GAAIb,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,mCAAmCP,IAAgB,mBAChF,CAEAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAE/C,MAAMQ,EAAenB,KAAKD,KAAKqB,kBAC/B,IAAKD,EAAc,CACfnB,KAAKD,KAAKsB,aACV,MACJ,CAEA,IACIF,EAAaG,WAAWC,QAAQV,EAAa,OAE7C,IAAKb,KAAKD,KAAKiB,YAAY,4BAA8BhB,KAAKD,KAAKyB,kBAAoB,WAAY,CAC/F,MAAMC,EAAoBjC,EAAiBkC,oBAAoBb,GAC/D,MAAMc,EAAe3B,KAAKD,KAAKyB,kBAC/B,IAAKlB,EAAUmB,EAAmBE,GAAe,CAC7C3B,KAAKD,KAAK6B,0BACV5B,KAAKD,KAAKsB,YACd,CACJ,CACJ,CAAE,MAAOP,GACL,MAAMe,EAAM,sBAAsBnB,MAAoBI,EAAYgB,QAClExC,EAAOyC,MAAM,WAAYF,EAAK,oBAC9B,MAAM,IAAIG,MAAMH,EACpB,CACJ,CASOI,qBAAqBC,EAAiBC,EAAmBC,EAAgB,GAC5E,IAAKF,IAAWC,UAAmBA,IAAa,UAAYC,EAAQ,EAAG,OAEvE,GAAIF,EAAOG,OAAS,UAAYH,EAAOI,WAAY,CAC/C,IAAK,MAAMC,KAAOC,OAAOC,KAAKP,EAAOI,YAAa,CAC9C,MAAMI,EAAaR,EAAOI,WAAWC,GAErC,GAAIJ,EAASI,KAASI,UAAW,CAC7B,GAAID,EAAWE,UAAYD,UAAW,CAClCR,EAASI,GAAOG,EAAWE,OAC/B,MAAO,GAAIF,EAAWL,OAAS,SAAU,CACrC,MAAMQ,EAAU,CAAC,EACjB7C,KAAKiC,qBAAqBS,EAAYG,EAAST,EAAQ,GACvD,GAAII,OAAOC,KAAKI,GAASC,OAAS,EAAG,CACjCX,EAASI,GAAOM,CACpB,CACJ,CACJ,MAAO,UAAWV,EAASI,KAAS,UAAYJ,EAASI,KAAS,KAAM,CACpEvC,KAAKiC,qBAAqBS,EAAYP,EAASI,GAAMH,EAAQ,EACjE,CACJ,CACJ,MAAO,GAAIF,EAAOG,OAAS,SAAWH,EAAOa,OAASC,MAAMC,QAAQd,GAAW,CAC3E,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAASW,OAAQI,IAAK,CACtC,UAAWf,EAASe,KAAO,UAAYf,EAASe,KAAO,KAAM,CACzDlD,KAAKiC,qBAAqBC,EAAOa,MAAOZ,EAASe,GAAId,EAAQ,EACjE,CACJ,CACJ,CACJ,EACH,IAAAe,EAAA,CAAAC,WAAA,MAAAD,EAAAzD,mBAAA,OAAAyD,CAAA","ignoreList":[]}
@@ -118,4 +118,41 @@ export class DataSyncDelegate {
118
118
  throw new Error(msg);
119
119
  }
120
120
  }
121
+
122
+ /**
123
+ * Recursively scans an ISchema for `default` properties and injects them into the rootData
124
+ * object if those properties are currently undefined.
125
+ *
126
+ * @param schema The MetaUI ISchema tree.
127
+ * @param rootData The data payload to mutate.
128
+ */
129
+ public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {
130
+ if (!schema || !rootData || typeof rootData !== "object" || depth > 8) return;
131
+
132
+ if (schema.type === "object" && schema.properties) {
133
+ for (const key of Object.keys(schema.properties)) {
134
+ const propSchema = schema.properties[key];
135
+
136
+ if (rootData[key] === undefined) {
137
+ if (propSchema.default !== undefined) {
138
+ rootData[key] = propSchema.default;
139
+ } else if (propSchema.type === "object") {
140
+ const tempObj = {};
141
+ this.injectSchemaDefaults(propSchema, tempObj, depth + 1);
142
+ if (Object.keys(tempObj).length > 0) {
143
+ rootData[key] = tempObj;
144
+ }
145
+ }
146
+ } else if (typeof rootData[key] === "object" && rootData[key] !== null) {
147
+ this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);
148
+ }
149
+ }
150
+ } else if (schema.type === "array" && schema.items && Array.isArray(rootData)) {
151
+ for (let i = 0; i < rootData.length; i++) {
152
+ if (typeof rootData[i] === "object" && rootData[i] !== null) {
153
+ this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);
154
+ }
155
+ }
156
+ }
157
+ }
121
158
  }
@@ -1,4 +1,4 @@
1
- sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], function (Dialog, Button, _____utils_Logger) {
1
+ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "sap/m/BusyDialog", "../../../utils/Logger"], function (Dialog, Button, BusyDialog, _____utils_Logger) {
2
2
  "use strict";
3
3
 
4
4
  const Logger = _____utils_Logger["Logger"];
@@ -8,6 +8,7 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
8
8
  class DialogDelegate {
9
9
  activeDialog = null;
10
10
  requestedWidth = "auto";
11
+ calculatedOptimalWidth = "auto";
11
12
 
12
13
  /**
13
14
  * Initializes a new DialogDelegate to handle dialog-based rendering.
@@ -21,14 +22,33 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
21
22
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
22
23
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
23
24
  */
24
- openInDialog(title = "Form", submitButtonText = "OK", isGenerated, cancelButtonText = "Cancel", dialogWidth = "auto", parentView) {
25
- // UI5 PURITY: Do not manually force generate() here.
26
- // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.
27
-
25
+ async openInDialog(title = "Form", submitButtonText = "OK", isGenerated, cancelButtonText = "Cancel", dialogWidth = "auto", parentView) {
28
26
  this.requestedWidth = dialogWidth;
27
+ this.calculatedOptimalWidth = dialogWidth; // Default fallback
28
+
29
+ // Mask the complex asynchronous rendering to prevent visual snapping
30
+ const busyDialog = new BusyDialog({
31
+ text: "Building Form..."
32
+ });
33
+ busyDialog.open();
34
+ try {
35
+ // Force manual generation BEFORE mounting the dialog so the optimal width is perfectly calculated first
36
+ const genResult = this.host.generate();
37
+ if (genResult instanceof Promise) {
38
+ await genResult;
39
+ }
40
+ } catch (err) {
41
+ busyDialog.close();
42
+ Logger.error("[MetaUI] Catastrophic error during pre-generation of dialog content", err.message, "DialogDelegate");
43
+ return;
44
+ }
45
+ busyDialog.close();
46
+
47
+ // The Engine heuristically updated `calculatedOptimalWidth` during `generate()`. Apply it on frame 1.
48
+ const finalWidth = this.requestedWidth === "auto" && this.calculatedOptimalWidth !== "auto" ? this.calculatedOptimalWidth : this.requestedWidth;
29
49
  const dialog = new Dialog({
30
50
  title: title,
31
- contentWidth: dialogWidth,
51
+ contentWidth: finalWidth,
32
52
  content: [this.host],
33
53
  // Mount host inside the dialog
34
54
  beginButton: new Button({
@@ -72,6 +92,8 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
72
92
  * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.
73
93
  */
74
94
  updateDialogWidthDynamically(optimalWidth) {
95
+ this.calculatedOptimalWidth = optimalWidth;
96
+ // Only dynamically stretch if the dialog is ALREADY open (e.g., hybrid inference late-loading)
75
97
  if (this.activeDialog && this.requestedWidth === "auto" && optimalWidth !== "auto") {
76
98
  this.activeDialog.setContentWidth(optimalWidth);
77
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DialogDelegate-dbg.js","names":["Logger","_____utils_Logger","DialogDelegate","activeDialog","requestedWidth","constructor","host","openInDialog","title","submitButtonText","isGenerated","cancelButtonText","dialogWidth","parentView","dialog","Dialog","contentWidth","content","beginButton","Button","text","type","press","success","triggerSubmit","close","err","error","message","fireEvent","fieldPath","endButton","afterClose","destroy","addDependent","open","updateDialogWidthDynamically","optimalWidth","setContentWidth","__exports","__esModule"],"sources":["DialogDelegate.ts"],"sourcesContent":["import Dialog from \"sap/m/Dialog\";\nimport Button from \"sap/m/Button\";\nimport Control from \"sap/ui/core/Control\";\nimport { Logger } from \"../../../utils/Logger\";\n\nexport interface IHostDialog {\n generate(): void;\n triggerSubmit(): boolean;\n fireEvent(eventName: string, parameters?: Record<string, unknown>): this;\n}\n\n/**\n * Extracts all popup and dialog generation logic from the Host control.\n */\nexport class DialogDelegate {\n private host: IHostDialog & Control;\n private activeDialog: Dialog | null = null;\n private requestedWidth: string = \"auto\";\n\n /**\n * Initializes a new DialogDelegate to handle dialog-based rendering.\n * @param host The parent DynamicHost or GeneratorHost control.\n */\n constructor(host: IHostDialog & Control) {\n this.host = host;\n }\n\n /**\n * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.\n * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.\n */\n public openInDialog(title: string = \"Form\", submitButtonText: string = \"OK\", isGenerated: boolean, cancelButtonText: string = \"Cancel\", dialogWidth: string = \"auto\", parentView?: Control): void {\n // UI5 PURITY: Do not manually force generate() here.\n // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.\n\n this.requestedWidth = dialogWidth;\n const dialog = new Dialog({\n title: title,\n contentWidth: dialogWidth,\n content: [this.host], // Mount host inside the dialog\n beginButton: new Button({\n text: submitButtonText,\n type: \"Emphasized\",\n press: () => {\n try {\n const success = this.host.triggerSubmit();\n if (success) {\n dialog.close();\n }\n } catch (err) {\n Logger.error(\"[MetaUI] Catastrophic error during validation/submit pipeline\", (err as Error).message, \"DialogDelegate\");\n this.host.fireEvent(\"validationError\", { fieldPath: \"root\", message: (err as Error).message });\n }\n }\n }),\n endButton: new Button({\n text: cancelButtonText,\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n this.activeDialog = null;\n dialog.destroy();\n }\n });\n\n this.activeDialog = dialog;\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n\n /**\n * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.\n */\n public updateDialogWidthDynamically(optimalWidth: string): void {\n if (this.activeDialog && this.requestedWidth === \"auto\" && optimalWidth !== \"auto\") {\n this.activeDialog.setContentWidth(optimalWidth);\n }\n }\n}\n"],"mappings":";;;QAGSA,MAAM,GAAAC,iBAAA;EAQf;AACA;AACA;EACO,MAAMC,cAAc,CAAC;IAEhBC,YAAY,GAAkB,IAAI;IAClCC,cAAc,GAAW,MAAM;;IAEvC;AACJ;AACA;AACA;IACIC,WAAWA,CAACC,IAA2B,EAAE;MACrC,IAAI,CAACA,IAAI,GAAGA,IAAI;IACpB;;IAEA;AACJ;AACA;AACA;IACWC,YAAYA,CAACC,KAAa,GAAG,MAAM,EAAEC,gBAAwB,GAAG,IAAI,EAAEC,WAAoB,EAAEC,gBAAwB,GAAG,QAAQ,EAAEC,WAAmB,GAAG,MAAM,EAAEC,UAAoB,EAAQ;MAC9L;MACA;;MAEA,IAAI,CAACT,cAAc,GAAGQ,WAAW;MACjC,MAAME,MAAM,GAAG,IAAIC,MAAM,CAAC;QACtBP,KAAK,EAAEA,KAAK;QACZQ,YAAY,EAAEJ,WAAW;QACzBK,OAAO,EAAE,CAAC,IAAI,CAACX,IAAI,CAAC;QAAE;QACtBY,WAAW,EAAE,IAAIC,MAAM,CAAC;UACpBC,IAAI,EAAEX,gBAAgB;UACtBY,IAAI,EAAE,YAAY;UAClBC,KAAK,EAAEA,CAAA,KAAM;YACT,IAAI;cACA,MAAMC,OAAO,GAAG,IAAI,CAACjB,IAAI,CAACkB,aAAa,CAAC,CAAC;cACzC,IAAID,OAAO,EAAE;gBACTT,MAAM,CAACW,KAAK,CAAC,CAAC;cAClB;YACJ,CAAC,CAAC,OAAOC,GAAG,EAAE;cACV1B,MAAM,CAAC2B,KAAK,CAAC,+DAA+D,EAAGD,GAAG,CAAWE,OAAO,EAAE,gBAAgB,CAAC;cACvH,IAAI,CAACtB,IAAI,CAACuB,SAAS,CAAC,iBAAiB,EAAE;gBAAEC,SAAS,EAAE,MAAM;gBAAEF,OAAO,EAAGF,GAAG,CAAWE;cAAQ,CAAC,CAAC;YAClG;UACJ;QACJ,CAAC,CAAC;QACFG,SAAS,EAAE,IAAIZ,MAAM,CAAC;UAClBC,IAAI,EAAET,gBAAgB;UACtBW,KAAK,EAAEA,CAAA,KAAM;YACT,IAAI,CAAChB,IAAI,CAACuB,SAAS,CAAC,QAAQ,CAAC;YAC7Bf,MAAM,CAACW,KAAK,CAAC,CAAC;UAClB;QACJ,CAAC,CAAC;QACFO,UAAU,EAAEA,CAAA,KAAM;UACd,IAAI,CAAC7B,YAAY,GAAG,IAAI;UACxBW,MAAM,CAACmB,OAAO,CAAC,CAAC;QACpB;MACJ,CAAC,CAAC;MAEF,IAAI,CAAC9B,YAAY,GAAGW,MAAM;MAE1B,IAAID,UAAU,IAAI,OAAOA,UAAU,CAACqB,YAAY,KAAK,UAAU,EAAE;QAC7DrB,UAAU,CAACqB,YAAY,CAACpB,MAAM,CAAC;MACnC;MAEAA,MAAM,CAACqB,IAAI,CAAC,CAAC;IACjB;;IAEA;AACJ;AACA;IACWC,4BAA4BA,CAACC,YAAoB,EAAQ;MAC5D,IAAI,IAAI,CAAClC,YAAY,IAAI,IAAI,CAACC,cAAc,KAAK,MAAM,IAAIiC,YAAY,KAAK,MAAM,EAAE;QAChF,IAAI,CAAClC,YAAY,CAACmC,eAAe,CAACD,YAAY,CAAC;MACnD;IACJ;EACJ;EAAC,IAAAE,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAArC,cAAA,GAAAA,cAAA;EAAA,OAAAqC,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"DialogDelegate-dbg.js","names":["Logger","_____utils_Logger","DialogDelegate","activeDialog","requestedWidth","calculatedOptimalWidth","constructor","host","openInDialog","title","submitButtonText","isGenerated","cancelButtonText","dialogWidth","parentView","busyDialog","BusyDialog","text","open","genResult","generate","Promise","err","close","error","message","finalWidth","dialog","Dialog","contentWidth","content","beginButton","Button","type","press","success","triggerSubmit","fireEvent","fieldPath","endButton","afterClose","destroy","addDependent","updateDialogWidthDynamically","optimalWidth","setContentWidth","__exports","__esModule"],"sources":["DialogDelegate.ts"],"sourcesContent":["import Dialog from \"sap/m/Dialog\";\nimport Button from \"sap/m/Button\";\nimport Control from \"sap/ui/core/Control\";\nimport BusyDialog from \"sap/m/BusyDialog\";\nimport { Logger } from \"../../../utils/Logger\";\n\nexport interface IHostDialog {\n generate(): Promise<void> | void;\n triggerSubmit(): boolean;\n fireEvent(eventName: string, parameters?: Record<string, unknown>): this;\n}\n\n/**\n * Extracts all popup and dialog generation logic from the Host control.\n */\nexport class DialogDelegate {\n private host: IHostDialog & Control;\n private activeDialog: Dialog | null = null;\n private requestedWidth: string = \"auto\";\n private calculatedOptimalWidth: string = \"auto\";\n\n /**\n * Initializes a new DialogDelegate to handle dialog-based rendering.\n * @param host The parent DynamicHost or GeneratorHost control.\n */\n constructor(host: IHostDialog & Control) {\n this.host = host;\n }\n\n /**\n * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.\n * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.\n */\n public async openInDialog(title: string = \"Form\", submitButtonText: string = \"OK\", isGenerated: boolean, cancelButtonText: string = \"Cancel\", dialogWidth: string = \"auto\", parentView?: Control): Promise<void> {\n this.requestedWidth = dialogWidth;\n this.calculatedOptimalWidth = dialogWidth; // Default fallback\n\n // Mask the complex asynchronous rendering to prevent visual snapping\n const busyDialog = new BusyDialog({ text: \"Building Form...\" });\n busyDialog.open();\n\n try {\n // Force manual generation BEFORE mounting the dialog so the optimal width is perfectly calculated first\n const genResult = this.host.generate();\n if (genResult instanceof Promise) {\n await genResult;\n }\n } catch (err) {\n busyDialog.close();\n Logger.error(\"[MetaUI] Catastrophic error during pre-generation of dialog content\", (err as Error).message, \"DialogDelegate\");\n return;\n }\n\n busyDialog.close();\n\n // The Engine heuristically updated `calculatedOptimalWidth` during `generate()`. Apply it on frame 1.\n const finalWidth = this.requestedWidth === \"auto\" && this.calculatedOptimalWidth !== \"auto\" ? this.calculatedOptimalWidth : this.requestedWidth;\n\n const dialog = new Dialog({\n title: title,\n contentWidth: finalWidth,\n content: [this.host], // Mount host inside the dialog\n beginButton: new Button({\n text: submitButtonText,\n type: \"Emphasized\",\n press: () => {\n try {\n const success = this.host.triggerSubmit();\n if (success) {\n dialog.close();\n }\n } catch (err) {\n Logger.error(\"[MetaUI] Catastrophic error during validation/submit pipeline\", (err as Error).message, \"DialogDelegate\");\n this.host.fireEvent(\"validationError\", { fieldPath: \"root\", message: (err as Error).message });\n }\n }\n }),\n endButton: new Button({\n text: cancelButtonText,\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n this.activeDialog = null;\n dialog.destroy();\n }\n });\n\n this.activeDialog = dialog;\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n\n /**\n * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.\n */\n public updateDialogWidthDynamically(optimalWidth: string): void {\n this.calculatedOptimalWidth = optimalWidth;\n // Only dynamically stretch if the dialog is ALREADY open (e.g., hybrid inference late-loading)\n if (this.activeDialog && this.requestedWidth === \"auto\" && optimalWidth !== \"auto\") {\n this.activeDialog.setContentWidth(optimalWidth);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate" {
2
2
  import Control from "sap/ui/core/Control";
3
3
  export interface IHostDialog {
4
- generate(): void;
4
+ generate(): Promise<void> | void;
5
5
  triggerSubmit(): boolean;
6
6
  fireEvent(eventName: string, parameters?: Record<string, unknown>): this;
7
7
  }
@@ -12,6 +12,7 @@ declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegat
12
12
  private host;
13
13
  private activeDialog;
14
14
  private requestedWidth;
15
+ private calculatedOptimalWidth;
15
16
  /**
16
17
  * Initializes a new DialogDelegate to handle dialog-based rendering.
17
18
  * @param host The parent DynamicHost or GeneratorHost control.
@@ -21,7 +22,7 @@ declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegat
21
22
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
22
23
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
23
24
  */
24
- openInDialog(title: string, submitButtonText: string, isGenerated: boolean, cancelButtonText?: string, dialogWidth?: string, parentView?: Control): void;
25
+ openInDialog(title: string, submitButtonText: string, isGenerated: boolean, cancelButtonText?: string, dialogWidth?: string, parentView?: Control): Promise<void>;
25
26
  /**
26
27
  * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.
27
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DialogDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mEAAmE,CAAC;IAGnF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C,UAAiB,WAAW;QACxB,QAAQ,IAAI,IAAI,CAAC;QACjB,aAAa,IAAI,OAAO,CAAC;QACzB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5E;IAED;;OAEG;IACH,MAAa,cAAc;QACvB,OAAO,CAAC,IAAI,CAAwB;QACpC,OAAO,CAAC,YAAY,CAAuB;QAC3C,OAAO,CAAC,cAAc,CAAkB;QAExC;;;WAGG;oBACS,IAAI,EAAE,WAAW,GAAG,OAAO;QAIvC;;;WAGG;QACI,YAAY,CAAC,KAAK,EAAE,MAAe,EAAE,gBAAgB,EAAE,MAAa,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAE,MAAiB,EAAE,WAAW,GAAE,MAAe,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;QA8CjM;;WAEG;QACI,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;KAKlE;CAEA"}
1
+ {"version":3,"file":"DialogDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mEAAmE,CAAC;IAGnF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAI1C,UAAiB,WAAW;QACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACjC,aAAa,IAAI,OAAO,CAAC;QACzB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5E;IAED;;OAEG;IACH,MAAa,cAAc;QACvB,OAAO,CAAC,IAAI,CAAwB;QACpC,OAAO,CAAC,YAAY,CAAuB;QAC3C,OAAO,CAAC,cAAc,CAAkB;QACxC,OAAO,CAAC,sBAAsB,CAAkB;QAEhD;;;WAGG;oBACS,IAAI,EAAE,WAAW,GAAG,OAAO;QAIvC;;;WAGG;QACU,YAAY,CAAC,KAAK,EAAE,MAAe,EAAE,gBAAgB,EAAE,MAAa,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAE,MAAiB,EAAE,WAAW,GAAE,MAAe,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAkEhN;;WAEG;QACI,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;KAOlE;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["sap/m/Dialog","sap/m/Button","../../../utils/Logger"],function(t,e,i){"use strict";const o=i["Logger"];class s{activeDialog=null;requestedWidth="auto";constructor(t){this.host=t}openInDialog(i="Form",s="OK",a,n="Cancel",r="auto",l){this.requestedWidth=r;const h=new t({title:i,contentWidth:r,content:[this.host],beginButton:new e({text:s,type:"Emphasized",press:()=>{try{const t=this.host.triggerSubmit();if(t){h.close()}}catch(t){o.error("[MetaUI] Catastrophic error during validation/submit pipeline",t.message,"DialogDelegate");this.host.fireEvent("validationError",{fieldPath:"root",message:t.message})}}}),endButton:new e({text:n,press:()=>{this.host.fireEvent("cancel");h.close()}}),afterClose:()=>{this.activeDialog=null;h.destroy()}});this.activeDialog=h;if(l&&typeof l.addDependent==="function"){l.addDependent(h)}h.open()}updateDialogWidthDynamically(t){if(this.activeDialog&&this.requestedWidth==="auto"&&t!=="auto"){this.activeDialog.setContentWidth(t)}}}var a={__esModule:true};a.DialogDelegate=s;return a});
1
+ sap.ui.define(["sap/m/Dialog","sap/m/Button","sap/m/BusyDialog","../../../utils/Logger"],function(t,e,i,a){"use strict";const o=a["Logger"];class s{activeDialog=null;requestedWidth="auto";calculatedOptimalWidth="auto";constructor(t){this.host=t}async openInDialog(a="Form",s="OK",n,l="Cancel",r="auto",c){this.requestedWidth=r;this.calculatedOptimalWidth=r;const h=new i({text:"Building Form..."});h.open();try{const t=this.host.generate();if(t instanceof Promise){await t}}catch(t){h.close();o.error("[MetaUI] Catastrophic error during pre-generation of dialog content",t.message,"DialogDelegate");return}h.close();const d=this.requestedWidth==="auto"&&this.calculatedOptimalWidth!=="auto"?this.calculatedOptimalWidth:this.requestedWidth;const u=new t({title:a,contentWidth:d,content:[this.host],beginButton:new e({text:s,type:"Emphasized",press:()=>{try{const t=this.host.triggerSubmit();if(t){u.close()}}catch(t){o.error("[MetaUI] Catastrophic error during validation/submit pipeline",t.message,"DialogDelegate");this.host.fireEvent("validationError",{fieldPath:"root",message:t.message})}}}),endButton:new e({text:l,press:()=>{this.host.fireEvent("cancel");u.close()}}),afterClose:()=>{this.activeDialog=null;u.destroy()}});this.activeDialog=u;if(c&&typeof c.addDependent==="function"){c.addDependent(u)}u.open()}updateDialogWidthDynamically(t){this.calculatedOptimalWidth=t;if(this.activeDialog&&this.requestedWidth==="auto"&&t!=="auto"){this.activeDialog.setContentWidth(t)}}}var n={__esModule:true};n.DialogDelegate=s;return n});
2
2
  //# sourceMappingURL=DialogDelegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DialogDelegate.js","names":["Logger","_____utils_Logger","DialogDelegate","activeDialog","requestedWidth","constructor","host","this","openInDialog","title","submitButtonText","isGenerated","cancelButtonText","dialogWidth","parentView","dialog","Dialog","contentWidth","content","beginButton","Button","text","type","press","success","triggerSubmit","close","err","error","message","fireEvent","fieldPath","endButton","afterClose","destroy","addDependent","open","updateDialogWidthDynamically","optimalWidth","setContentWidth","__exports","__esModule"],"sources":["DialogDelegate.ts"],"sourcesContent":["import Dialog from \"sap/m/Dialog\";\nimport Button from \"sap/m/Button\";\nimport Control from \"sap/ui/core/Control\";\nimport { Logger } from \"../../../utils/Logger\";\n\nexport interface IHostDialog {\n generate(): void;\n triggerSubmit(): boolean;\n fireEvent(eventName: string, parameters?: Record<string, unknown>): this;\n}\n\n/**\n * Extracts all popup and dialog generation logic from the Host control.\n */\nexport class DialogDelegate {\n private host: IHostDialog & Control;\n private activeDialog: Dialog | null = null;\n private requestedWidth: string = \"auto\";\n\n /**\n * Initializes a new DialogDelegate to handle dialog-based rendering.\n * @param host The parent DynamicHost or GeneratorHost control.\n */\n constructor(host: IHostDialog & Control) {\n this.host = host;\n }\n\n /**\n * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.\n * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.\n */\n public openInDialog(title: string = \"Form\", submitButtonText: string = \"OK\", isGenerated: boolean, cancelButtonText: string = \"Cancel\", dialogWidth: string = \"auto\", parentView?: Control): void {\n // UI5 PURITY: Do not manually force generate() here.\n // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.\n\n this.requestedWidth = dialogWidth;\n const dialog = new Dialog({\n title: title,\n contentWidth: dialogWidth,\n content: [this.host], // Mount host inside the dialog\n beginButton: new Button({\n text: submitButtonText,\n type: \"Emphasized\",\n press: () => {\n try {\n const success = this.host.triggerSubmit();\n if (success) {\n dialog.close();\n }\n } catch (err) {\n Logger.error(\"[MetaUI] Catastrophic error during validation/submit pipeline\", (err as Error).message, \"DialogDelegate\");\n this.host.fireEvent(\"validationError\", { fieldPath: \"root\", message: (err as Error).message });\n }\n }\n }),\n endButton: new Button({\n text: cancelButtonText,\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n this.activeDialog = null;\n dialog.destroy();\n }\n });\n\n this.activeDialog = dialog;\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n\n /**\n * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.\n */\n public updateDialogWidthDynamically(optimalWidth: string): void {\n if (this.activeDialog && this.requestedWidth === \"auto\" && optimalWidth !== \"auto\") {\n this.activeDialog.setContentWidth(optimalWidth);\n }\n }\n}\n"],"mappings":"yGAGSA,EAAMC,EAAA,UAWR,MAAMC,EAEDC,aAA8B,KAC9BC,eAAyB,OAMjCC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAMOE,aAAaC,EAAgB,OAAQC,EAA2B,KAAMC,EAAsBC,EAA2B,SAAUC,EAAsB,OAAQC,GAIlKP,KAAKH,eAAiBS,EACtB,MAAME,EAAS,IAAIC,EAAO,CACtBP,MAAOA,EACPQ,aAAcJ,EACdK,QAAS,CAACX,KAAKD,MACfa,YAAa,IAAIC,EAAO,CACpBC,KAAMX,EACNY,KAAM,aACNC,MAAOA,KACH,IACI,MAAMC,EAAUjB,KAAKD,KAAKmB,gBAC1B,GAAID,EAAS,CACTT,EAAOW,OACX,CACJ,CAAE,MAAOC,GACL3B,EAAO4B,MAAM,gEAAkED,EAAcE,QAAS,kBACtGtB,KAAKD,KAAKwB,UAAU,kBAAmB,CAAEC,UAAW,OAAQF,QAAUF,EAAcE,SACxF,KAGRG,UAAW,IAAIZ,EAAO,CAClBC,KAAMT,EACNW,MAAOA,KACHhB,KAAKD,KAAKwB,UAAU,UACpBf,EAAOW,WAGfO,WAAYA,KACR1B,KAAKJ,aAAe,KACpBY,EAAOmB,aAIf3B,KAAKJ,aAAeY,EAEpB,GAAID,UAAqBA,EAAWqB,eAAiB,WAAY,CAC7DrB,EAAWqB,aAAapB,EAC5B,CAEAA,EAAOqB,MACX,CAKOC,6BAA6BC,GAChC,GAAI/B,KAAKJ,cAAgBI,KAAKH,iBAAmB,QAAUkC,IAAiB,OAAQ,CAChF/B,KAAKJ,aAAaoC,gBAAgBD,EACtC,CACJ,EACH,IAAAE,EAAA,CAAAC,WAAA,MAAAD,EAAAtC,iBAAA,OAAAsC,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DialogDelegate.js","names":["Logger","_____utils_Logger","DialogDelegate","activeDialog","requestedWidth","calculatedOptimalWidth","constructor","host","this","openInDialog","title","submitButtonText","isGenerated","cancelButtonText","dialogWidth","parentView","busyDialog","BusyDialog","text","open","genResult","generate","Promise","err","close","error","message","finalWidth","dialog","Dialog","contentWidth","content","beginButton","Button","type","press","success","triggerSubmit","fireEvent","fieldPath","endButton","afterClose","destroy","addDependent","updateDialogWidthDynamically","optimalWidth","setContentWidth","__exports","__esModule"],"sources":["DialogDelegate.ts"],"sourcesContent":["import Dialog from \"sap/m/Dialog\";\nimport Button from \"sap/m/Button\";\nimport Control from \"sap/ui/core/Control\";\nimport BusyDialog from \"sap/m/BusyDialog\";\nimport { Logger } from \"../../../utils/Logger\";\n\nexport interface IHostDialog {\n generate(): Promise<void> | void;\n triggerSubmit(): boolean;\n fireEvent(eventName: string, parameters?: Record<string, unknown>): this;\n}\n\n/**\n * Extracts all popup and dialog generation logic from the Host control.\n */\nexport class DialogDelegate {\n private host: IHostDialog & Control;\n private activeDialog: Dialog | null = null;\n private requestedWidth: string = \"auto\";\n private calculatedOptimalWidth: string = \"auto\";\n\n /**\n * Initializes a new DialogDelegate to handle dialog-based rendering.\n * @param host The parent DynamicHost or GeneratorHost control.\n */\n constructor(host: IHostDialog & Control) {\n this.host = host;\n }\n\n /**\n * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.\n * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.\n */\n public async openInDialog(title: string = \"Form\", submitButtonText: string = \"OK\", isGenerated: boolean, cancelButtonText: string = \"Cancel\", dialogWidth: string = \"auto\", parentView?: Control): Promise<void> {\n this.requestedWidth = dialogWidth;\n this.calculatedOptimalWidth = dialogWidth; // Default fallback\n\n // Mask the complex asynchronous rendering to prevent visual snapping\n const busyDialog = new BusyDialog({ text: \"Building Form...\" });\n busyDialog.open();\n\n try {\n // Force manual generation BEFORE mounting the dialog so the optimal width is perfectly calculated first\n const genResult = this.host.generate();\n if (genResult instanceof Promise) {\n await genResult;\n }\n } catch (err) {\n busyDialog.close();\n Logger.error(\"[MetaUI] Catastrophic error during pre-generation of dialog content\", (err as Error).message, \"DialogDelegate\");\n return;\n }\n\n busyDialog.close();\n\n // The Engine heuristically updated `calculatedOptimalWidth` during `generate()`. Apply it on frame 1.\n const finalWidth = this.requestedWidth === \"auto\" && this.calculatedOptimalWidth !== \"auto\" ? this.calculatedOptimalWidth : this.requestedWidth;\n\n const dialog = new Dialog({\n title: title,\n contentWidth: finalWidth,\n content: [this.host], // Mount host inside the dialog\n beginButton: new Button({\n text: submitButtonText,\n type: \"Emphasized\",\n press: () => {\n try {\n const success = this.host.triggerSubmit();\n if (success) {\n dialog.close();\n }\n } catch (err) {\n Logger.error(\"[MetaUI] Catastrophic error during validation/submit pipeline\", (err as Error).message, \"DialogDelegate\");\n this.host.fireEvent(\"validationError\", { fieldPath: \"root\", message: (err as Error).message });\n }\n }\n }),\n endButton: new Button({\n text: cancelButtonText,\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n this.activeDialog = null;\n dialog.destroy();\n }\n });\n\n this.activeDialog = dialog;\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n\n /**\n * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.\n */\n public updateDialogWidthDynamically(optimalWidth: string): void {\n this.calculatedOptimalWidth = optimalWidth;\n // Only dynamically stretch if the dialog is ALREADY open (e.g., hybrid inference late-loading)\n if (this.activeDialog && this.requestedWidth === \"auto\" && optimalWidth !== \"auto\") {\n this.activeDialog.setContentWidth(optimalWidth);\n }\n }\n}\n"],"mappings":"8HAISA,EAAMC,EAAA,UAWR,MAAMC,EAEDC,aAA8B,KAC9BC,eAAyB,OACzBC,uBAAiC,OAMzCC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAMA,kBAAaE,CAAaC,EAAgB,OAAQC,EAA2B,KAAMC,EAAsBC,EAA2B,SAAUC,EAAsB,OAAQC,GACxKP,KAAKJ,eAAiBU,EACtBN,KAAKH,uBAAyBS,EAG9B,MAAME,EAAa,IAAIC,EAAW,CAAEC,KAAM,qBAC1CF,EAAWG,OAEX,IAEI,MAAMC,EAAYZ,KAAKD,KAAKc,WAC5B,GAAID,aAAqBE,QAAS,OACxBF,CACV,CACJ,CAAE,MAAOG,GACLP,EAAWQ,QACXxB,EAAOyB,MAAM,sEAAwEF,EAAcG,QAAS,kBAC5G,MACJ,CAEAV,EAAWQ,QAGX,MAAMG,EAAanB,KAAKJ,iBAAmB,QAAUI,KAAKH,yBAA2B,OAASG,KAAKH,uBAAyBG,KAAKJ,eAEjI,MAAMwB,EAAS,IAAIC,EAAO,CACtBnB,MAAOA,EACPoB,aAAcH,EACdI,QAAS,CAACvB,KAAKD,MACfyB,YAAa,IAAIC,EAAO,CACpBf,KAAMP,EACNuB,KAAM,aACNC,MAAOA,KACH,IACI,MAAMC,EAAU5B,KAAKD,KAAK8B,gBAC1B,GAAID,EAAS,CACTR,EAAOJ,OACX,CACJ,CAAE,MAAOD,GACLvB,EAAOyB,MAAM,gEAAkEF,EAAcG,QAAS,kBACtGlB,KAAKD,KAAK+B,UAAU,kBAAmB,CAAEC,UAAW,OAAQb,QAAUH,EAAcG,SACxF,KAGRc,UAAW,IAAIP,EAAO,CAClBf,KAAML,EACNsB,MAAOA,KACH3B,KAAKD,KAAK+B,UAAU,UACpBV,EAAOJ,WAGfiB,WAAYA,KACRjC,KAAKL,aAAe,KACpByB,EAAOc,aAIflC,KAAKL,aAAeyB,EAEpB,GAAIb,UAAqBA,EAAW4B,eAAiB,WAAY,CAC7D5B,EAAW4B,aAAaf,EAC5B,CAEAA,EAAOT,MACX,CAKOyB,6BAA6BC,GAChCrC,KAAKH,uBAAyBwC,EAE9B,GAAIrC,KAAKL,cAAgBK,KAAKJ,iBAAmB,QAAUyC,IAAiB,OAAQ,CAChFrC,KAAKL,aAAa2C,gBAAgBD,EACtC,CACJ,EACH,IAAAE,EAAA,CAAAC,WAAA,MAAAD,EAAA7C,iBAAA,OAAA6C,CAAA","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import Dialog from "sap/m/Dialog";
2
2
  import Button from "sap/m/Button";
3
3
  import Control from "sap/ui/core/Control";
4
+ import BusyDialog from "sap/m/BusyDialog";
4
5
  import { Logger } from "../../../utils/Logger";
5
6
 
6
7
  export interface IHostDialog {
7
- generate(): void;
8
+ generate(): Promise<void> | void;
8
9
  triggerSubmit(): boolean;
9
10
  fireEvent(eventName: string, parameters?: Record<string, unknown>): this;
10
11
  }
@@ -16,6 +17,7 @@ export class DialogDelegate {
16
17
  private host: IHostDialog & Control;
17
18
  private activeDialog: Dialog | null = null;
18
19
  private requestedWidth: string = "auto";
20
+ private calculatedOptimalWidth: string = "auto";
19
21
 
20
22
  /**
21
23
  * Initializes a new DialogDelegate to handle dialog-based rendering.
@@ -29,14 +31,34 @@ export class DialogDelegate {
29
31
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
30
32
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
31
33
  */
32
- public openInDialog(title: string = "Form", submitButtonText: string = "OK", isGenerated: boolean, cancelButtonText: string = "Cancel", dialogWidth: string = "auto", parentView?: Control): void {
33
- // UI5 PURITY: Do not manually force generate() here.
34
- // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.
35
-
34
+ public async openInDialog(title: string = "Form", submitButtonText: string = "OK", isGenerated: boolean, cancelButtonText: string = "Cancel", dialogWidth: string = "auto", parentView?: Control): Promise<void> {
36
35
  this.requestedWidth = dialogWidth;
36
+ this.calculatedOptimalWidth = dialogWidth; // Default fallback
37
+
38
+ // Mask the complex asynchronous rendering to prevent visual snapping
39
+ const busyDialog = new BusyDialog({ text: "Building Form..." });
40
+ busyDialog.open();
41
+
42
+ try {
43
+ // Force manual generation BEFORE mounting the dialog so the optimal width is perfectly calculated first
44
+ const genResult = this.host.generate();
45
+ if (genResult instanceof Promise) {
46
+ await genResult;
47
+ }
48
+ } catch (err) {
49
+ busyDialog.close();
50
+ Logger.error("[MetaUI] Catastrophic error during pre-generation of dialog content", (err as Error).message, "DialogDelegate");
51
+ return;
52
+ }
53
+
54
+ busyDialog.close();
55
+
56
+ // The Engine heuristically updated `calculatedOptimalWidth` during `generate()`. Apply it on frame 1.
57
+ const finalWidth = this.requestedWidth === "auto" && this.calculatedOptimalWidth !== "auto" ? this.calculatedOptimalWidth : this.requestedWidth;
58
+
37
59
  const dialog = new Dialog({
38
60
  title: title,
39
- contentWidth: dialogWidth,
61
+ contentWidth: finalWidth,
40
62
  content: [this.host], // Mount host inside the dialog
41
63
  beginButton: new Button({
42
64
  text: submitButtonText,
@@ -79,6 +101,8 @@ export class DialogDelegate {
79
101
  * Allows the Engine to retroactively expand the dialog once the schema is fully parsed.
80
102
  */
81
103
  public updateDialogWidthDynamically(optimalWidth: string): void {
104
+ this.calculatedOptimalWidth = optimalWidth;
105
+ // Only dynamically stretch if the dialog is ALREADY open (e.g., hybrid inference late-loading)
82
106
  if (this.activeDialog && this.requestedWidth === "auto" && optimalWidth !== "auto") {
83
107
  this.activeDialog.setContentWidth(optimalWidth);
84
108
  }
@@ -1,28 +1,11 @@
1
- sap.ui.define([], function () {
1
+ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
2
2
  "use strict";
3
3
 
4
- function __ui5_require_async(path) {
5
- return new Promise(function (resolve, reject) {
6
- sap.ui.require([path], function (module) {
7
- if (!(module && module.__esModule)) {
8
- module = module === null || !(typeof module === "object" && path.endsWith("/library")) ? {
9
- default: module
10
- } : module;
11
- Object.defineProperty(module, "__esModule", {
12
- value: true
13
- });
14
- }
15
- resolve(module);
16
- }, function (err) {
17
- reject(err);
18
- });
19
- });
20
- }
21
4
  /**
22
5
  * @file DefaultLayoutGenerator.ts
23
6
  * @description Automatically synthesizes a default UI layout for schemas that lack an explicit mapping.
24
7
  */
25
-
8
+ const Logger = ___utils_Logger["Logger"];
26
9
  /**
27
10
  * Encapsulates the logic to dynamically build a safe, default layout orchestration
28
11
  * when the developer or backend fails to provide an explicit `uiLayout`.
@@ -78,22 +61,18 @@ sap.ui.define([], function () {
78
61
  try {
79
62
  const prop = props[key];
80
63
  const currentPath = `${basePath}/${key}`;
81
- if (prop.type === "object" && prop.properties) {
82
- elements.push({
83
- type: "Group",
84
- label: prop.ui?.label || key,
85
- elements: this.generateElementsFromProperties(prop.properties, `${currentPath}/properties`)
86
- });
87
- } else {
88
- elements.push({
89
- type: "Control",
90
- scope: currentPath
91
- });
92
- }
64
+
65
+ // We do not recursively inline nested objects as Groups.
66
+ // MetaUI handles nested objects dynamically via the ObjectPlugin drill-down dialog.
67
+ // This prevents duplicate Tables and infinite recursion on circular $refs.
68
+ elements.push({
69
+ type: "Control",
70
+ scope: currentPath
71
+ });
93
72
  } catch (error) {
94
73
  // Do not swallow errors. A failure to synthesize a property is a critical failure.
95
74
  const msg = `[MetaUI] DefaultLayoutGenerator failed to synthesize property '${key}': ${error.message}`;
96
- __ui5_require_async("../utils/Logger").then(m => m.Logger.error(msg));
75
+ Logger.error(msg);
97
76
  throw new Error(msg);
98
77
  }
99
78
  }