@siliconst/metaui 1.4.10 → 1.4.13

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 (287) hide show
  1. package/README.md +4 -178
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +46 -8
  4. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +27 -3
  6. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +41 -9
  10. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +132 -18
  11. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +14 -9
  13. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  14. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +117 -18
  17. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +1 -3
  18. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  21. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +1 -3
  23. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +9 -6
  24. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  28. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +9 -6
  30. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +56 -49
  31. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +9 -4
  33. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
  35. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +67 -50
  37. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -2
  38. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -2
  40. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
  42. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -3
  43. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +4 -6
  44. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -1
  47. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +4 -4
  48. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +34 -9
  49. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +16 -2
  51. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +36 -5
  55. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +19 -2
  56. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +9 -0
  58. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  60. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +21 -7
  62. package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js +3 -1
  63. package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/core/Registry.d.ts.map +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/core/Registry.js +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/core/Registry.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/core/Registry.ts +3 -1
  68. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +54 -34
  69. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +3 -1
  71. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +55 -34
  75. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +7 -6
  76. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  80. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +7 -6
  81. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +40 -11
  82. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +6 -1
  84. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  87. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +39 -13
  88. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +13 -0
  90. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  91. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +15 -0
  92. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  93. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +1 -0
  94. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +1 -0
  96. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +41 -40
  99. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  100. package/src/nz/co/siliconst/ui5/metaui/library.d.ts +1 -0
  101. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  102. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/library.ts +1 -0
  105. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +2 -2
  106. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  107. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  108. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +2 -2
  110. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +77 -1
  111. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +17 -0
  113. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  114. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +67 -7
  117. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +1 -1
  118. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  120. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  121. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +1 -1
  122. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +1 -1
  123. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  124. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +5 -1
  128. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  130. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  132. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +5 -1
  133. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  135. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  136. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +1 -1
  138. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  141. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  142. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  150. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  156. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +130 -0
  159. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -0
  160. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +39 -0
  161. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -0
  162. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +2 -0
  163. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -0
  164. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +127 -0
  165. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  168. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  169. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +1 -1
  170. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +2 -2
  171. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +2 -2
  175. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +1 -1
  176. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  177. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  179. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +1 -1
  181. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  183. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  184. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +1 -1
  186. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  187. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  189. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +1 -1
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +1 -1
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +1 -1
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +1 -1
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +1 -1
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +1 -1
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +1 -1
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin-dbg.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts +1 -1
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts.map +1 -1
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.js.map +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.ts +2 -2
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin-dbg.js.map +1 -1
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts.map +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.js.map +1 -1
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.ts +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts.map +1 -1
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js +1 -1
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.ts +2 -2
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts +1 -1
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts.map +1 -1
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.ts +2 -2
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js.map +1 -1
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts +1 -1
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js +1 -1
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.ts +3 -3
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin-dbg.js.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts +1 -1
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.js.map +1 -1
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.ts +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin-dbg.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.js.map +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.ts +1 -1
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js +2 -2
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js.map +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts.map +1 -1
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js.map +1 -1
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.ts +4 -4
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js +3 -2
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js.map +1 -1
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts +1 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts.map +1 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js.map +1 -1
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.ts +4 -3
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js +3 -1
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js.map +1 -1
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts.map +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js.map +1 -1
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.ts +4 -3
@@ -9,8 +9,10 @@ import { DataSyncDelegate } from "./delegates/DataSyncDelegate";
9
9
  import { ValidationDelegate } from "./delegates/ValidationDelegate";
10
10
  import { DialogDelegate } from "./delegates/DialogDelegate";
11
11
  import MessageBox from "sap/m/MessageBox";
12
+ import MessageStrip from "sap/m/MessageStrip";
13
+ import VBox from "sap/m/VBox";
12
14
  import { PluginRegistry } from "../../core/PluginRegistry";
13
- import { ISchema } from "../../interfaces/ISchema";
15
+ import type { ISchema } from "../../interfaces/ISchema";
14
16
 
15
17
  /**
16
18
  * Base wrapper element for embedding the dynamic form natively via Explicit Schemas.
@@ -72,7 +74,8 @@ export default class GeneratorHost extends Control {
72
74
  },
73
75
  validationStateChanged: { parameters: { isValid: { type: "boolean" } } },
74
76
  validationError: { parameters: { fieldPath: { type: "string" }, message: { type: "string" } } },
75
- validationSuccess: { parameters: { fieldPath: { type: "string" } } }
77
+ validationSuccess: { parameters: { fieldPath: { type: "string" } } },
78
+ error: { parameters: { message: { type: "string" }, exception: { type: "object" } } }
76
79
  }
77
80
  };
78
81
 
@@ -125,6 +128,17 @@ export default class GeneratorHost extends Control {
125
128
  return this;
126
129
  }
127
130
 
131
+ /**
132
+ * Intercepts property updates to dynamically forward them to active delegates/managers.
133
+ */
134
+ public setProperty(propertyName: string, value: unknown, suppressInvalidate?: boolean): this {
135
+ super.setProperty(propertyName, value, suppressInvalidate);
136
+ if (propertyName === "useMessageManager" && this.stateManager) {
137
+ this.stateManager.setUseMessageManager(value === true);
138
+ }
139
+ return this;
140
+ }
141
+
128
142
  /**
129
143
  * Returns the active state manager instance managing the JSON payload.
130
144
  */
@@ -220,8 +234,11 @@ export default class GeneratorHost extends Control {
220
234
 
221
235
  if (hasSchema || hasData) {
222
236
  this.generate();
223
- } else if (this.getProperty("debugMode")) {
224
- Logger.debug("[MetaUI]", "GeneratorHost skipped rendering. Neither 'schemaDefinition' nor data was provided.", "GeneratorHost");
237
+ } else {
238
+ const msg = "GeneratorHost skipped rendering. Neither 'schemaDefinition' nor 'data' was provided.";
239
+ Logger.error("[MetaUI]", msg, "GeneratorHost");
240
+ this.fireEvent("error", { message: msg });
241
+ throw new Error(msg); // Eradicate silent errors
225
242
  }
226
243
  }
227
244
  }
@@ -237,7 +254,9 @@ export default class GeneratorHost extends Control {
237
254
 
238
255
  this.validationDelegate.removeAllMessages();
239
256
 
240
- const errors = this.engine.validateAll();
257
+ // Only apply local fallback visual states if the global MessageManager is explicitly disabled
258
+ const applyVisualFallback = this.getProperty("useMessageManager") !== true;
259
+ const errors = this.engine.validateAll(applyVisualFallback);
241
260
  if (errors.length > 0) {
242
261
  this.validationDelegate.pushMessage("", "One or more fields failed schema validation. Please review the highlighted fields.");
243
262
  for (const err of errors) {
@@ -257,6 +276,12 @@ export default class GeneratorHost extends Control {
257
276
  addError: (propertyPath: string, errorMessage: string) => {
258
277
  isPrevented = true;
259
278
  this.validationDelegate.pushMessage(propertyPath, errorMessage);
279
+ if (applyVisualFallback && this.engine) {
280
+ const plugin = this.engine.getPluginByPath(propertyPath);
281
+ if (plugin && typeof plugin.setVisualValidationState === "function") {
282
+ plugin.setVisualValidationState(false, errorMessage);
283
+ }
284
+ }
260
285
  }
261
286
  });
262
287
 
@@ -276,6 +301,12 @@ export default class GeneratorHost extends Control {
276
301
  */
277
302
  public addCustomError(fieldPath: string, message: string): void {
278
303
  this.validationDelegate.addCustomError(fieldPath, message);
304
+ if (this.getProperty("useMessageManager") !== true && this.engine) {
305
+ const plugin = this.engine.getPluginByPath(fieldPath);
306
+ if (plugin && typeof plugin.setVisualValidationState === "function") {
307
+ plugin.setVisualValidationState(false, message);
308
+ }
309
+ }
279
310
  }
280
311
 
281
312
  /**
@@ -283,6 +314,13 @@ export default class GeneratorHost extends Control {
283
314
  */
284
315
  public clearCustomError(fieldPath: string): void {
285
316
  this.validationDelegate.clearCustomError(fieldPath);
317
+ if (this.getProperty("useMessageManager") !== true && this.engine) {
318
+ const plugin = this.engine.getPluginByPath(fieldPath);
319
+ if (plugin && typeof plugin.setVisualValidationState === "function") {
320
+ const schemaValid = plugin.validate();
321
+ plugin.setVisualValidationState(schemaValid.isValid, schemaValid.errorMessage);
322
+ }
323
+ }
286
324
  }
287
325
 
288
326
  /**
@@ -323,10 +361,10 @@ export default class GeneratorHost extends Control {
323
361
  }
324
362
 
325
363
  /**
326
- * Internal reference to the active debounce timeout.
327
- * Prevents sequential redundant layouts from being generated when properties are set rapidly.
364
+ * Internal reference to the active generate promise.
365
+ * Prevents concurrent redundant layouts from being generated when properties are set rapidly or DialogDelegate triggers it.
328
366
  */
329
- private _generateTimeoutId: number | null = null;
367
+ private _generatePromise: Promise<void> | null = null;
330
368
 
331
369
  /**
332
370
  * The core rendering pipeline entry point.
@@ -334,13 +372,20 @@ export default class GeneratorHost extends Control {
334
372
  * @returns Promise that resolves when the layout is successfully built and mounted.
335
373
  */
336
374
  public async generate(): Promise<void> {
337
- return Promise.resolve().then(async () => {
375
+ if (this._generatePromise) {
376
+ return this._generatePromise;
377
+ }
378
+ this._generatePromise = Promise.resolve().then(async () => {
338
379
  try {
339
380
  await this._doGenerate();
340
381
  } catch (e) {
341
382
  Logger.error("[MetaUI]", "Error in deferred generate: " + e, "GeneratorHost");
383
+ throw e; // Ensure it bubbles up to awaiters
384
+ } finally {
385
+ this._generatePromise = null;
342
386
  }
343
387
  });
388
+ return this._generatePromise;
344
389
  }
345
390
 
346
391
  /**
@@ -369,6 +414,8 @@ export default class GeneratorHost extends Control {
369
414
  }
370
415
 
371
416
  const rawSchema = this.getProperty("schemaDefinition");
417
+ const isSchemaEmpty = !rawSchema || (typeof rawSchema === "object" && Object.keys(rawSchema).length === 0);
418
+
372
419
  let inputData = this.getProperty("data");
373
420
  const inputDataJson = this.getProperty("dataJson");
374
421
 
@@ -376,20 +423,36 @@ export default class GeneratorHost extends Control {
376
423
  try {
377
424
  inputData = JSON.parse(inputDataJson as string);
378
425
  } catch (e) {
379
- Logger.error("[MetaUI]", "Failed to parse inputDataJson string: " + (e as Error).message, "GeneratorHost");
426
+ const msg = "Failed to parse inputDataJson string: " + (e as Error).message;
427
+ Logger.error("[MetaUI]", msg, "GeneratorHost");
428
+ this.fireEvent("error", { message: msg, exception: e });
429
+ throw new Error(msg); // Critical error instead of silent fallback
380
430
  }
381
431
  } else if (typeof inputData === "string") {
382
432
  try {
383
433
  inputData = JSON.parse(inputData);
384
434
  } catch (e) {
385
- Logger.error("[MetaUI]", "Failed to parse inputData string: " + (e as Error).message, "GeneratorHost");
435
+ const msg = "Failed to parse inputData string: " + (e as Error).message;
436
+ Logger.error("[MetaUI]", msg, "GeneratorHost");
437
+ this.fireEvent("error", { message: msg, exception: e });
438
+ throw new Error(msg); // Critical error instead of silent fallback
386
439
  }
387
440
  }
388
441
 
389
442
  // The internal payload represents the user's latest un-extracted edits. It must take priority.
390
- const finalData = internalPayload || inputData || {};
443
+ const finalData = internalPayload || inputData;
444
+
445
+ if (!finalData || Object.keys(finalData).length === 0) {
446
+ if (isSchemaEmpty) {
447
+ const msg = "No payload provided and no explicit schema defined. Cannot infer UI.";
448
+ Logger.error("[MetaUI]", msg, "GeneratorHost");
449
+ this.fireEvent("error", { message: msg });
450
+ throw new Error(msg);
451
+ }
452
+ }
391
453
 
392
- const normalizedSchema = SchemaNormalizer.normalize(rawSchema, finalData);
454
+ const schemaToNormalize = isSchemaEmpty ? null : rawSchema;
455
+ const normalizedSchema = SchemaNormalizer.normalize(schemaToNormalize, finalData);
393
456
 
394
457
  // Cache the parsed/inferred schema so DataSyncDelegate can diff against it later
395
458
  this.parsedSchema = normalizedSchema as Record<string, unknown>;
@@ -418,9 +481,14 @@ export default class GeneratorHost extends Control {
418
481
 
419
482
  this.activeModelName = "metaUI_" + this.getId();
420
483
  this.stateManager = new StateManager(finalData, normalizedSchema, this.activeModelName);
484
+ this.stateManager.setUseMessageManager(this.getProperty("useMessageManager") === true);
421
485
  this.setModel(this.stateManager.getModel(), this.activeModelName);
422
486
 
423
- this.engine = new Engine(this.getProperty("editable") as boolean);
487
+ if (!this.engine) {
488
+ const isEditable = this.getProperty("editable") !== false;
489
+ const useMessageManager = this.getProperty("useMessageManager") === true;
490
+ this.engine = new Engine(isEditable, useMessageManager);
491
+ }
424
492
 
425
493
  this.generatedContent = this.engine.build(
426
494
  normalizedSchema,
@@ -431,7 +499,35 @@ export default class GeneratorHost extends Control {
431
499
  this.onInternalFieldChange.bind(this)
432
500
  );
433
501
 
434
- this.setAggregation("_content", this.generatedContent);
502
+ let contentContainer = this.generatedContent;
503
+
504
+ const hasProperties = normalizedSchema && Object.keys(normalizedSchema).length > 0;
505
+
506
+ if (!hasProperties) {
507
+ const strip = new MessageStrip({
508
+ text: "Warning: The generated UI is blank. Reason: The schema (or inferred schema) contains no valid properties to render.",
509
+ type: "Warning",
510
+ showIcon: true,
511
+ showCloseButton: false
512
+ });
513
+ strip.addStyleClass("sapUiSmallMarginBottom");
514
+ contentContainer = new VBox({
515
+ items: [strip, this.generatedContent]
516
+ });
517
+ } else if (this.engine.hasPartialRenderingErrors) {
518
+ const strip = new MessageStrip({
519
+ text: "Layout partially rendered. Some fields failed to generate due to configuration errors.",
520
+ type: "Warning",
521
+ showIcon: true,
522
+ showCloseButton: true
523
+ });
524
+ strip.addStyleClass("sapUiSmallMarginBottom");
525
+ contentContainer = new VBox({
526
+ items: [strip, this.generatedContent]
527
+ });
528
+ }
529
+
530
+ this.setAggregation("_content", contentContainer);
435
531
  this.validationDelegate.registerObject(this.generatedContent);
436
532
 
437
533
  const payload = this.stateManager.extractPayload();
@@ -439,16 +535,19 @@ export default class GeneratorHost extends Control {
439
535
 
440
536
  } catch (error) {
441
537
  this.setBusy(false);
442
- Logger.error("[MetaUI]", "Fatal crash during layout generation: " + (error as Error).message, "GeneratorHost");
538
+ const msg = "Fatal crash during layout generation: " + (error as Error).message;
539
+ Logger.error("[MetaUI]", msg, "GeneratorHost");
540
+ this.fireEvent("error", { message: msg, exception: error });
443
541
  this.validationDelegate.mountCrashBoundary(error as Error);
542
+ throw error; // Completely eliminate silent error swallowing
444
543
  }
445
544
  }
446
545
 
447
546
  /**
448
547
  * Programmatic API. Re-parents the generated content into a dialog and opens it.
449
548
  */
450
- public openInDialog(title: string = "Form", submitButtonText: string = "OK"): void {
549
+ public openInDialog(title: string = "Form", submitButtonText: string = "OK", cancelButtonText: string = "Cancel", dialogWidth: string = "800px", parentView?: Control): void {
451
550
  const isGenerated = !!this.generatedContent;
452
- this.dialogDelegate.openInDialog(title, submitButtonText, isGenerated);
551
+ this.dialogDelegate.openInDialog(title, submitButtonText, isGenerated, cancelButtonText, dialogWidth, parentView);
453
552
  }
454
553
  }
@@ -93,9 +93,7 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/base/util/extend", "../../../util
93
93
  } catch (e) {
94
94
  const msg = `Failed to hot-swap ${propertyName}: ` + e.message;
95
95
  Logger.error("[MetaUI]", msg, "DataSyncDelegate");
96
- if (this.host.getProperty("debugMode")) {
97
- sap.ui.require(["sap/m/MessageBox"], MessageBox => MessageBox.error(msg));
98
- }
96
+ throw new Error(msg);
99
97
  }
100
98
  }
101
99
  }
@@ -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","sap","ui","require","MessageBox","__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 if (this.host.getProperty(\"debugMode\")) {\n sap.ui.require([\"sap/m/MessageBox\"], (MessageBox: typeof import(\"sap/m/MessageBox\").default) => MessageBox.error(msg));\n }\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","__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 +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;KAsE1G;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;KAoE1G;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");if(this.host.getProperty("debugMode")){sap.ui.require(["sap/m/MessageBox"],t=>t.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(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});
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","sap","ui","require","MessageBox","__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 if (this.host.getProperty(\"debugMode\")) {\n sap.ui.require([\"sap/m/MessageBox\"], (MessageBox: typeof import(\"sap/m/MessageBox\").default) => MessageBox.error(msg));\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,GAAI7B,KAAKD,KAAKiB,YAAY,aAAc,CACpCgB,IAAIC,GAAGC,QAAQ,CAAC,oBAAsBC,GAA0DA,EAAWJ,MAAMF,GACrH,CACJ,CACJ,EACH,IAAAO,EAAA,CAAAC,WAAA,MAAAD,EAAA1C,mBAAA,OAAA0C,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","__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":[]}
@@ -115,9 +115,7 @@ export class DataSyncDelegate {
115
115
  } catch (e) {
116
116
  const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;
117
117
  Logger.error("[MetaUI]", msg, "DataSyncDelegate");
118
- if (this.host.getProperty("debugMode")) {
119
- sap.ui.require(["sap/m/MessageBox"], (MessageBox: typeof import("sap/m/MessageBox").default) => MessageBox.error(msg));
120
- }
118
+ throw new Error(msg);
121
119
  }
122
120
  }
123
121
  }
@@ -18,13 +18,13 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
18
18
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
19
19
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
20
20
  */
21
- openInDialog(title = "Form", submitButtonText = "OK", isGenerated) {
22
- if (!isGenerated) {
23
- this.host.generate();
24
- }
21
+ openInDialog(title = "Form", submitButtonText = "OK", isGenerated, cancelButtonText = "Cancel", dialogWidth = "800px", parentView) {
22
+ // UI5 PURITY: Do not manually force generate() here.
23
+ // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.
24
+
25
25
  const dialog = new Dialog({
26
26
  title: title,
27
- contentWidth: "800px",
27
+ contentWidth: dialogWidth,
28
28
  content: [this.host],
29
29
  // Mount host inside the dialog
30
30
  beginButton: new Button({
@@ -46,7 +46,7 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
46
46
  }
47
47
  }),
48
48
  endButton: new Button({
49
- text: "Cancel",
49
+ text: cancelButtonText,
50
50
  press: () => {
51
51
  this.host.fireEvent("cancel");
52
52
  dialog.close();
@@ -56,6 +56,9 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "../../../utils/Logger"], functio
56
56
  dialog.destroy();
57
57
  }
58
58
  });
59
+ if (parentView && typeof parentView.addDependent === "function") {
60
+ parentView.addDependent(dialog);
61
+ }
59
62
  dialog.open();
60
63
  }
61
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DialogDelegate-dbg.js","names":["Logger","_____utils_Logger","DialogDelegate","constructor","host","openInDialog","title","submitButtonText","isGenerated","generate","dialog","Dialog","contentWidth","content","beginButton","Button","text","type","press","success","triggerSubmit","close","err","error","message","fireEvent","fieldPath","endButton","afterClose","destroy","open","__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\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): void {\n if (!isGenerated) {\n this.host.generate();\n }\n\n const dialog = new Dialog({\n title: title,\n contentWidth: \"800px\",\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: \"Cancel\",\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n dialog.destroy();\n }\n });\n\n dialog.open();\n }\n}\n"],"mappings":";;;QAGSA,MAAM,GAAAC,iBAAA;EAQf;AACA;AACA;EACO,MAAMC,cAAc,CAAC;IAGxB;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,EAAQ;MACrG,IAAI,CAACA,WAAW,EAAE;QACd,IAAI,CAACJ,IAAI,CAACK,QAAQ,CAAC,CAAC;MACxB;MAEA,MAAMC,MAAM,GAAG,IAAIC,MAAM,CAAC;QACtBL,KAAK,EAAEA,KAAK;QACZM,YAAY,EAAE,OAAO;QACrBC,OAAO,EAAE,CAAC,IAAI,CAACT,IAAI,CAAC;QAAE;QACtBU,WAAW,EAAE,IAAIC,MAAM,CAAC;UACpBC,IAAI,EAAET,gBAAgB;UACtBU,IAAI,EAAE,YAAY;UAClBC,KAAK,EAAEA,CAAA,KAAM;YACT,IAAI;cACA,MAAMC,OAAO,GAAG,IAAI,CAACf,IAAI,CAACgB,aAAa,CAAC,CAAC;cACzC,IAAID,OAAO,EAAE;gBACTT,MAAM,CAACW,KAAK,CAAC,CAAC;cAClB;YACJ,CAAC,CAAC,OAAOC,GAAG,EAAE;cACVtB,MAAM,CAACuB,KAAK,CAAC,+DAA+D,EAAGD,GAAG,CAAWE,OAAO,EAAE,gBAAgB,CAAC;cACvH,IAAI,CAACpB,IAAI,CAACqB,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,EAAE,QAAQ;UACdE,KAAK,EAAEA,CAAA,KAAM;YACT,IAAI,CAACd,IAAI,CAACqB,SAAS,CAAC,QAAQ,CAAC;YAC7Bf,MAAM,CAACW,KAAK,CAAC,CAAC;UAClB;QACJ,CAAC,CAAC;QACFO,UAAU,EAAEA,CAAA,KAAM;UACdlB,MAAM,CAACmB,OAAO,CAAC,CAAC;QACpB;MACJ,CAAC,CAAC;MAEFnB,MAAM,CAACoB,IAAI,CAAC,CAAC;IACjB;EACJ;EAAC,IAAAC,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAA7B,cAAA,GAAAA,cAAA;EAAA,OAAA6B,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"DialogDelegate-dbg.js","names":["Logger","_____utils_Logger","DialogDelegate","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","__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\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 = \"800px\", 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 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 dialog.destroy();\n }\n });\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n}\n"],"mappings":";;;QAGSA,MAAM,GAAAC,iBAAA;EAQf;AACA;AACA;EACO,MAAMC,cAAc,CAAC;IAGxB;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,OAAO,EAAEC,UAAoB,EAAQ;MAC/L;MACA;;MAEA,MAAMC,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;cACVxB,MAAM,CAACyB,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;UACdlB,MAAM,CAACmB,OAAO,CAAC,CAAC;QACpB;MACJ,CAAC,CAAC;MAEF,IAAIpB,UAAU,IAAI,OAAOA,UAAU,CAACqB,YAAY,KAAK,UAAU,EAAE;QAC7DrB,UAAU,CAACqB,YAAY,CAACpB,MAAM,CAAC;MACnC;MAEAA,MAAM,CAACqB,IAAI,CAAC,CAAC;IACjB;EACJ;EAAC,IAAAC,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAhC,cAAA,GAAAA,cAAA;EAAA,OAAAgC,SAAA;AAAA","ignoreList":[]}
@@ -19,7 +19,7 @@ declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegat
19
19
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
20
20
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
21
21
  */
22
- openInDialog(title: string, submitButtonText: string, isGenerated: boolean): void;
22
+ openInDialog(title: string, submitButtonText: string, isGenerated: boolean, cancelButtonText?: string, dialogWidth?: string, parentView?: Control): void;
23
23
  }
24
24
  }
25
25
  //# sourceMappingURL=DialogDelegate.d.ts.map
@@ -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;QAEpC;;;WAGG;oBACS,IAAI,EAAE,WAAW,GAAG,OAAO;QAIvC;;;WAGG;QACI,YAAY,CAAC,KAAK,EAAE,MAAe,EAAE,gBAAgB,EAAE,MAAa,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;KAsC3G;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;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;QAEpC;;;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,MAAgB,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;KAyCrM;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["sap/m/Dialog","sap/m/Button","../../../utils/Logger"],function(t,e,s){"use strict";const o=s["Logger"];class i{constructor(t){this.host=t}openInDialog(s="Form",i="OK",n){if(!n){this.host.generate()}const r=new t({title:s,contentWidth:"800px",content:[this.host],beginButton:new e({text:i,type:"Emphasized",press:()=>{try{const t=this.host.triggerSubmit();if(t){r.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:"Cancel",press:()=>{this.host.fireEvent("cancel");r.close()}}),afterClose:()=>{r.destroy()}});r.open()}}var n={__esModule:true};n.DialogDelegate=i;return n});
1
+ sap.ui.define(["sap/m/Dialog","sap/m/Button","../../../utils/Logger"],function(e,t,o){"use strict";const s=o["Logger"];class n{constructor(e){this.host=e}openInDialog(o="Form",n="OK",i,r="Cancel",a="800px",c){const l=new e({title:o,contentWidth:a,content:[this.host],beginButton:new t({text:n,type:"Emphasized",press:()=>{try{const e=this.host.triggerSubmit();if(e){l.close()}}catch(e){s.error("[MetaUI] Catastrophic error during validation/submit pipeline",e.message,"DialogDelegate");this.host.fireEvent("validationError",{fieldPath:"root",message:e.message})}}}),endButton:new t({text:r,press:()=>{this.host.fireEvent("cancel");l.close()}}),afterClose:()=>{l.destroy()}});if(c&&typeof c.addDependent==="function"){c.addDependent(l)}l.open()}}var i={__esModule:true};i.DialogDelegate=n;return i});
2
2
  //# sourceMappingURL=DialogDelegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DialogDelegate.js","names":["Logger","_____utils_Logger","DialogDelegate","constructor","host","this","openInDialog","title","submitButtonText","isGenerated","generate","dialog","Dialog","contentWidth","content","beginButton","Button","text","type","press","success","triggerSubmit","close","err","error","message","fireEvent","fieldPath","endButton","afterClose","destroy","open","__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\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): void {\n if (!isGenerated) {\n this.host.generate();\n }\n\n const dialog = new Dialog({\n title: title,\n contentWidth: \"800px\",\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: \"Cancel\",\n press: () => {\n this.host.fireEvent(\"cancel\");\n dialog.close();\n }\n }),\n afterClose: () => {\n dialog.destroy();\n }\n });\n\n dialog.open();\n }\n}\n"],"mappings":"yGAGSA,EAAMC,EAAA,UAWR,MAAMC,EAOTC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAMOE,aAAaC,EAAgB,OAAQC,EAA2B,KAAMC,GACzE,IAAKA,EAAa,CACdJ,KAAKD,KAAKM,UACd,CAEA,MAAMC,EAAS,IAAIC,EAAO,CACtBL,MAAOA,EACPM,aAAc,QACdC,QAAS,CAACT,KAAKD,MACfW,YAAa,IAAIC,EAAO,CACpBC,KAAMT,EACNU,KAAM,aACNC,MAAOA,KACH,IACI,MAAMC,EAAUf,KAAKD,KAAKiB,gBAC1B,GAAID,EAAS,CACTT,EAAOW,OACX,CACJ,CAAE,MAAOC,GACLvB,EAAOwB,MAAM,gEAAkED,EAAcE,QAAS,kBACtGpB,KAAKD,KAAKsB,UAAU,kBAAmB,CAAEC,UAAW,OAAQF,QAAUF,EAAcE,SACxF,KAGRG,UAAW,IAAIZ,EAAO,CAClBC,KAAM,SACNE,MAAOA,KACHd,KAAKD,KAAKsB,UAAU,UACpBf,EAAOW,WAGfO,WAAYA,KACRlB,EAAOmB,aAIfnB,EAAOoB,MACX,EACH,IAAAC,EAAA,CAAAC,WAAA,MAAAD,EAAA9B,iBAAA,OAAA8B,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DialogDelegate.js","names":["Logger","_____utils_Logger","DialogDelegate","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","__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\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 = \"800px\", 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 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 dialog.destroy();\n }\n });\n\n if (parentView && typeof parentView.addDependent === \"function\") {\n parentView.addDependent(dialog);\n }\n\n dialog.open();\n }\n}\n"],"mappings":"yGAGSA,EAAMC,EAAA,UAWR,MAAMC,EAOTC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAMOE,aAAaC,EAAgB,OAAQC,EAA2B,KAAMC,EAAsBC,EAA2B,SAAUC,EAAsB,QAASC,GAInK,MAAMC,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,GACLzB,EAAO0B,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,KACRlB,EAAOmB,aAIf,GAAIpB,UAAqBA,EAAWqB,eAAiB,WAAY,CAC7DrB,EAAWqB,aAAapB,EAC5B,CAEAA,EAAOqB,MACX,EACH,IAAAC,EAAA,CAAAC,WAAA,MAAAD,EAAAjC,iBAAA,OAAAiC,CAAA","ignoreList":[]}
@@ -27,14 +27,13 @@ export class DialogDelegate {
27
27
  * Dialog Modality: Opens the generated layout inside a sap.m.Dialog.
28
28
  * Automatically wires up customizable submit (default: 'OK') and 'Cancel' buttons.
29
29
  */
30
- public openInDialog(title: string = "Form", submitButtonText: string = "OK", isGenerated: boolean): void {
31
- if (!isGenerated) {
32
- this.host.generate();
33
- }
30
+ public openInDialog(title: string = "Form", submitButtonText: string = "OK", isGenerated: boolean, cancelButtonText: string = "Cancel", dialogWidth: string = "800px", parentView?: Control): void {
31
+ // UI5 PURITY: Do not manually force generate() here.
32
+ // Opening the dialog mounts the host, natively firing onBeforeRendering() which triggers generation cleanly.
34
33
 
35
34
  const dialog = new Dialog({
36
35
  title: title,
37
- contentWidth: "800px",
36
+ contentWidth: dialogWidth,
38
37
  content: [this.host], // Mount host inside the dialog
39
38
  beginButton: new Button({
40
39
  text: submitButtonText,
@@ -52,7 +51,7 @@ export class DialogDelegate {
52
51
  }
53
52
  }),
54
53
  endButton: new Button({
55
- text: "Cancel",
54
+ text: cancelButtonText,
56
55
  press: () => {
57
56
  this.host.fireEvent("cancel");
58
57
  dialog.close();
@@ -63,6 +62,10 @@ export class DialogDelegate {
63
62
  }
64
63
  });
65
64
 
65
+ if (parentView && typeof parentView.addDependent === "function") {
66
+ parentView.addDependent(dialog);
67
+ }
68
+
66
69
  dialog.open();
67
70
  }
68
71
  }