@siliconst/metaui 1.4.6 → 1.4.7

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 (276) hide show
  1. package/package.json +1 -1
  2. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +13 -0
  3. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
  4. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts +10 -0
  5. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts.map +1 -1
  6. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +10 -0
  8. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +47 -4
  9. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +47 -4
  11. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +48 -4
  14. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +32 -1
  15. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +7 -0
  17. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +11 -1
  21. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +20 -0
  22. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +12 -0
  24. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +21 -0
  28. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +9 -0
  29. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +7 -0
  31. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +7 -0
  34. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +13 -0
  35. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +10 -0
  37. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +10 -0
  40. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +41 -5
  41. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  42. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +16 -4
  43. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +44 -4
  47. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +5 -0
  48. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  49. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +4 -0
  50. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +4 -0
  53. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +4 -0
  54. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +4 -0
  56. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  58. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +4 -0
  59. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +4 -0
  60. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +4 -0
  62. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  63. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +4 -0
  65. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +45 -12
  66. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts +6 -0
  68. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +25 -12
  72. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +25 -12
  73. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +5 -5
  75. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +34 -27
  79. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +17 -3
  80. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts +4 -0
  82. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  84. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +13 -3
  86. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +158 -106
  87. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +25 -26
  89. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  91. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  92. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +176 -113
  93. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +26 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +22 -0
  96. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +22 -0
  99. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +6 -0
  100. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  101. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +5 -0
  102. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +5 -0
  105. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js +10 -0
  106. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js.map +1 -1
  107. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts +9 -0
  108. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.js.map +1 -1
  110. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.ts +9 -0
  111. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +10 -0
  112. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts +9 -0
  114. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +9 -0
  117. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js +9 -0
  118. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js.map +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts +8 -0
  120. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts.map +1 -1
  121. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.js.map +1 -1
  122. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.ts +8 -0
  123. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +2 -32
  124. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +9 -10
  126. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/library.d.ts +0 -6
  128. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  130. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/library.ts +0 -33
  132. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +18 -0
  133. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +16 -0
  135. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  136. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +16 -0
  138. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +19 -0
  139. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +17 -0
  141. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  142. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +17 -0
  144. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +1 -0
  145. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +2 -0
  150. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +19 -0
  151. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +17 -0
  153. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +17 -0
  156. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +29 -0
  157. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +25 -0
  159. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  160. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +25 -0
  162. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +19 -0
  163. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  164. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +17 -0
  165. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +17 -0
  168. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +19 -0
  169. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  170. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +17 -0
  171. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +17 -0
  174. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +2 -0
  175. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  176. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +2 -0
  177. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  179. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +2 -0
  180. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +19 -0
  181. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +17 -0
  183. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  184. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +17 -0
  186. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +19 -0
  187. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +17 -0
  189. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +17 -0
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +18 -0
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +16 -0
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +16 -0
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +19 -0
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +17 -0
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +17 -0
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +19 -0
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +17 -0
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +17 -0
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +23 -0
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +20 -0
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +20 -0
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +19 -0
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +17 -0
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +17 -0
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +19 -0
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +17 -0
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +17 -0
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +19 -0
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +17 -0
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +17 -0
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +19 -0
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +17 -0
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +17 -0
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -0
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +2 -0
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +2 -0
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +19 -0
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +17 -0
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +17 -0
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +19 -0
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +17 -0
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +17 -0
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +19 -0
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +17 -0
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +17 -0
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +19 -0
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +17 -0
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +17 -0
  270. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js +0 -32
  271. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js.map +0 -1
  272. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts +0 -16
  273. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts.map +0 -1
  274. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js +0 -2
  275. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js.map +0 -1
  276. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.ts +0 -26
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siliconst/metaui",
3
- "version": "1.4.6",
3
+ "version": "1.4.7",
4
4
  "description": "Dynamic Metadata UI5 Engine",
5
5
  "author": "SiliconStreetDev1",
6
6
  "license": "MIT",
@@ -18,6 +18,10 @@ sap.ui.define(["./BaseHardwareControl", "sap/m/Button", "sap/m/VBox", "sap/ui/co
18
18
  };
19
19
  videoEl = null;
20
20
  mediaStream = null;
21
+
22
+ /**
23
+ * Initializes the control and builds the internal camera UI.
24
+ */
21
25
  init() {
22
26
  super.init();
23
27
  this.videoHtml = new HTML({
@@ -120,6 +124,11 @@ sap.ui.define(["./BaseHardwareControl", "sap/m/Button", "sap/m/VBox", "sap/ui/co
120
124
  this.captureBtn.setVisible(false);
121
125
  this.retakeBtn.setVisible(true);
122
126
  }
127
+
128
+ /**
129
+ * Sets the value of the control programmatically.
130
+ * @param value The base64 data URL string representing the image.
131
+ */
123
132
  setValue(value) {
124
133
  super.setValue(value);
125
134
  if (value && typeof value === "string" && value.startsWith("data:image")) {
@@ -132,6 +141,10 @@ sap.ui.define(["./BaseHardwareControl", "sap/m/Button", "sap/m/VBox", "sap/ui/co
132
141
  }
133
142
  return this;
134
143
  }
144
+
145
+ /**
146
+ * Cleans up the hardware streams when the control is destroyed.
147
+ */
135
148
  exit() {
136
149
  this.stopCamera();
137
150
  super.exit();
@@ -1 +1 @@
1
- {"version":3,"file":"CameraControl-dbg.js","names":["BaseHardwareControl","_interopRequireDefault","__BaseHardwareControl","Logger","___utils_Logger","CameraControl","renderer","metadata","properties","events","videoEl","mediaStream","init","videoHtml","HTML","content","afterRendering","onVideoRendered","bind","addStyleClass","previewImage","Image","width","visible","startBtn","Button","icon","text","press","handleStartCameraPress","captureBtn","captureImage","retakeBtn","retakeImage","vBox","VBox","items","setAggregation","domRef","getDomRef","val","getValue","startsWith","showPreview","startCamera","setVisible","style","display","navigator","mediaDevices","getUserMedia","video","facingMode","srcObject","err","error","message","MessageToast","show","stopCamera","getTracks","forEach","track","stop","canvas","document","createElement","videoWidth","height","videoHeight","ctx","getContext","drawImage","dataUrl","toDataURL","setValueAndFire","setTimeout","setSrc","setValue","value","getVisible","exit"],"sources":["CameraControl.ts"],"sourcesContent":["import BaseHardwareControl from \"./BaseHardwareControl\";\nimport Button from \"sap/m/Button\";\nimport VBox from \"sap/m/VBox\";\nimport HTML from \"sap/ui/core/HTML\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Image from \"sap/m/Image\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * CameraControl\n * Provides a live video feed to capture photos.\n */\nexport default class CameraControl extends BaseHardwareControl {\n static readonly renderer = \"nz.co.siliconst.ui5.metaui.controls.BaseHardwareControlRenderer\";\n static readonly metadata = {\n properties: {},\n events: {}\n };\n\n private startBtn!: Button;\n private vBox!: VBox;\n private captureBtn!: Button;\n private retakeBtn!: Button;\n private videoHtml!: HTML;\n private previewImage!: Image;\n \n private videoEl: HTMLVideoElement | null = null;\n private mediaStream: MediaStream | null = null;\n\n public init(): void {\n super.init();\n\n this.videoHtml = new HTML({\n content: \"<video width='400' height='300' autoplay playsinline style='background-color: #000; display: none;'></video>\",\n afterRendering: this.onVideoRendered.bind(this)\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.previewImage = new Image({\n width: \"400px\",\n visible: false\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.startBtn = new Button({\n icon: \"sap-icon://video\",\n text: \"Start Camera\",\n press: this.handleStartCameraPress.bind(this)\n });\n\n this.captureBtn = new Button({\n icon: \"sap-icon://camera\",\n text: \"Capture\",\n visible: false,\n press: this.captureImage.bind(this)\n });\n\n this.retakeBtn = new Button({\n icon: \"sap-icon://undo\",\n text: \"Retake\",\n visible: false,\n press: this.retakeImage.bind(this)\n });\n\n this.vBox = new VBox({\n items: [this.videoHtml, this.previewImage, this.startBtn, this.captureBtn, this.retakeBtn]\n });\n\n this.setAggregation(\"_content\", this.vBox);\n }\n\n private async onVideoRendered(): void {\n const domRef = this.videoHtml.getDomRef() as HTMLElement;\n if (!domRef) return;\n \n this.videoEl = domRef as HTMLVideoElement;\n \n const val = this.getValue();\n if (val && typeof val === \"string\" && val.startsWith(\"data:image\")) {\n this.showPreview(val);\n }\n }\n\n private handleStartCameraPress(): void {\n this.startCamera();\n this.startBtn.setVisible(false);\n this.captureBtn.setVisible(true);\n if (this.videoEl) {\n this.videoEl.style.display = \"block\";\n }\n }\n\n private async startCamera(): Promise<void> {\n try {\n this.mediaStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } });\n if (this.videoEl) {\n this.videoEl.srcObject = this.mediaStream;\n }\n } catch (err) {\n Logger.error(\"Camera access denied or unavailable\", (err as Error).message, \"CameraControl\");\n MessageToast.show(\"Camera access denied or unavailable.\");\n }\n }\n\n private stopCamera(): void {\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n }\n\n private captureImage(): void {\n if (!this.videoEl) return;\n \n const canvas = document.createElement(\"canvas\");\n canvas.width = this.videoEl.videoWidth || 400;\n canvas.height = this.videoEl.videoHeight || 300;\n \n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n this.setValueAndFire(dataUrl);\n this.showPreview(dataUrl);\n MessageToast.show(\"Image captured successfully.\");\n }\n }\n\n private retakeImage(): void {\n this.setValueAndFire(null);\n this.previewImage.setVisible(false);\n this.videoHtml.setVisible(true);\n this.captureBtn.setVisible(true);\n this.retakeBtn.setVisible(false);\n \n // Use a slight timeout to ensure DOM is ready before accessing stream again\n setTimeout(() => this.startCamera(), 100);\n }\n\n private showPreview(dataUrl: string): void {\n this.stopCamera();\n this.videoHtml.setVisible(false);\n this.previewImage.setSrc(dataUrl);\n this.previewImage.setVisible(true);\n this.captureBtn.setVisible(false);\n this.retakeBtn.setVisible(true);\n }\n\n public setValue(value: any): this {\n super.setValue(value);\n if (value && typeof value === \"string\" && value.startsWith(\"data:image\")) {\n this.showPreview(value);\n } else if (!value) {\n // Only retake if we were showing a preview\n if (this.previewImage.getVisible()) {\n this.retakeImage();\n }\n }\n return this;\n }\n\n public exit(): void {\n this.stopCamera();\n super.exit();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CameraControl-dbg.js","names":["BaseHardwareControl","_interopRequireDefault","__BaseHardwareControl","Logger","___utils_Logger","CameraControl","renderer","metadata","properties","events","videoEl","mediaStream","init","videoHtml","HTML","content","afterRendering","onVideoRendered","bind","addStyleClass","previewImage","Image","width","visible","startBtn","Button","icon","text","press","handleStartCameraPress","captureBtn","captureImage","retakeBtn","retakeImage","vBox","VBox","items","setAggregation","domRef","getDomRef","val","getValue","startsWith","showPreview","startCamera","setVisible","style","display","navigator","mediaDevices","getUserMedia","video","facingMode","srcObject","err","error","message","MessageToast","show","stopCamera","getTracks","forEach","track","stop","canvas","document","createElement","videoWidth","height","videoHeight","ctx","getContext","drawImage","dataUrl","toDataURL","setValueAndFire","setTimeout","setSrc","setValue","value","getVisible","exit"],"sources":["CameraControl.ts"],"sourcesContent":["import BaseHardwareControl from \"./BaseHardwareControl\";\nimport Button from \"sap/m/Button\";\nimport VBox from \"sap/m/VBox\";\nimport HTML from \"sap/ui/core/HTML\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Image from \"sap/m/Image\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * CameraControl\n * Provides a live video feed to capture photos.\n */\nexport default class CameraControl extends BaseHardwareControl {\n static readonly renderer = \"nz.co.siliconst.ui5.metaui.controls.BaseHardwareControlRenderer\";\n static readonly metadata = {\n properties: {},\n events: {}\n };\n\n private startBtn!: Button;\n private vBox!: VBox;\n private captureBtn!: Button;\n private retakeBtn!: Button;\n private videoHtml!: HTML;\n private previewImage!: Image;\n \n private videoEl: HTMLVideoElement | null = null;\n private mediaStream: MediaStream | null = null;\n\n /**\n * Initializes the control and builds the internal camera UI.\n */\n public init(): void {\n super.init();\n\n this.videoHtml = new HTML({\n content: \"<video width='400' height='300' autoplay playsinline style='background-color: #000; display: none;'></video>\",\n afterRendering: this.onVideoRendered.bind(this)\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.previewImage = new Image({\n width: \"400px\",\n visible: false\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.startBtn = new Button({\n icon: \"sap-icon://video\",\n text: \"Start Camera\",\n press: this.handleStartCameraPress.bind(this)\n });\n\n this.captureBtn = new Button({\n icon: \"sap-icon://camera\",\n text: \"Capture\",\n visible: false,\n press: this.captureImage.bind(this)\n });\n\n this.retakeBtn = new Button({\n icon: \"sap-icon://undo\",\n text: \"Retake\",\n visible: false,\n press: this.retakeImage.bind(this)\n });\n\n this.vBox = new VBox({\n items: [this.videoHtml, this.previewImage, this.startBtn, this.captureBtn, this.retakeBtn]\n });\n\n this.setAggregation(\"_content\", this.vBox);\n }\n\n private async onVideoRendered(): void {\n const domRef = this.videoHtml.getDomRef() as HTMLElement;\n if (!domRef) return;\n \n this.videoEl = domRef as HTMLVideoElement;\n \n const val = this.getValue();\n if (val && typeof val === \"string\" && val.startsWith(\"data:image\")) {\n this.showPreview(val);\n }\n }\n\n private handleStartCameraPress(): void {\n this.startCamera();\n this.startBtn.setVisible(false);\n this.captureBtn.setVisible(true);\n if (this.videoEl) {\n this.videoEl.style.display = \"block\";\n }\n }\n\n private async startCamera(): Promise<void> {\n try {\n this.mediaStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } });\n if (this.videoEl) {\n this.videoEl.srcObject = this.mediaStream;\n }\n } catch (err) {\n Logger.error(\"Camera access denied or unavailable\", (err as Error).message, \"CameraControl\");\n MessageToast.show(\"Camera access denied or unavailable.\");\n }\n }\n\n private stopCamera(): void {\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n }\n\n private captureImage(): void {\n if (!this.videoEl) return;\n \n const canvas = document.createElement(\"canvas\");\n canvas.width = this.videoEl.videoWidth || 400;\n canvas.height = this.videoEl.videoHeight || 300;\n \n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n this.setValueAndFire(dataUrl);\n this.showPreview(dataUrl);\n MessageToast.show(\"Image captured successfully.\");\n }\n }\n\n private retakeImage(): void {\n this.setValueAndFire(null);\n this.previewImage.setVisible(false);\n this.videoHtml.setVisible(true);\n this.captureBtn.setVisible(true);\n this.retakeBtn.setVisible(false);\n \n // Use a slight timeout to ensure DOM is ready before accessing stream again\n setTimeout(() => this.startCamera(), 100);\n }\n\n private showPreview(dataUrl: string): void {\n this.stopCamera();\n this.videoHtml.setVisible(false);\n this.previewImage.setSrc(dataUrl);\n this.previewImage.setVisible(true);\n this.captureBtn.setVisible(false);\n this.retakeBtn.setVisible(true);\n }\n\n /**\n * Sets the value of the control programmatically.\n * @param value The base64 data URL string representing the image.\n */\n public setValue(value: any): this {\n super.setValue(value);\n if (value && typeof value === \"string\" && value.startsWith(\"data:image\")) {\n this.showPreview(value);\n } else if (!value) {\n // Only retake if we were showing a preview\n if (this.previewImage.getVisible()) {\n this.retakeImage();\n }\n }\n return this;\n }\n\n /**\n * Cleans up the hardware streams when the control is destroyed.\n */\n public exit(): void {\n this.stopCamera();\n super.exit();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,9 @@ declare module "nz/co/siliconst/ui5/metaui/controls/CameraControl" {
18
18
  private previewImage;
19
19
  private videoEl;
20
20
  private mediaStream;
21
+ /**
22
+ * Initializes the control and builds the internal camera UI.
23
+ */
21
24
  init(): void;
22
25
  private onVideoRendered;
23
26
  private handleStartCameraPress;
@@ -26,7 +29,14 @@ declare module "nz/co/siliconst/ui5/metaui/controls/CameraControl" {
26
29
  private captureImage;
27
30
  private retakeImage;
28
31
  private showPreview;
32
+ /**
33
+ * Sets the value of the control programmatically.
34
+ * @param value The base64 data URL string representing the image.
35
+ */
29
36
  setValue(value: any): this;
37
+ /**
38
+ * Cleans up the hardware streams when the control is destroyed.
39
+ */
30
40
  exit(): void;
31
41
  }
32
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CameraControl.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mDAAmD,CAAC;IACnE,OAAO,mBAAmB,MAAM,yDAAyD,CAAC;IAQ1F;;;OAGG;IACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,mBAAmB;QAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,qEAAqE;QAC7F,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;UAGtB;QAEF,OAAO,CAAC,QAAQ,CAAU;QAC1B,OAAO,CAAC,IAAI,CAAQ;QACpB,OAAO,CAAC,UAAU,CAAU;QAC5B,OAAO,CAAC,SAAS,CAAU;QAC3B,OAAO,CAAC,SAAS,CAAQ;QACzB,OAAO,CAAC,YAAY,CAAS;QAE7B,OAAO,CAAC,OAAO,CAAiC;QAChD,OAAO,CAAC,WAAW,CAA4B;QAExC,IAAI,IAAI,IAAI;gBAwCL,eAAe;QAY7B,OAAO,CAAC,sBAAsB;gBAShB,WAAW;QAYzB,OAAO,CAAC,UAAU;QAOlB,OAAO,CAAC,YAAY;QAiBpB,OAAO,CAAC,WAAW;QAWnB,OAAO,CAAC,WAAW;QASZ,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;QAa1B,IAAI,IAAI,IAAI;KAItB;CAEA"}
1
+ {"version":3,"file":"CameraControl.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mDAAmD,CAAC;IACnE,OAAO,mBAAmB,MAAM,yDAAyD,CAAC;IAQ1F;;;OAGG;IACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,mBAAmB;QAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,qEAAqE;QAC7F,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;UAGtB;QAEF,OAAO,CAAC,QAAQ,CAAU;QAC1B,OAAO,CAAC,IAAI,CAAQ;QACpB,OAAO,CAAC,UAAU,CAAU;QAC5B,OAAO,CAAC,SAAS,CAAU;QAC3B,OAAO,CAAC,SAAS,CAAQ;QACzB,OAAO,CAAC,YAAY,CAAS;QAE7B,OAAO,CAAC,OAAO,CAAiC;QAChD,OAAO,CAAC,WAAW,CAA4B;QAE/C;;WAEG;QACI,IAAI,IAAI,IAAI;gBAwCL,eAAe;QAY7B,OAAO,CAAC,sBAAsB;gBAShB,WAAW;QAYzB,OAAO,CAAC,UAAU;QAOlB,OAAO,CAAC,YAAY;QAiBpB,OAAO,CAAC,WAAW;QAWnB,OAAO,CAAC,WAAW;QASnB;;;WAGG;QACI,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;QAajC;;WAEG;QACI,IAAI,IAAI,IAAI;KAItB;CAEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CameraControl.js","names":["BaseHardwareControl","_interopRequireDefault","__BaseHardwareControl","Logger","___utils_Logger","CameraControl","static","properties","events","videoEl","mediaStream","init","super","this","videoHtml","HTML","content","afterRendering","onVideoRendered","bind","addStyleClass","previewImage","Image","width","visible","startBtn","Button","icon","text","press","handleStartCameraPress","captureBtn","captureImage","retakeBtn","retakeImage","vBox","VBox","items","setAggregation","domRef","getDomRef","val","getValue","startsWith","showPreview","startCamera","setVisible","style","display","navigator","mediaDevices","getUserMedia","video","facingMode","srcObject","err","error","message","MessageToast","show","stopCamera","getTracks","forEach","track","stop","canvas","document","createElement","videoWidth","height","videoHeight","ctx","getContext","drawImage","dataUrl","toDataURL","setValueAndFire","setTimeout","setSrc","setValue","value","getVisible","exit"],"sources":["CameraControl.ts"],"sourcesContent":["import BaseHardwareControl from \"./BaseHardwareControl\";\nimport Button from \"sap/m/Button\";\nimport VBox from \"sap/m/VBox\";\nimport HTML from \"sap/ui/core/HTML\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Image from \"sap/m/Image\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * CameraControl\n * Provides a live video feed to capture photos.\n */\nexport default class CameraControl extends BaseHardwareControl {\n static readonly renderer = \"nz.co.siliconst.ui5.metaui.controls.BaseHardwareControlRenderer\";\n static readonly metadata = {\n properties: {},\n events: {}\n };\n\n private startBtn!: Button;\n private vBox!: VBox;\n private captureBtn!: Button;\n private retakeBtn!: Button;\n private videoHtml!: HTML;\n private previewImage!: Image;\n \n private videoEl: HTMLVideoElement | null = null;\n private mediaStream: MediaStream | null = null;\n\n public init(): void {\n super.init();\n\n this.videoHtml = new HTML({\n content: \"<video width='400' height='300' autoplay playsinline style='background-color: #000; display: none;'></video>\",\n afterRendering: this.onVideoRendered.bind(this)\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.previewImage = new Image({\n width: \"400px\",\n visible: false\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.startBtn = new Button({\n icon: \"sap-icon://video\",\n text: \"Start Camera\",\n press: this.handleStartCameraPress.bind(this)\n });\n\n this.captureBtn = new Button({\n icon: \"sap-icon://camera\",\n text: \"Capture\",\n visible: false,\n press: this.captureImage.bind(this)\n });\n\n this.retakeBtn = new Button({\n icon: \"sap-icon://undo\",\n text: \"Retake\",\n visible: false,\n press: this.retakeImage.bind(this)\n });\n\n this.vBox = new VBox({\n items: [this.videoHtml, this.previewImage, this.startBtn, this.captureBtn, this.retakeBtn]\n });\n\n this.setAggregation(\"_content\", this.vBox);\n }\n\n private async onVideoRendered(): void {\n const domRef = this.videoHtml.getDomRef() as HTMLElement;\n if (!domRef) return;\n \n this.videoEl = domRef as HTMLVideoElement;\n \n const val = this.getValue();\n if (val && typeof val === \"string\" && val.startsWith(\"data:image\")) {\n this.showPreview(val);\n }\n }\n\n private handleStartCameraPress(): void {\n this.startCamera();\n this.startBtn.setVisible(false);\n this.captureBtn.setVisible(true);\n if (this.videoEl) {\n this.videoEl.style.display = \"block\";\n }\n }\n\n private async startCamera(): Promise<void> {\n try {\n this.mediaStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } });\n if (this.videoEl) {\n this.videoEl.srcObject = this.mediaStream;\n }\n } catch (err) {\n Logger.error(\"Camera access denied or unavailable\", (err as Error).message, \"CameraControl\");\n MessageToast.show(\"Camera access denied or unavailable.\");\n }\n }\n\n private stopCamera(): void {\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n }\n\n private captureImage(): void {\n if (!this.videoEl) return;\n \n const canvas = document.createElement(\"canvas\");\n canvas.width = this.videoEl.videoWidth || 400;\n canvas.height = this.videoEl.videoHeight || 300;\n \n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n this.setValueAndFire(dataUrl);\n this.showPreview(dataUrl);\n MessageToast.show(\"Image captured successfully.\");\n }\n }\n\n private retakeImage(): void {\n this.setValueAndFire(null);\n this.previewImage.setVisible(false);\n this.videoHtml.setVisible(true);\n this.captureBtn.setVisible(true);\n this.retakeBtn.setVisible(false);\n \n // Use a slight timeout to ensure DOM is ready before accessing stream again\n setTimeout(() => this.startCamera(), 100);\n }\n\n private showPreview(dataUrl: string): void {\n this.stopCamera();\n this.videoHtml.setVisible(false);\n this.previewImage.setSrc(dataUrl);\n this.previewImage.setVisible(true);\n this.captureBtn.setVisible(false);\n this.retakeBtn.setVisible(true);\n }\n\n public setValue(value: any): this {\n super.setValue(value);\n if (value && typeof value === \"string\" && value.startsWith(\"data:image\")) {\n this.showPreview(value);\n } else if (!value) {\n // Only retake if we were showing a preview\n if (this.previewImage.getVisible()) {\n this.retakeImage();\n }\n }\n return this;\n }\n\n public exit(): void {\n this.stopCamera();\n super.exit();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CameraControl.js","names":["BaseHardwareControl","_interopRequireDefault","__BaseHardwareControl","Logger","___utils_Logger","CameraControl","static","properties","events","videoEl","mediaStream","init","super","this","videoHtml","HTML","content","afterRendering","onVideoRendered","bind","addStyleClass","previewImage","Image","width","visible","startBtn","Button","icon","text","press","handleStartCameraPress","captureBtn","captureImage","retakeBtn","retakeImage","vBox","VBox","items","setAggregation","domRef","getDomRef","val","getValue","startsWith","showPreview","startCamera","setVisible","style","display","navigator","mediaDevices","getUserMedia","video","facingMode","srcObject","err","error","message","MessageToast","show","stopCamera","getTracks","forEach","track","stop","canvas","document","createElement","videoWidth","height","videoHeight","ctx","getContext","drawImage","dataUrl","toDataURL","setValueAndFire","setTimeout","setSrc","setValue","value","getVisible","exit"],"sources":["CameraControl.ts"],"sourcesContent":["import BaseHardwareControl from \"./BaseHardwareControl\";\nimport Button from \"sap/m/Button\";\nimport VBox from \"sap/m/VBox\";\nimport HTML from \"sap/ui/core/HTML\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Image from \"sap/m/Image\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * CameraControl\n * Provides a live video feed to capture photos.\n */\nexport default class CameraControl extends BaseHardwareControl {\n static readonly renderer = \"nz.co.siliconst.ui5.metaui.controls.BaseHardwareControlRenderer\";\n static readonly metadata = {\n properties: {},\n events: {}\n };\n\n private startBtn!: Button;\n private vBox!: VBox;\n private captureBtn!: Button;\n private retakeBtn!: Button;\n private videoHtml!: HTML;\n private previewImage!: Image;\n \n private videoEl: HTMLVideoElement | null = null;\n private mediaStream: MediaStream | null = null;\n\n /**\n * Initializes the control and builds the internal camera UI.\n */\n public init(): void {\n super.init();\n\n this.videoHtml = new HTML({\n content: \"<video width='400' height='300' autoplay playsinline style='background-color: #000; display: none;'></video>\",\n afterRendering: this.onVideoRendered.bind(this)\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.previewImage = new Image({\n width: \"400px\",\n visible: false\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n this.startBtn = new Button({\n icon: \"sap-icon://video\",\n text: \"Start Camera\",\n press: this.handleStartCameraPress.bind(this)\n });\n\n this.captureBtn = new Button({\n icon: \"sap-icon://camera\",\n text: \"Capture\",\n visible: false,\n press: this.captureImage.bind(this)\n });\n\n this.retakeBtn = new Button({\n icon: \"sap-icon://undo\",\n text: \"Retake\",\n visible: false,\n press: this.retakeImage.bind(this)\n });\n\n this.vBox = new VBox({\n items: [this.videoHtml, this.previewImage, this.startBtn, this.captureBtn, this.retakeBtn]\n });\n\n this.setAggregation(\"_content\", this.vBox);\n }\n\n private async onVideoRendered(): void {\n const domRef = this.videoHtml.getDomRef() as HTMLElement;\n if (!domRef) return;\n \n this.videoEl = domRef as HTMLVideoElement;\n \n const val = this.getValue();\n if (val && typeof val === \"string\" && val.startsWith(\"data:image\")) {\n this.showPreview(val);\n }\n }\n\n private handleStartCameraPress(): void {\n this.startCamera();\n this.startBtn.setVisible(false);\n this.captureBtn.setVisible(true);\n if (this.videoEl) {\n this.videoEl.style.display = \"block\";\n }\n }\n\n private async startCamera(): Promise<void> {\n try {\n this.mediaStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } });\n if (this.videoEl) {\n this.videoEl.srcObject = this.mediaStream;\n }\n } catch (err) {\n Logger.error(\"Camera access denied or unavailable\", (err as Error).message, \"CameraControl\");\n MessageToast.show(\"Camera access denied or unavailable.\");\n }\n }\n\n private stopCamera(): void {\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n }\n\n private captureImage(): void {\n if (!this.videoEl) return;\n \n const canvas = document.createElement(\"canvas\");\n canvas.width = this.videoEl.videoWidth || 400;\n canvas.height = this.videoEl.videoHeight || 300;\n \n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n this.setValueAndFire(dataUrl);\n this.showPreview(dataUrl);\n MessageToast.show(\"Image captured successfully.\");\n }\n }\n\n private retakeImage(): void {\n this.setValueAndFire(null);\n this.previewImage.setVisible(false);\n this.videoHtml.setVisible(true);\n this.captureBtn.setVisible(true);\n this.retakeBtn.setVisible(false);\n \n // Use a slight timeout to ensure DOM is ready before accessing stream again\n setTimeout(() => this.startCamera(), 100);\n }\n\n private showPreview(dataUrl: string): void {\n this.stopCamera();\n this.videoHtml.setVisible(false);\n this.previewImage.setSrc(dataUrl);\n this.previewImage.setVisible(true);\n this.captureBtn.setVisible(false);\n this.retakeBtn.setVisible(true);\n }\n\n /**\n * Sets the value of the control programmatically.\n * @param value The base64 data URL string representing the image.\n */\n public setValue(value: any): this {\n super.setValue(value);\n if (value && typeof value === \"string\" && value.startsWith(\"data:image\")) {\n this.showPreview(value);\n } else if (!value) {\n // Only retake if we were showing a preview\n if (this.previewImage.getVisible()) {\n this.retakeImage();\n }\n }\n return this;\n }\n\n /**\n * Cleans up the hardware streams when the control is destroyed.\n */\n public exit(): void {\n this.stopCamera();\n super.exit();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -27,6 +27,9 @@ export default class CameraControl extends BaseHardwareControl {
27
27
  private videoEl: HTMLVideoElement | null = null;
28
28
  private mediaStream: MediaStream | null = null;
29
29
 
30
+ /**
31
+ * Initializes the control and builds the internal camera UI.
32
+ */
30
33
  public init(): void {
31
34
  super.init();
32
35
 
@@ -144,6 +147,10 @@ export default class CameraControl extends BaseHardwareControl {
144
147
  this.retakeBtn.setVisible(true);
145
148
  }
146
149
 
150
+ /**
151
+ * Sets the value of the control programmatically.
152
+ * @param value The base64 data URL string representing the image.
153
+ */
147
154
  public setValue(value: any): this {
148
155
  super.setValue(value);
149
156
  if (value && typeof value === "string" && value.startsWith("data:image")) {
@@ -157,6 +164,9 @@ export default class CameraControl extends BaseHardwareControl {
157
164
  return this;
158
165
  }
159
166
 
167
+ /**
168
+ * Cleans up the hardware streams when the control is destroyed.
169
+ */
160
170
  public exit(): void {
161
171
  this.stopCamera();
162
172
  super.exit();
@@ -22,7 +22,15 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
22
22
  this._innerHost = null;
23
23
  this.odataDelegate = null;
24
24
  this._initializedInner = false;
25
+ /**
26
+ * Internal reference to the generated inner host instance.
27
+ * @private
28
+ */
25
29
  this._innerHost = null;
30
+ /**
31
+ * Flag indicating if the inner host has been initialized.
32
+ * @private
33
+ */
26
34
  this._initializedInner = false;
27
35
  },
28
36
  renderer: {
@@ -155,10 +163,9 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
155
163
  }
156
164
  },
157
165
  /**
158
- * Standard UI5 Lifecycle Hook.
159
- * Evaluates the initial properties and spawns the appropriate inner host strategy via the HostFactory.
160
- * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners
161
- * down to the inner host perfectly transparently.
166
+ * Initializes the OData Delegate if an OData context is detected.
167
+ * This allows DynamicHost to seamlessly synchronize metadata and properties from an OData model.
168
+ * @private
162
169
  */
163
170
  initODataDelegate: function _initODataDelegate() {
164
171
  if (!this.odataDelegate) {
@@ -175,11 +182,29 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
175
182
  }
176
183
  }
177
184
  },
185
+ /**
186
+ * Standard UI5 method override.
187
+ * Sets the binding context for the control and attempts to initialize the OData delegate
188
+ * if the context points to an OData model.
189
+ *
190
+ * @param {sap.ui.model.Context | null | undefined} oContext The binding context object
191
+ * @param {string} [sModelName] Optional model name
192
+ * @returns {this} The control instance for chaining
193
+ */
178
194
  setBindingContext: function _setBindingContext(oContext, sModelName) {
179
195
  Control.prototype.setBindingContext.call(this, oContext, sModelName);
180
196
  this.initODataDelegate();
181
197
  return this;
182
198
  },
199
+ /**
200
+ * Standard UI5 method override.
201
+ * Binds the element to the given path and attaches a change listener to re-evaluate
202
+ * the OData delegate when the element binding resolves.
203
+ *
204
+ * @param {string | any} vPath The binding path or configuration object
205
+ * @param {object} [mParameters] Optional binding parameters
206
+ * @returns {this} The control instance for chaining
207
+ */
183
208
  bindElement: function _bindElement(vPath, mParameters) {
184
209
  Control.prototype.bindElement.call(this, vPath, mParameters);
185
210
  const sModelName = typeof vPath === "object" ? vPath.model : undefined;
@@ -191,6 +216,12 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
191
216
  }
192
217
  return this;
193
218
  },
219
+ /**
220
+ * Standard UI5 Lifecycle Hook.
221
+ * Evaluates the initial properties and spawns the GeneratorHost.
222
+ * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners
223
+ * down to the inner host perfectly transparently.
224
+ */
194
225
  onBeforeRendering: function _onBeforeRendering() {
195
226
  Logger.debug("[MetaUI DynamicHost]", `onBeforeRendering called. _initializedInner: ${this._initializedInner}`, "DynamicHost");
196
227
  this.initODataDelegate();
@@ -274,6 +305,11 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
274
305
  },
275
306
  /**
276
307
  * Programmatic API support. Routes dialog commands down to the spawned inner host.
308
+ * If the inner host has not booted yet, it forces initialization immediately.
309
+ *
310
+ * @param {string} [title="Form"] The title of the dialog
311
+ * @param {string} [submitButtonText="OK"] The text for the primary action button
312
+ * @param {string} [cancelButtonText="Cancel"] The text for the cancel button
277
313
  */
278
314
  openInDialog: function _openInDialog(title, submitButtonText, cancelButtonText) {
279
315
  if (!this._innerHost) {
@@ -283,6 +319,9 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
283
319
  },
284
320
  /**
285
321
  * Proxies submission triggering down to the instantiated generator host.
322
+ * Evaluates the internal Engine validation suite and returns true if structurally sound.
323
+ *
324
+ * @returns {boolean} True if the internal payload passes schema validation, false otherwise.
286
325
  */
287
326
  triggerSubmit: function _triggerSubmit() {
288
327
  if (!this._innerHost) {
@@ -292,6 +331,10 @@ sap.ui.define(["sap/ui/core/Control", "./host/GeneratorHost", "../utils/Logger",
292
331
  },
293
332
  /**
294
333
  * Overrides standard UI5 getProperty to transparently pull extracted data from the inner host.
334
+ * Ensures that querying the DynamicHost facade for `data` always yields the freshest payload.
335
+ *
336
+ * @param {string} propertyName The name of the property to retrieve
337
+ * @returns {any} The property value
295
338
  */
296
339
  getProperty: function _getProperty(propertyName) {
297
340
  if (this._innerHost && (propertyName === "data" || propertyName === "dataJson")) {
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicHost-dbg.js","names":["GeneratorHost","_interopRequireDefault","__GeneratorHost","Logger","___utils_Logger","ODataDelegate","___host_delegates_ODataDelegate","DynamicHost","Control","extend","constructor","prototype","apply","arguments","_innerHost","odataDelegate","_initializedInner","renderer","apiVersion","render","rm","control","openStart","style","openEnd","content","getAggregation","renderControl","close","metadata","properties","schemaDefinition","type","defaultValue","data","bindable","dataJson","liveUpdate","isValid","useMessageManager","modelName","debugMode","editable","aggregations","_content","multiple","visibility","events","beforeSubmit","parameters","payload","addError","preventDefault","submit","payloadJson","cancel","fieldChange","fieldPath","value","validationStateChanged","validationError","message","validationSuccess","initODataDelegate","_initODataDelegate","oContext","getBindingContext","debug","getPath","requestObject","getObject","syncToEngine","Object","keys","setBindingContext","_setBindingContext","sModelName","Control.prototype.setBindingContext.call","bindElement","_bindElement","vPath","mParameters","Control.prototype.bindElement.call","model","undefined","oBinding","getElementBinding","attachChange","onBeforeRendering","_onBeforeRendering","schema","getProperty","hasSchema","hasData","props","getMetadata","getProperties","propName","val","Control.prototype.getProperty.call","setProperty","setAggregation","getEvents","eventName","attachEvent","oEvent","params","getParameters","Control.prototype.setProperty.call","str","JSON","stringify","handleFieldChange","fireEvent","_setProperty","propertyName","suppressInvalidate","openInDialog","_openInDialog","title","submitButtonText","cancelButtonText","triggerSubmit","_triggerSubmit","_getProperty"],"sources":["DynamicHost.ts"],"sourcesContent":["import Control from \"sap/ui/core/Control\";\nimport RenderManager from \"sap/ui/core/RenderManager\";\nimport GeneratorHost from \"./host/GeneratorHost\";\nimport { Logger } from \"../utils/Logger\";\nimport { ODataDelegate } from \"./host/delegates/ODataDelegate\";\n\n/**\n * A transparent wrapper control (Facade) that automatically chooses between Explicit Schema Mode \n * and Inference Mode based on the presence of a 'schemaDefinition'.\n * \n * This maintains total architectural separation of the modes without forcing developers to \n * use different XML tags.\n * \n * @namespace nz.co.siliconst.ui5.metaui.controls\n */\nexport default class DynamicHost extends Control {\n private _innerHost: GeneratorHost | null = null;\n private odataDelegate: ODataDelegate | null = null;\n private _initializedInner: boolean = false;\n\n static readonly metadata = {\n properties: {\n schemaDefinition: { type: \"any\", defaultValue: null },\n data: { type: \"object\", defaultValue: null, bindable: \"bindable\" },\n dataJson: { type: \"string\", defaultValue: null, bindable: \"bindable\" },\n liveUpdate: { type: \"boolean\", defaultValue: false },\n isValid: { type: \"boolean\", defaultValue: true },\n useMessageManager: { type: \"boolean\", defaultValue: false },\n modelName: { type: \"string\", defaultValue: \"meta\" },\n debugMode: { type: \"boolean\", defaultValue: false },\n editable: { type: \"boolean\", defaultValue: true }\n },\n aggregations: {\n _content: { type: \"sap.ui.core.Control\", multiple: false, visibility: \"hidden\" }\n },\n events: {\n beforeSubmit: {\n parameters: {\n payload: { type: \"object\" },\n addError: { type: \"function\" },\n preventDefault: { type: \"function\" }\n }\n },\n submit: {\n parameters: {\n payload: { type: \"object\" },\n payloadJson: { type: \"string\" }\n }\n },\n cancel: {},\n fieldChange: {\n parameters: {\n fieldPath: { type: \"string\" },\n value: { type: \"any\" },\n payload: { type: \"object\" },\n isValid: { type: \"boolean\" }\n }\n },\n validationStateChanged: { parameters: { isValid: { type: \"boolean\" } } },\n validationError: { parameters: { fieldPath: { type: \"string\" }, message: { type: \"string\" } } },\n validationSuccess: { parameters: { fieldPath: { type: \"string\" } } }\n }\n };\n\n static renderer = {\n apiVersion: 2,\n render(rm: RenderManager, control: DynamicHost) {\n rm.openStart(\"div\", control);\n rm.style(\"width\", \"100%\");\n rm.style(\"height\", \"100%\");\n rm.openEnd();\n\n const content = control.getAggregation(\"_content\") as Control;\n if (content) {\n rm.renderControl(content);\n }\n\n rm.close(\"div\");\n }\n };\n\n private _innerHost: GeneratorHost | null = null;\n private _initializedInner: boolean = false;\n\n /**\n * Standard UI5 Lifecycle Hook.\n * Evaluates the initial properties and spawns the appropriate inner host strategy via the HostFactory.\n * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners \n * down to the inner host perfectly transparently.\n */\n private initODataDelegate(): void {\n if (!this.odataDelegate) {\n const oContext = this.getBindingContext(\"odata\") || this.getBindingContext();\n if (oContext) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context found for delegate initialization: ${oContext.getPath()}`, \"DynamicHost\");\n if (typeof (oContext as any).requestObject === \"function\" || typeof (oContext as any).getObject === \"function\") {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context supports requestObject/getObject. Instantiating ODataDelegate.`, \"DynamicHost\");\n this.odataDelegate = new ODataDelegate(this, oContext as any);\n this.odataDelegate.syncToEngine();\n } else {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context does NOT support requestObject/getObject! Keys: ${Object.keys(oContext)}`, \"DynamicHost\");\n }\n }\n }\n }\n\n public setBindingContext(oContext: sap.ui.model.Context | null | undefined, sModelName?: string): this {\n super.setBindingContext(oContext, sModelName);\n this.initODataDelegate();\n return this;\n }\n\n public bindElement(vPath: string | any, mParameters?: object): this {\n super.bindElement(vPath, mParameters);\n const sModelName = typeof vPath === \"object\" ? vPath.model : undefined;\n const oBinding = this.getElementBinding(sModelName);\n if (oBinding) {\n oBinding.attachChange(() => {\n this.initODataDelegate();\n });\n }\n return this;\n }\n\n public onBeforeRendering(): void {\n Logger.debug(\"[MetaUI DynamicHost]\", `onBeforeRendering called. _initializedInner: ${this._initializedInner}`, \"DynamicHost\");\n\n this.initODataDelegate();\n\n if (!this._initializedInner) {\n const schema = this.getProperty(\"schemaDefinition\");\n const dataJson = this.getProperty(\"dataJson\");\n const data = this.getProperty(\"data\");\n\n const hasSchema = !!schema;\n const hasData = !!dataJson || !!data;\n\n Logger.debug(\"[MetaUI DynamicHost]\", `Evaluating boot. hasSchema: ${hasSchema}, hasData: ${hasData}`, \"DynamicHost\");\n\n // Only boot if we have either a schema or some data to infer from\n if (hasSchema || hasData) {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Booting inner host. hasSchema: ${hasSchema}, hasData: ${hasData}`, \"DynamicHost\");\n }\n // The architectural Facade router logic:\n // We've simplified this! We no longer use HostFactory or separate subclasses.\n // GeneratorHost is fully capable of inferring the schema if none is provided.\n this._innerHost = new GeneratorHost();\n\n // 1. Forward all static values to the spawned host BEFORE mounting.\n // Since we no longer use bindProperty, it's perfectly safe to set raw properties before mounting.\n const props = this.getMetadata().getProperties();\n for (const propName in props) {\n const val = super.getProperty(propName);\n if (val !== null && val !== undefined) {\n this._innerHost.setProperty(propName, val);\n }\n }\n\n // 2. Mount so it inherits models and triggers lifecycle.\n this.setAggregation(\"_content\", this._innerHost);\n\n // 3. Forward all event subscriptions.\n // By proxying the events upwards, the developer can subscribe to `<meta:DynamicHost submit=\"...\">` \n // and perfectly receive the inner host's submission event.\n const events = this.getMetadata().getEvents();\n for (const eventName in events) {\n this._innerHost.attachEvent(eventName, (oEvent: any) => {\n // Natively push updated payload out to any bound Fiori Element properties.\n // Using super.setProperty prevents an infinite loop back down to _innerHost.\n if (eventName === \"submit\" || eventName === \"fieldChange\") {\n const params = oEvent.getParameters();\n if (params.payload) {\n super.setProperty(\"data\", params.payload, true);\n\n const str = params.payloadJson || JSON.stringify(params.payload, null, 2);\n super.setProperty(\"dataJson\", str, true);\n }\n if (eventName === \"fieldChange\" && this.odataDelegate) {\n this.odataDelegate.handleFieldChange(params.fieldPath, params.value);\n }\n }\n this.fireEvent(eventName, oEvent.getParameters());\n });\n }\n\n this._initializedInner = true;\n }\n }\n }\n\n /**\n * Overrides standard UI5 setProperty to act as a transparent proxy.\n * When a property is updated on the wrapper (either programmatically or via a binding update),\n * it instantly mirrors that value down to the inner instantiated host.\n */\n public setProperty(propertyName: string, value: unknown, suppressInvalidate?: boolean): this {\n if (propertyName === \"data\" || propertyName === \"dataJson\" || propertyName === \"schemaDefinition\") {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Wrapper received setProperty: ${propertyName}`, \"DynamicHost\");\n }\n }\n super.setProperty(propertyName, value, suppressInvalidate);\n if (this._innerHost) {\n this._innerHost.setProperty(propertyName, value, suppressInvalidate);\n } else if (propertyName === \"data\" || propertyName === \"dataJson\" || propertyName === \"schemaDefinition\") {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `_innerHost not yet initialized when ${propertyName} was set. Booting will happen on next render.`, \"DynamicHost\");\n }\n }\n return this;\n }\n\n\n\n\n\n /**\n * Programmatic API support. Routes dialog commands down to the spawned inner host.\n */\n public openInDialog(title?: string, submitButtonText?: string, cancelButtonText?: string): void {\n if (!this._innerHost) {\n this.onBeforeRendering(); // Force init if they bypassed UI5 rendering\n }\n this._innerHost?.openInDialog(title, submitButtonText, cancelButtonText);\n }\n\n /**\n * Proxies submission triggering down to the instantiated generator host.\n */\n public triggerSubmit(): boolean {\n if (!this._innerHost) {\n return false;\n }\n return (this._innerHost as any).triggerSubmit();\n }\n\n /**\n * Overrides standard UI5 getProperty to transparently pull extracted data from the inner host.\n */\n public getProperty(propertyName: string): any {\n if (this._innerHost && (propertyName === \"data\" || propertyName === \"dataJson\")) {\n return this._innerHost.getProperty(propertyName);\n }\n return super.getProperty(propertyName);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DynamicHost-dbg.js","names":["GeneratorHost","_interopRequireDefault","__GeneratorHost","Logger","___utils_Logger","ODataDelegate","___host_delegates_ODataDelegate","DynamicHost","Control","extend","constructor","prototype","apply","arguments","_innerHost","odataDelegate","_initializedInner","renderer","apiVersion","render","rm","control","openStart","style","openEnd","content","getAggregation","renderControl","close","metadata","properties","schemaDefinition","type","defaultValue","data","bindable","dataJson","liveUpdate","isValid","useMessageManager","modelName","debugMode","editable","aggregations","_content","multiple","visibility","events","beforeSubmit","parameters","payload","addError","preventDefault","submit","payloadJson","cancel","fieldChange","fieldPath","value","validationStateChanged","validationError","message","validationSuccess","initODataDelegate","_initODataDelegate","oContext","getBindingContext","debug","getPath","requestObject","getObject","syncToEngine","Object","keys","setBindingContext","_setBindingContext","sModelName","Control.prototype.setBindingContext.call","bindElement","_bindElement","vPath","mParameters","Control.prototype.bindElement.call","model","undefined","oBinding","getElementBinding","attachChange","onBeforeRendering","_onBeforeRendering","schema","getProperty","hasSchema","hasData","props","getMetadata","getProperties","propName","val","Control.prototype.getProperty.call","setProperty","setAggregation","getEvents","eventName","attachEvent","oEvent","params","getParameters","Control.prototype.setProperty.call","str","JSON","stringify","handleFieldChange","fireEvent","_setProperty","propertyName","suppressInvalidate","openInDialog","_openInDialog","title","submitButtonText","cancelButtonText","triggerSubmit","_triggerSubmit","_getProperty"],"sources":["DynamicHost.ts"],"sourcesContent":["import Control from \"sap/ui/core/Control\";\nimport RenderManager from \"sap/ui/core/RenderManager\";\nimport GeneratorHost from \"./host/GeneratorHost\";\nimport { Logger } from \"../utils/Logger\";\nimport { ODataDelegate } from \"./host/delegates/ODataDelegate\";\n\n/**\n * A transparent wrapper control (Facade) that automatically chooses between Explicit Schema Mode \n * and Inference Mode based on the presence of a 'schemaDefinition'.\n * \n * This maintains total architectural separation of the modes without forcing developers to \n * use different XML tags.\n * \n * @namespace nz.co.siliconst.ui5.metaui.controls\n */\nexport default class DynamicHost extends Control {\n private _innerHost: GeneratorHost | null = null;\n private odataDelegate: ODataDelegate | null = null;\n private _initializedInner: boolean = false;\n\n static readonly metadata = {\n properties: {\n schemaDefinition: { type: \"any\", defaultValue: null },\n data: { type: \"object\", defaultValue: null, bindable: \"bindable\" },\n dataJson: { type: \"string\", defaultValue: null, bindable: \"bindable\" },\n liveUpdate: { type: \"boolean\", defaultValue: false },\n isValid: { type: \"boolean\", defaultValue: true },\n useMessageManager: { type: \"boolean\", defaultValue: false },\n modelName: { type: \"string\", defaultValue: \"meta\" },\n debugMode: { type: \"boolean\", defaultValue: false },\n editable: { type: \"boolean\", defaultValue: true }\n },\n aggregations: {\n _content: { type: \"sap.ui.core.Control\", multiple: false, visibility: \"hidden\" }\n },\n events: {\n beforeSubmit: {\n parameters: {\n payload: { type: \"object\" },\n addError: { type: \"function\" },\n preventDefault: { type: \"function\" }\n }\n },\n submit: {\n parameters: {\n payload: { type: \"object\" },\n payloadJson: { type: \"string\" }\n }\n },\n cancel: {},\n fieldChange: {\n parameters: {\n fieldPath: { type: \"string\" },\n value: { type: \"any\" },\n payload: { type: \"object\" },\n isValid: { type: \"boolean\" }\n }\n },\n validationStateChanged: { parameters: { isValid: { type: \"boolean\" } } },\n validationError: { parameters: { fieldPath: { type: \"string\" }, message: { type: \"string\" } } },\n validationSuccess: { parameters: { fieldPath: { type: \"string\" } } }\n }\n };\n\n static renderer = {\n apiVersion: 2,\n render(rm: RenderManager, control: DynamicHost) {\n rm.openStart(\"div\", control);\n rm.style(\"width\", \"100%\");\n rm.style(\"height\", \"100%\");\n rm.openEnd();\n\n const content = control.getAggregation(\"_content\") as Control;\n if (content) {\n rm.renderControl(content);\n }\n\n rm.close(\"div\");\n }\n };\n\n /**\n * Internal reference to the generated inner host instance.\n * @private\n */\n private _innerHost: GeneratorHost | null = null;\n \n /**\n * Flag indicating if the inner host has been initialized.\n * @private\n */\n private _initializedInner: boolean = false;\n\n /**\n * Initializes the OData Delegate if an OData context is detected.\n * This allows DynamicHost to seamlessly synchronize metadata and properties from an OData model.\n * @private\n */\n private initODataDelegate(): void {\n if (!this.odataDelegate) {\n const oContext = this.getBindingContext(\"odata\") || this.getBindingContext();\n if (oContext) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context found for delegate initialization: ${oContext.getPath()}`, \"DynamicHost\");\n if (typeof (oContext as any).requestObject === \"function\" || typeof (oContext as any).getObject === \"function\") {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context supports requestObject/getObject. Instantiating ODataDelegate.`, \"DynamicHost\");\n this.odataDelegate = new ODataDelegate(this, oContext as any);\n this.odataDelegate.syncToEngine();\n } else {\n Logger.debug(\"[MetaUI DynamicHost]\", `Context does NOT support requestObject/getObject! Keys: ${Object.keys(oContext)}`, \"DynamicHost\");\n }\n }\n }\n }\n\n /**\n * Standard UI5 method override.\n * Sets the binding context for the control and attempts to initialize the OData delegate\n * if the context points to an OData model.\n * \n * @param {sap.ui.model.Context | null | undefined} oContext The binding context object\n * @param {string} [sModelName] Optional model name\n * @returns {this} The control instance for chaining\n */\n public setBindingContext(oContext: sap.ui.model.Context | null | undefined, sModelName?: string): this {\n super.setBindingContext(oContext, sModelName);\n this.initODataDelegate();\n return this;\n }\n\n /**\n * Standard UI5 method override.\n * Binds the element to the given path and attaches a change listener to re-evaluate\n * the OData delegate when the element binding resolves.\n * \n * @param {string | any} vPath The binding path or configuration object\n * @param {object} [mParameters] Optional binding parameters\n * @returns {this} The control instance for chaining\n */\n public bindElement(vPath: string | any, mParameters?: object): this {\n super.bindElement(vPath, mParameters);\n const sModelName = typeof vPath === \"object\" ? vPath.model : undefined;\n const oBinding = this.getElementBinding(sModelName);\n if (oBinding) {\n oBinding.attachChange(() => {\n this.initODataDelegate();\n });\n }\n return this;\n }\n\n /**\n * Standard UI5 Lifecycle Hook.\n * Evaluates the initial properties and spawns the GeneratorHost.\n * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners \n * down to the inner host perfectly transparently.\n */\n public onBeforeRendering(): void {\n Logger.debug(\"[MetaUI DynamicHost]\", `onBeforeRendering called. _initializedInner: ${this._initializedInner}`, \"DynamicHost\");\n\n this.initODataDelegate();\n\n if (!this._initializedInner) {\n const schema = this.getProperty(\"schemaDefinition\");\n const dataJson = this.getProperty(\"dataJson\");\n const data = this.getProperty(\"data\");\n\n const hasSchema = !!schema;\n const hasData = !!dataJson || !!data;\n\n Logger.debug(\"[MetaUI DynamicHost]\", `Evaluating boot. hasSchema: ${hasSchema}, hasData: ${hasData}`, \"DynamicHost\");\n\n // Only boot if we have either a schema or some data to infer from\n if (hasSchema || hasData) {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Booting inner host. hasSchema: ${hasSchema}, hasData: ${hasData}`, \"DynamicHost\");\n }\n // The architectural Facade router logic:\n // We've simplified this! We no longer use HostFactory or separate subclasses.\n // GeneratorHost is fully capable of inferring the schema if none is provided.\n this._innerHost = new GeneratorHost();\n\n // 1. Forward all static values to the spawned host BEFORE mounting.\n // Since we no longer use bindProperty, it's perfectly safe to set raw properties before mounting.\n const props = this.getMetadata().getProperties();\n for (const propName in props) {\n const val = super.getProperty(propName);\n if (val !== null && val !== undefined) {\n this._innerHost.setProperty(propName, val);\n }\n }\n\n // 2. Mount so it inherits models and triggers lifecycle.\n this.setAggregation(\"_content\", this._innerHost);\n\n // 3. Forward all event subscriptions.\n // By proxying the events upwards, the developer can subscribe to `<meta:DynamicHost submit=\"...\">` \n // and perfectly receive the inner host's submission event.\n const events = this.getMetadata().getEvents();\n for (const eventName in events) {\n this._innerHost.attachEvent(eventName, (oEvent: any) => {\n // Natively push updated payload out to any bound Fiori Element properties.\n // Using super.setProperty prevents an infinite loop back down to _innerHost.\n if (eventName === \"submit\" || eventName === \"fieldChange\") {\n const params = oEvent.getParameters();\n if (params.payload) {\n super.setProperty(\"data\", params.payload, true);\n\n const str = params.payloadJson || JSON.stringify(params.payload, null, 2);\n super.setProperty(\"dataJson\", str, true);\n }\n if (eventName === \"fieldChange\" && this.odataDelegate) {\n this.odataDelegate.handleFieldChange(params.fieldPath, params.value);\n }\n }\n this.fireEvent(eventName, oEvent.getParameters());\n });\n }\n\n this._initializedInner = true;\n }\n }\n }\n\n /**\n * Overrides standard UI5 setProperty to act as a transparent proxy.\n * When a property is updated on the wrapper (either programmatically or via a binding update),\n * it instantly mirrors that value down to the inner instantiated host.\n */\n public setProperty(propertyName: string, value: unknown, suppressInvalidate?: boolean): this {\n if (propertyName === \"data\" || propertyName === \"dataJson\" || propertyName === \"schemaDefinition\") {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `Wrapper received setProperty: ${propertyName}`, \"DynamicHost\");\n }\n }\n super.setProperty(propertyName, value, suppressInvalidate);\n if (this._innerHost) {\n this._innerHost.setProperty(propertyName, value, suppressInvalidate);\n } else if (propertyName === \"data\" || propertyName === \"dataJson\" || propertyName === \"schemaDefinition\") {\n if (this.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI DynamicHost]\", `_innerHost not yet initialized when ${propertyName} was set. Booting will happen on next render.`, \"DynamicHost\");\n }\n }\n return this;\n }\n\n\n\n\n\n /**\n * Programmatic API support. Routes dialog commands down to the spawned inner host.\n * If the inner host has not booted yet, it forces initialization immediately.\n * \n * @param {string} [title=\"Form\"] The title of the dialog\n * @param {string} [submitButtonText=\"OK\"] The text for the primary action button\n * @param {string} [cancelButtonText=\"Cancel\"] The text for the cancel button\n */\n public openInDialog(title?: string, submitButtonText?: string, cancelButtonText?: string): void {\n if (!this._innerHost) {\n this.onBeforeRendering(); // Force init if they bypassed UI5 rendering\n }\n this._innerHost?.openInDialog(title, submitButtonText, cancelButtonText);\n }\n\n /**\n * Proxies submission triggering down to the instantiated generator host.\n * Evaluates the internal Engine validation suite and returns true if structurally sound.\n * \n * @returns {boolean} True if the internal payload passes schema validation, false otherwise.\n */\n public triggerSubmit(): boolean {\n if (!this._innerHost) {\n return false;\n }\n return (this._innerHost as any).triggerSubmit();\n }\n\n /**\n * Overrides standard UI5 getProperty to transparently pull extracted data from the inner host.\n * Ensures that querying the DynamicHost facade for `data` always yields the freshest payload.\n * \n * @param {string} propertyName The name of the property to retrieve\n * @returns {any} The property value\n */\n public getProperty(propertyName: string): any {\n if (this._innerHost && (propertyName === \"data\" || propertyName === \"dataJson\")) {\n return this._innerHost.getProperty(propertyName);\n }\n return super.getProperty(propertyName);\n }\n}\n"],"mappings":";;;;;;QAEOA,aAAa,GAAAC,sBAAA,CAAAC,eAAA;EAAA,MACXC,MAAM,GAAAC,eAAA;EAAA,MACNC,aAAa,GAAAC,+BAAA;EAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARA,MASqBC,WAAW,GAASC,OAAO,CAAAC,MAAA;IAAAC,WAAA,WAAAA,YAAA;MAAAF,OAAA,CAAAG,SAAA,CAAAD,WAAA,CAAAE,KAAA,OAAAC,SAAA;MAAA,KACpCC,UAAU,GAAyB,IAAI;MAAA,KACvCC,aAAa,GAAyB,IAAI;MAAA,KAC1CC,iBAAiB,GAAY,KAAK;MA+D1C;AACJ;AACA;AACA;MAHI,KAIQF,UAAU,GAAyB,IAAI;MAE/C;AACJ;AACA;AACA;MAHI,KAIQE,iBAAiB,GAAY,KAAK;IAAA;IA3BnCC,QAAQ,EAAG;MACdC,UAAU,EAAE,CAAC;MACbC,MAAMA,CAACC,EAAiB,EAAEC,OAAoB,EAAE;QAC5CD,EAAE,CAACE,SAAS,CAAC,KAAK,EAAED,OAAO,CAAC;QAC5BD,EAAE,CAACG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;QACzBH,EAAE,CAACG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1BH,EAAE,CAACI,OAAO,CAAC,CAAC;QAEZ,MAAMC,OAAO,GAAGJ,OAAO,CAACK,cAAc,CAAC,UAAU,CAAY;QAC7D,IAAID,OAAO,EAAE;UACTL,EAAE,CAACO,aAAa,CAACF,OAAO,CAAC;QAC7B;QAEAL,EAAE,CAACQ,KAAK,CAAC,KAAK,CAAC;MACnB;IACJ,CAAC;IA3DeC,QAAQ,EAAG;MACvBC,UAAU,EAAE;QACRC,gBAAgB,EAAE;UAAEC,IAAI,EAAE,KAAK;UAAEC,YAAY,EAAE;QAAK,CAAC;QACrDC,IAAI,EAAE;UAAEF,IAAI,EAAE,QAAQ;UAAEC,YAAY,EAAE,IAAI;UAAEE,QAAQ,EAAE;QAAW,CAAC;QAClEC,QAAQ,EAAE;UAAEJ,IAAI,EAAE,QAAQ;UAAEC,YAAY,EAAE,IAAI;UAAEE,QAAQ,EAAE;QAAW,CAAC;QACtEE,UAAU,EAAE;UAAEL,IAAI,EAAE,SAAS;UAAEC,YAAY,EAAE;QAAM,CAAC;QACpDK,OAAO,EAAE;UAAEN,IAAI,EAAE,SAAS;UAAEC,YAAY,EAAE;QAAK,CAAC;QAChDM,iBAAiB,EAAE;UAAEP,IAAI,EAAE,SAAS;UAAEC,YAAY,EAAE;QAAM,CAAC;QAC3DO,SAAS,EAAE;UAAER,IAAI,EAAE,QAAQ;UAAEC,YAAY,EAAE;QAAO,CAAC;QACnDQ,SAAS,EAAE;UAAET,IAAI,EAAE,SAAS;UAAEC,YAAY,EAAE;QAAM,CAAC;QACnDS,QAAQ,EAAE;UAAEV,IAAI,EAAE,SAAS;UAAEC,YAAY,EAAE;QAAK;MACpD,CAAC;MACDU,YAAY,EAAE;QACVC,QAAQ,EAAE;UAAEZ,IAAI,EAAE,qBAAqB;UAAEa,QAAQ,EAAE,KAAK;UAAEC,UAAU,EAAE;QAAS;MACnF,CAAC;MACDC,MAAM,EAAE;QACJC,YAAY,EAAE;UACVC,UAAU,EAAE;YACRC,OAAO,EAAE;cAAElB,IAAI,EAAE;YAAS,CAAC;YAC3BmB,QAAQ,EAAE;cAAEnB,IAAI,EAAE;YAAW,CAAC;YAC9BoB,cAAc,EAAE;cAAEpB,IAAI,EAAE;YAAW;UACvC;QACJ,CAAC;QACDqB,MAAM,EAAE;UACJJ,UAAU,EAAE;YACRC,OAAO,EAAE;cAAElB,IAAI,EAAE;YAAS,CAAC;YAC3BsB,WAAW,EAAE;cAAEtB,IAAI,EAAE;YAAS;UAClC;QACJ,CAAC;QACDuB,MAAM,EAAE,CAAC,CAAC;QACVC,WAAW,EAAE;UACTP,UAAU,EAAE;YACRQ,SAAS,EAAE;cAAEzB,IAAI,EAAE;YAAS,CAAC;YAC7B0B,KAAK,EAAE;cAAE1B,IAAI,EAAE;YAAM,CAAC;YACtBkB,OAAO,EAAE;cAAElB,IAAI,EAAE;YAAS,CAAC;YAC3BM,OAAO,EAAE;cAAEN,IAAI,EAAE;YAAU;UAC/B;QACJ,CAAC;QACD2B,sBAAsB,EAAE;UAAEV,UAAU,EAAE;YAAEX,OAAO,EAAE;cAAEN,IAAI,EAAE;YAAU;UAAE;QAAE,CAAC;QACxE4B,eAAe,EAAE;UAAEX,UAAU,EAAE;YAAEQ,SAAS,EAAE;cAAEzB,IAAI,EAAE;YAAS,CAAC;YAAE6B,OAAO,EAAE;cAAE7B,IAAI,EAAE;YAAS;UAAE;QAAE,CAAC;QAC/F8B,iBAAiB,EAAE;UAAEb,UAAU,EAAE;YAAEQ,SAAS,EAAE;cAAEzB,IAAI,EAAE;YAAS;UAAE;QAAE;MACvE;IACJ,CAAC;IA+BD;AACJ;AACA;AACA;AACA;IACY+B,iBAAiB,WAAAC,mBAAA,EAAS;MAC9B,IAAI,CAAC,IAAI,CAACjD,aAAa,EAAE;QACrB,MAAMkD,QAAQ,GAAG,IAAI,CAACC,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,CAACA,iBAAiB,CAAC,CAAC;QAC5E,IAAID,QAAQ,EAAE;UACV9D,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,8CAA8CF,QAAQ,CAACG,OAAO,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC;UACvH,IAAI,OAAQH,QAAQ,CAASI,aAAa,KAAK,UAAU,IAAI,OAAQJ,QAAQ,CAASK,SAAS,KAAK,UAAU,EAAE;YAC5GnE,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,wEAAwE,EAAE,aAAa,CAAC;YAC7H,IAAI,CAACpD,aAAa,GAAG,IAAIV,aAAa,CAAC,IAAI,EAAE4D,QAAe,CAAC;YAC7D,IAAI,CAAClD,aAAa,CAACwD,YAAY,CAAC,CAAC;UACrC,CAAC,MAAM;YACHpE,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,2DAA2DK,MAAM,CAACC,IAAI,CAACR,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;UAC3I;QACJ;MACJ;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACWS,iBAAiB,WAAAC,mBAACV,QAAiD,EAAEW,UAAmB,EAAQ;MACnGC,wCAAA,OAAwBZ,QAAQ,EAAEW,UAAU;MAC5C,IAAI,CAACb,iBAAiB,CAAC,CAAC;MACxB,OAAO,IAAI;IACf,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACWe,WAAW,WAAAC,aAACC,KAAmB,EAAEC,WAAoB,EAAQ;MAChEC,kCAAA,OAAkBF,KAAK,EAAEC,WAAW;MACpC,MAAML,UAAU,GAAG,OAAOI,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACG,KAAK,GAAGC,SAAS;MACtE,MAAMC,QAAQ,GAAG,IAAI,CAACC,iBAAiB,CAACV,UAAU,CAAC;MACnD,IAAIS,QAAQ,EAAE;QACVA,QAAQ,CAACE,YAAY,CAAC,MAAM;UACxB,IAAI,CAACxB,iBAAiB,CAAC,CAAC;QAC5B,CAAC,CAAC;MACN;MACA,OAAO,IAAI;IACf,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACWyB,iBAAiB,WAAAC,mBAAA,EAAS;MAC7BtF,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,gDAAgD,IAAI,CAACnD,iBAAiB,EAAE,EAAE,aAAa,CAAC;MAE7H,IAAI,CAAC+C,iBAAiB,CAAC,CAAC;MAExB,IAAI,CAAC,IAAI,CAAC/C,iBAAiB,EAAE;QACzB,MAAM0E,MAAM,GAAG,IAAI,CAACC,WAAW,CAAC,kBAAkB,CAAC;QACnD,MAAMvD,QAAQ,GAAG,IAAI,CAACuD,WAAW,CAAC,UAAU,CAAC;QAC7C,MAAMzD,IAAI,GAAG,IAAI,CAACyD,WAAW,CAAC,MAAM,CAAC;QAErC,MAAMC,SAAS,GAAG,CAAC,CAACF,MAAM;QAC1B,MAAMG,OAAO,GAAG,CAAC,CAACzD,QAAQ,IAAI,CAAC,CAACF,IAAI;QAEpC/B,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,+BAA+ByB,SAAS,cAAcC,OAAO,EAAE,EAAE,aAAa,CAAC;;QAEpH;QACA,IAAID,SAAS,IAAIC,OAAO,EAAE;UACtB,IAAI,IAAI,CAACF,WAAW,CAAC,WAAW,CAAC,EAAE;YAC/BxF,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,kCAAkCyB,SAAS,cAAcC,OAAO,EAAE,EAAE,aAAa,CAAC;UAC3H;UACA;UACA;UACA;UACA,IAAI,CAAC/E,UAAU,GAAG,IAAId,aAAa,CAAC,CAAC;;UAErC;UACA;UACA,MAAM8F,KAAK,GAAG,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,aAAa,CAAC,CAAC;UAChD,KAAK,MAAMC,QAAQ,IAAIH,KAAK,EAAE;YAC1B,MAAMI,GAAG,GAAAC,kCAAA,OAAqBF,QAAQ,CAAC;YACvC,IAAIC,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAKd,SAAS,EAAE;cACnC,IAAI,CAACtE,UAAU,CAACsF,WAAW,CAACH,QAAQ,EAAEC,GAAG,CAAC;YAC9C;UACJ;;UAEA;UACA,IAAI,CAACG,cAAc,CAAC,UAAU,EAAE,IAAI,CAACvF,UAAU,CAAC;;UAEhD;UACA;UACA;UACA,MAAMiC,MAAM,GAAG,IAAI,CAACgD,WAAW,CAAC,CAAC,CAACO,SAAS,CAAC,CAAC;UAC7C,KAAK,MAAMC,SAAS,IAAIxD,MAAM,EAAE;YAC5B,IAAI,CAACjC,UAAU,CAAC0F,WAAW,CAACD,SAAS,EAAGE,MAAW,IAAK;cACpD;cACA;cACA,IAAIF,SAAS,KAAK,QAAQ,IAAIA,SAAS,KAAK,aAAa,EAAE;gBACvD,MAAMG,MAAM,GAAGD,MAAM,CAACE,aAAa,CAAC,CAAC;gBACrC,IAAID,MAAM,CAACxD,OAAO,EAAE;kBAChB0D,kCAAA,OAAkB,MAAM,EAAEF,MAAM,CAACxD,OAAO,EAAE,IAAI;kBAE9C,MAAM2D,GAAG,GAAGH,MAAM,CAACpD,WAAW,IAAIwD,IAAI,CAACC,SAAS,CAACL,MAAM,CAACxD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;kBACzE0D,kCAAA,OAAkB,UAAU,EAAEC,GAAG,EAAE,IAAI;gBAC3C;gBACA,IAAIN,SAAS,KAAK,aAAa,IAAI,IAAI,CAACxF,aAAa,EAAE;kBACnD,IAAI,CAACA,aAAa,CAACiG,iBAAiB,CAACN,MAAM,CAACjD,SAAS,EAAEiD,MAAM,CAAChD,KAAK,CAAC;gBACxE;cACJ;cACA,IAAI,CAACuD,SAAS,CAACV,SAAS,EAAEE,MAAM,CAACE,aAAa,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC;UACN;UAEA,IAAI,CAAC3F,iBAAiB,GAAG,IAAI;QACjC;MACJ;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACWoF,WAAW,WAAAc,aAACC,YAAoB,EAAEzD,KAAc,EAAE0D,kBAA4B,EAAQ;MACzF,IAAID,YAAY,KAAK,MAAM,IAAIA,YAAY,KAAK,UAAU,IAAIA,YAAY,KAAK,kBAAkB,EAAE;QAC/F,IAAI,IAAI,CAACxB,WAAW,CAAC,WAAW,CAAC,EAAE;UAC/BxF,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,iCAAiCgD,YAAY,EAAE,EAAE,aAAa,CAAC;QACxG;MACJ;MACAP,kCAAA,OAAkBO,YAAY,EAAEzD,KAAK,EAAE0D,kBAAkB;MACzD,IAAI,IAAI,CAACtG,UAAU,EAAE;QACjB,IAAI,CAACA,UAAU,CAACsF,WAAW,CAACe,YAAY,EAAEzD,KAAK,EAAE0D,kBAAkB,CAAC;MACxE,CAAC,MAAM,IAAID,YAAY,KAAK,MAAM,IAAIA,YAAY,KAAK,UAAU,IAAIA,YAAY,KAAK,kBAAkB,EAAE;QACtG,IAAI,IAAI,CAACxB,WAAW,CAAC,WAAW,CAAC,EAAE;UAC/BxF,MAAM,CAACgE,KAAK,CAAC,sBAAsB,EAAE,uCAAuCgD,YAAY,+CAA+C,EAAE,aAAa,CAAC;QAC3J;MACJ;MACA,OAAO,IAAI;IACf,CAAC;IAMD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACWE,YAAY,WAAAC,cAACC,KAAc,EAAEC,gBAAyB,EAAEC,gBAAyB,EAAQ;MAC5F,IAAI,CAAC,IAAI,CAAC3G,UAAU,EAAE;QAClB,IAAI,CAAC0E,iBAAiB,CAAC,CAAC,CAAC,CAAC;MAC9B;MACA,IAAI,CAAC1E,UAAU,EAAEuG,YAAY,CAACE,KAAK,EAAEC,gBAAgB,EAAEC,gBAAgB,CAAC;IAC5E,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACWC,aAAa,WAAAC,eAAA,EAAY;MAC5B,IAAI,CAAC,IAAI,CAAC7G,UAAU,EAAE;QAClB,OAAO,KAAK;MAChB;MACA,OAAQ,IAAI,CAACA,UAAU,CAAS4G,aAAa,CAAC,CAAC;IACnD,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACW/B,WAAW,WAAAiC,aAACT,YAAoB,EAAO;MAC1C,IAAI,IAAI,CAACrG,UAAU,KAAKqG,YAAY,KAAK,MAAM,IAAIA,YAAY,KAAK,UAAU,CAAC,EAAE;QAC7E,OAAO,IAAI,CAACrG,UAAU,CAAC6E,WAAW,CAACwB,YAAY,CAAC;MACpD;MACA,OAAAhB,kCAAA,OAAyBgB,YAAY;IACzC;EAAC;EAAA,OAlRgB5G,WAAW;AAAA","ignoreList":[]}
@@ -133,17 +133,48 @@ declare module "nz/co/siliconst/ui5/metaui/controls/DynamicHost" {
133
133
  apiVersion: number;
134
134
  render(rm: RenderManager, control: DynamicHost): void;
135
135
  };
136
+ /**
137
+ * Internal reference to the generated inner host instance.
138
+ * @private
139
+ */
136
140
  private _innerHost;
141
+ /**
142
+ * Flag indicating if the inner host has been initialized.
143
+ * @private
144
+ */
137
145
  private _initializedInner;
138
146
  /**
139
- * Standard UI5 Lifecycle Hook.
140
- * Evaluates the initial properties and spawns the appropriate inner host strategy via the HostFactory.
141
- * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners
142
- * down to the inner host perfectly transparently.
147
+ * Initializes the OData Delegate if an OData context is detected.
148
+ * This allows DynamicHost to seamlessly synchronize metadata and properties from an OData model.
149
+ * @private
143
150
  */
144
151
  private initODataDelegate;
152
+ /**
153
+ * Standard UI5 method override.
154
+ * Sets the binding context for the control and attempts to initialize the OData delegate
155
+ * if the context points to an OData model.
156
+ *
157
+ * @param {sap.ui.model.Context | null | undefined} oContext The binding context object
158
+ * @param {string} [sModelName] Optional model name
159
+ * @returns {this} The control instance for chaining
160
+ */
145
161
  setBindingContext(oContext: sap.ui.model.Context | null | undefined, sModelName?: string): this;
162
+ /**
163
+ * Standard UI5 method override.
164
+ * Binds the element to the given path and attaches a change listener to re-evaluate
165
+ * the OData delegate when the element binding resolves.
166
+ *
167
+ * @param {string | any} vPath The binding path or configuration object
168
+ * @param {object} [mParameters] Optional binding parameters
169
+ * @returns {this} The control instance for chaining
170
+ */
146
171
  bindElement(vPath: string | any, mParameters?: object): this;
172
+ /**
173
+ * Standard UI5 Lifecycle Hook.
174
+ * Evaluates the initial properties and spawns the GeneratorHost.
175
+ * It handles the complex lifecycle task of copying all bindings, raw properties, and event listeners
176
+ * down to the inner host perfectly transparently.
177
+ */
147
178
  onBeforeRendering(): void;
148
179
  /**
149
180
  * Overrides standard UI5 setProperty to act as a transparent proxy.
@@ -153,14 +184,26 @@ declare module "nz/co/siliconst/ui5/metaui/controls/DynamicHost" {
153
184
  setProperty(propertyName: string, value: unknown, suppressInvalidate?: boolean): this;
154
185
  /**
155
186
  * Programmatic API support. Routes dialog commands down to the spawned inner host.
187
+ * If the inner host has not booted yet, it forces initialization immediately.
188
+ *
189
+ * @param {string} [title="Form"] The title of the dialog
190
+ * @param {string} [submitButtonText="OK"] The text for the primary action button
191
+ * @param {string} [cancelButtonText="Cancel"] The text for the cancel button
156
192
  */
157
193
  openInDialog(title?: string, submitButtonText?: string, cancelButtonText?: string): void;
158
194
  /**
159
195
  * Proxies submission triggering down to the instantiated generator host.
196
+ * Evaluates the internal Engine validation suite and returns true if structurally sound.
197
+ *
198
+ * @returns {boolean} True if the internal payload passes schema validation, false otherwise.
160
199
  */
161
200
  triggerSubmit(): boolean;
162
201
  /**
163
202
  * Overrides standard UI5 getProperty to transparently pull extracted data from the inner host.
203
+ * Ensures that querying the DynamicHost facade for `data` always yields the freshest payload.
204
+ *
205
+ * @param {string} propertyName The name of the property to retrieve
206
+ * @returns {any} The property value
164
207
  */
165
208
  getProperty(propertyName: string): any;
166
209
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicHost.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IACjE,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAC1C,OAAO,aAAa,MAAM,2BAA2B,CAAC;IAKtD;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;QAC5C,OAAO,CAAC,UAAU,CAA8B;QAChD,OAAO,CAAC,aAAa,CAA8B;QACnD,OAAO,CAAC,iBAAiB,CAAkB;QAE3C,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0CtB;QAEF,MAAM,CAAC,QAAQ;;uBAEA,aAAa,WAAW,WAAW;UAahD;QAEF,OAAO,CAAC,UAAU,CAA8B;QAChD,OAAO,CAAC,iBAAiB,CAAkB;QAE3C;;;;;WAKG;QACH,OAAO,CAAC,iBAAiB;QAgBlB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;QAM/F,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;QAY5D,iBAAiB,IAAI,IAAI;QAmEhC;;;;WAIG;QACI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;QAqB5F;;WAEG;QACI,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI;QAO/F;;WAEG;QACI,aAAa,IAAI,OAAO;QAO/B;;WAEG;QACI,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG;KAMhD;CAEA"}
1
+ {"version":3,"file":"DynamicHost.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IACjE,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAC1C,OAAO,aAAa,MAAM,2BAA2B,CAAC;IAKtD;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;QAC5C,OAAO,CAAC,UAAU,CAA8B;QAChD,OAAO,CAAC,aAAa,CAA8B;QACnD,OAAO,CAAC,iBAAiB,CAAkB;QAE3C,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0CtB;QAEF,MAAM,CAAC,QAAQ;;uBAEA,aAAa,WAAW,WAAW;UAahD;QAEF;;;WAGG;QACH,OAAO,CAAC,UAAU,CAA8B;QAEhD;;;WAGG;QACH,OAAO,CAAC,iBAAiB,CAAkB;QAE3C;;;;WAIG;QACH,OAAO,CAAC,iBAAiB;QAgBzB;;;;;;;;WAQG;QACI,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;QAMtG;;;;;;;;WAQG;QACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;QAYnE;;;;;WAKG;QACI,iBAAiB,IAAI,IAAI;QAmEhC;;;;WAIG;QACI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;QAqB5F;;;;;;;WAOG;QACI,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI;QAO/F;;;;;WAKG;QACI,aAAa,IAAI,OAAO;QAO/B;;;;;;WAMG;QACI,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG;KAMhD;CAEA"}