@siliconst/metaui 1.2.0 → 1.4.5

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 (607) hide show
  1. package/README.md +102 -33
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js +70 -0
  4. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -0
  5. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.d.ts +67 -0
  6. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.d.ts.map +1 -0
  7. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js +2 -0
  8. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -0
  9. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +58 -0
  10. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js +28 -0
  11. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -0
  12. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts +16 -0
  13. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -0
  14. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js +2 -0
  15. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -0
  16. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +28 -0
  17. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +142 -0
  18. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -0
  19. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts +33 -0
  20. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts.map +1 -0
  21. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +2 -0
  22. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -0
  23. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +164 -0
  24. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +305 -0
  25. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -0
  26. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +168 -0
  27. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -0
  28. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +2 -0
  29. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -0
  30. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +247 -0
  31. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +73 -0
  32. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -0
  33. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +32 -0
  34. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -0
  35. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +2 -0
  36. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -0
  37. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +86 -0
  38. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +60 -0
  39. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -0
  40. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +32 -0
  41. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -0
  42. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +2 -0
  43. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -0
  44. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +61 -0
  45. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +157 -0
  46. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -0
  47. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +33 -0
  48. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -0
  49. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +2 -0
  50. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -0
  51. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +169 -0
  52. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +160 -0
  53. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -0
  54. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +28 -0
  55. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -0
  56. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +2 -0
  57. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -0
  58. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +185 -0
  59. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +443 -0
  60. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -0
  61. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +227 -0
  62. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -0
  63. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +2 -0
  64. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -0
  65. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +421 -0
  66. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +103 -0
  67. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -0
  68. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +32 -0
  69. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -0
  70. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +2 -0
  71. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -0
  72. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +119 -0
  73. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +64 -0
  74. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -0
  75. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +21 -0
  76. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -0
  77. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +2 -0
  78. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -0
  79. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +64 -0
  80. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js +122 -0
  81. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -0
  82. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +49 -0
  83. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -0
  84. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js +2 -0
  85. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -0
  86. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +118 -0
  87. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +120 -0
  88. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -0
  89. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +45 -0
  90. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -0
  91. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +2 -0
  92. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -0
  93. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +131 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +40 -15
  95. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +27 -7
  97. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
  100. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +41 -15
  101. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +78 -0
  102. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -0
  103. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts +27 -0
  104. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts.map +1 -0
  105. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +2 -0
  106. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -0
  107. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +79 -0
  108. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +159 -43
  109. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  110. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +64 -3
  111. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  114. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +166 -43
  115. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js +32 -0
  116. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js.map +1 -0
  117. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts +16 -0
  118. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts.map +1 -0
  119. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js +2 -0
  120. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js.map +1 -0
  121. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.ts +26 -0
  122. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +123 -0
  123. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -0
  124. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts +49 -0
  125. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -0
  126. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +2 -0
  127. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -0
  128. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +106 -0
  129. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +104 -25
  130. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +21 -13
  132. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  135. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +110 -21
  136. package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js +79 -0
  137. package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js.map +1 -0
  138. package/src/nz/co/siliconst/ui5/metaui/core/Registry.d.ts +43 -0
  139. package/src/nz/co/siliconst/ui5/metaui/core/Registry.d.ts.map +1 -0
  140. package/src/nz/co/siliconst/ui5/metaui/core/Registry.js +2 -0
  141. package/src/nz/co/siliconst/ui5/metaui/core/Registry.js.map +1 -0
  142. package/src/nz/co/siliconst/ui5/metaui/core/Registry.ts +70 -0
  143. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +116 -21
  144. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +11 -1
  146. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +115 -21
  150. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +54 -0
  151. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -0
  152. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts +11 -0
  153. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -0
  154. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +2 -0
  155. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -0
  156. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +53 -0
  157. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +88 -2
  158. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +15 -1
  160. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  162. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  163. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +103 -1
  164. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager-dbg.js.map +1 -1
  165. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts +7 -8
  166. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts.map +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.ts +7 -7
  168. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline-dbg.js +2 -0
  169. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline-dbg.js.map +1 -0
  170. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline.d.ts +38 -0
  171. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline.d.ts.map +1 -0
  172. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline.js +2 -0
  173. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline.js.map +1 -0
  174. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPipeline.ts +39 -0
  175. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  176. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +38 -2
  177. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +43 -2
  179. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +32 -3
  181. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +35 -3
  183. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js +148 -0
  184. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js.map +1 -0
  185. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts +27 -0
  186. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts.map +1 -0
  187. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.js +2 -0
  188. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.js.map +1 -0
  189. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.ts +139 -0
  190. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +136 -61
  191. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts +19 -12
  193. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  195. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +135 -71
  197. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +111 -51
  198. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  199. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts +21 -8
  200. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +123 -65
  204. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js +129 -0
  205. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js.map +1 -0
  206. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts +28 -0
  207. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts.map +1 -0
  208. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.js +2 -0
  209. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.js.map +1 -0
  210. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.ts +127 -0
  211. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +17 -12
  212. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +73 -25
  214. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/library.d.ts +1 -0
  216. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  218. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  219. package/src/nz/co/siliconst/ui5/metaui/library.ts +25 -12
  220. package/src/nz/co/siliconst/ui5/metaui/manifest.json +8 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js +58 -0
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -0
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts +22 -0
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -0
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js +2 -0
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -0
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +57 -0
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin-dbg.js +55 -0
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin-dbg.js.map +1 -0
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin.d.ts +21 -0
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin.d.ts.map +1 -0
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin.js +2 -0
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin.js.map +1 -0
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin.ts +54 -0
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin-dbg.js +46 -0
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin-dbg.js.map +1 -0
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin.d.ts +23 -0
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin.d.ts.map +1 -0
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin.js +2 -0
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin.js.map +1 -0
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin.ts +45 -0
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +74 -0
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -0
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +15 -0
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -0
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +2 -0
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -0
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +80 -0
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +75 -0
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -0
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +12 -0
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -0
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +2 -0
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -0
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +83 -0
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +174 -0
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -0
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +78 -0
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -0
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +2 -0
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -0
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +165 -0
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +79 -0
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -0
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +36 -0
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -0
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +2 -0
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -0
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +77 -0
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +60 -0
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -0
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +11 -0
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -0
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +2 -0
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -0
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +56 -0
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +122 -0
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -0
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +24 -0
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -0
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +2 -0
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -0
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +125 -0
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/{DatePlugin-dbg.js → controls/DatePlugin-dbg.js} +29 -20
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -0
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/{DatePlugin.d.ts → controls/DatePlugin.d.ts} +4 -4
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -0
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +2 -0
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -0
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +74 -0
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/{DateTimePlugin-dbg.js → controls/DateTimePlugin-dbg.js} +30 -20
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -0
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/{DateTimePlugin.d.ts → controls/DateTimePlugin.d.ts} +4 -4
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -0
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +2 -0
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -0
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +75 -0
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +109 -0
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -0
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +37 -0
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -0
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +2 -0
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -0
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +105 -0
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +65 -0
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -0
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +21 -0
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -0
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +2 -0
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -0
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +64 -0
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +59 -0
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -0
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +11 -0
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -0
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +2 -0
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -0
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +56 -0
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +45 -0
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -0
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +22 -0
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -0
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js +2 -0
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -0
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +42 -0
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +74 -0
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -0
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +22 -0
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -0
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +2 -0
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -0
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +73 -0
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/{NumberPlugin-dbg.js → controls/NumberPlugin-dbg.js} +21 -16
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -0
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/{NumberPlugin.d.ts → controls/NumberPlugin.d.ts} +4 -4
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -0
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +2 -0
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -0
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +62 -0
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +74 -0
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -0
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +17 -0
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -0
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +2 -0
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -0
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +81 -0
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +61 -0
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -0
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +21 -0
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -0
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +2 -0
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -0
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +62 -0
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +64 -0
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -0
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +16 -0
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -0
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +2 -0
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -0
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +67 -0
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +58 -0
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -0
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +11 -0
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -0
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +2 -0
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -0
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +55 -0
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +64 -0
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -0
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +21 -0
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -0
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +2 -0
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -0
  374. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +65 -0
  375. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +87 -0
  376. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -0
  377. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +37 -0
  378. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -0
  379. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +2 -0
  380. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -0
  381. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +85 -0
  382. package/src/nz/co/siliconst/ui5/metaui/plugins/{SwitchPlugin-dbg.js → controls/SwitchPlugin-dbg.js} +24 -6
  383. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -0
  384. package/src/nz/co/siliconst/ui5/metaui/plugins/{SwitchPlugin.d.ts → controls/SwitchPlugin.d.ts} +4 -4
  385. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -0
  386. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +2 -0
  387. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -0
  388. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +62 -0
  389. package/src/nz/co/siliconst/ui5/metaui/plugins/{TextAreaPlugin-dbg.js → controls/TextAreaPlugin-dbg.js} +20 -14
  390. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -0
  391. package/src/nz/co/siliconst/ui5/metaui/plugins/{TextAreaPlugin.d.ts → controls/TextAreaPlugin.d.ts} +4 -4
  392. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -0
  393. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +2 -0
  394. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -0
  395. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +63 -0
  396. package/src/nz/co/siliconst/ui5/metaui/plugins/{TimePlugin-dbg.js → controls/TimePlugin-dbg.js} +30 -25
  397. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -0
  398. package/src/nz/co/siliconst/ui5/metaui/plugins/{TimePlugin.d.ts → controls/TimePlugin.d.ts} +4 -4
  399. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -0
  400. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +2 -0
  401. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -0
  402. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +76 -0
  403. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +62 -0
  404. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -0
  405. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +11 -0
  406. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -0
  407. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +2 -0
  408. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -0
  409. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +59 -0
  410. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js +94 -0
  411. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -0
  412. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts +29 -0
  413. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -0
  414. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js +2 -0
  415. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -0
  416. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +102 -0
  417. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +60 -0
  418. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -0
  419. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts +22 -0
  420. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -0
  421. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +2 -0
  422. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -0
  423. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +57 -0
  424. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +106 -0
  425. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -0
  426. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +22 -0
  427. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -0
  428. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +2 -0
  429. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -0
  430. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +101 -0
  431. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js +77 -0
  432. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -0
  433. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts +25 -0
  434. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -0
  435. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js +2 -0
  436. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -0
  437. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +86 -0
  438. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin-dbg.js +36 -0
  439. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin-dbg.js.map +1 -0
  440. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts +25 -0
  441. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts.map +1 -0
  442. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.js +2 -0
  443. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.js.map +1 -0
  444. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.ts +36 -0
  445. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin-dbg.js +32 -0
  446. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin-dbg.js.map +1 -0
  447. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts +19 -0
  448. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts.map +1 -0
  449. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.js +2 -0
  450. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.js.map +1 -0
  451. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.ts +31 -0
  452. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js +32 -0
  453. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js.map +1 -0
  454. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts +17 -0
  455. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts.map +1 -0
  456. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js +2 -0
  457. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js.map +1 -0
  458. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.ts +27 -0
  459. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js +31 -0
  460. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js.map +1 -0
  461. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts +18 -0
  462. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts.map +1 -0
  463. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js +2 -0
  464. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js.map +1 -0
  465. package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.ts +23 -0
  466. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js +45 -0
  467. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js.map +1 -0
  468. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts +24 -0
  469. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts.map +1 -0
  470. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js +2 -0
  471. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js.map +1 -0
  472. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.ts +30 -0
  473. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin-dbg.js +42 -0
  474. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin-dbg.js.map +1 -0
  475. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts +18 -0
  476. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts.map +1 -0
  477. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.js +2 -0
  478. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.js.map +1 -0
  479. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.ts +29 -0
  480. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin-dbg.js +41 -0
  481. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin-dbg.js.map +1 -0
  482. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts +17 -0
  483. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts.map +1 -0
  484. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.js +2 -0
  485. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.js.map +1 -0
  486. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.ts +25 -0
  487. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js +51 -0
  488. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js.map +1 -0
  489. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts +17 -0
  490. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts.map +1 -0
  491. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js +2 -0
  492. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js.map +1 -0
  493. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.ts +33 -0
  494. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js +48 -0
  495. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js.map +1 -0
  496. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts +17 -0
  497. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts.map +1 -0
  498. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js +2 -0
  499. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js.map +1 -0
  500. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.ts +32 -0
  501. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js +46 -0
  502. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js.map +1 -0
  503. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts +17 -0
  504. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts.map +1 -0
  505. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js +2 -0
  506. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js.map +1 -0
  507. package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.ts +29 -0
  508. package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js +83 -0
  509. package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -0
  510. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts +29 -0
  511. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -0
  512. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js +2 -0
  513. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -0
  514. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +75 -0
  515. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js +0 -300
  516. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js.map +0 -1
  517. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts +0 -130
  518. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts.map +0 -1
  519. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js +0 -2
  520. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js.map +0 -1
  521. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.ts +0 -292
  522. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js +0 -66
  523. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js.map +0 -1
  524. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts +0 -40
  525. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts.map +0 -1
  526. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js +0 -2
  527. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js.map +0 -1
  528. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.ts +0 -60
  529. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js +0 -2
  530. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js.map +0 -1
  531. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.d.ts +0 -29
  532. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.d.ts.map +0 -1
  533. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.js +0 -2
  534. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.js.map +0 -1
  535. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.ts +0 -29
  536. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js +0 -24
  537. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js.map +0 -1
  538. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts +0 -15
  539. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts.map +0 -1
  540. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js +0 -2
  541. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js.map +0 -1
  542. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.ts +0 -22
  543. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js +0 -68
  544. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js.map +0 -1
  545. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts +0 -15
  546. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts.map +0 -1
  547. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js +0 -2
  548. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js.map +0 -1
  549. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.ts +0 -71
  550. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js +0 -55
  551. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js.map +0 -1
  552. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts +0 -24
  553. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts.map +0 -1
  554. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js +0 -2
  555. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js.map +0 -1
  556. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.ts +0 -56
  557. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js +0 -42
  558. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js.map +0 -1
  559. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts +0 -18
  560. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts.map +0 -1
  561. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js +0 -2
  562. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js.map +0 -1
  563. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.ts +0 -41
  564. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin-dbg.js.map +0 -1
  565. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.d.ts.map +0 -1
  566. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js +0 -2
  567. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js.map +0 -1
  568. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.ts +0 -69
  569. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin-dbg.js.map +0 -1
  570. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.d.ts.map +0 -1
  571. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js +0 -2
  572. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js.map +0 -1
  573. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.ts +0 -68
  574. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js +0 -67
  575. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js.map +0 -1
  576. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts +0 -18
  577. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts.map +0 -1
  578. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js +0 -2
  579. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js.map +0 -1
  580. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.ts +0 -65
  581. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin-dbg.js.map +0 -1
  582. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.d.ts.map +0 -1
  583. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js +0 -2
  584. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js.map +0 -1
  585. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.ts +0 -56
  586. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js +0 -57
  587. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js.map +0 -1
  588. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts +0 -18
  589. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts.map +0 -1
  590. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js +0 -2
  591. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js.map +0 -1
  592. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.ts +0 -58
  593. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin-dbg.js.map +0 -1
  594. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.d.ts.map +0 -1
  595. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js +0 -2
  596. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js.map +0 -1
  597. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.ts +0 -42
  598. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin-dbg.js.map +0 -1
  599. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.d.ts.map +0 -1
  600. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js +0 -2
  601. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js.map +0 -1
  602. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.ts +0 -58
  603. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin-dbg.js.map +0 -1
  604. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.d.ts.map +0 -1
  605. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js +0 -2
  606. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js.map +0 -1
  607. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.ts +0 -71
@@ -1,19 +1,32 @@
1
- sap.ui.define(["sap/ui/layout/form/SimpleForm", "sap/m/Label", "sap/ui/core/Title", "../core/PluginRegistry"], function (SimpleForm, Label, Title, ___core_PluginRegistry) {
1
+ sap.ui.define(["sap/ui/layout/form/SimpleForm", "sap/m/Label", "sap/ui/core/Title", "sap/m/VBox", "../core/SchemaNormalizer", "../utils/Logger"], function (SimpleForm, Label, Title, VBox, ___core_SchemaNormalizer, ___utils_Logger) {
2
2
  "use strict";
3
3
 
4
- const PluginRegistry = ___core_PluginRegistry["PluginRegistry"];
4
+ const SchemaNormalizer = ___core_SchemaNormalizer["SchemaNormalizer"];
5
+ const Logger = ___utils_Logger["Logger"];
6
+ /**
7
+ * Layout Manager responsible for generating a fully responsive SAP Fiori SimpleForm.
8
+ * It traverses the `uiLayout` tree defined in the schema to build the form groups and fields,
9
+ * completely separating visual orchestration from data modeling.
10
+ * @namespace nz.co.siliconst.ui5.metaui.layouts
11
+ * @public
12
+ */
5
13
  class FormLayout {
6
14
  /**
7
- * Builds a SimpleForm with ResponsiveGridLayout, injecting the requested plugins.
8
- * @param properties The dictionary of fields to render.
9
- * @param modelName The dynamic model name.
10
- * @param formTitle Optional title for the form block.
11
- * @param trackPlugin Optional callback to track instantiated plugins.
15
+ * Renders the JSON Schema properties into a UI5 SimpleForm using the uiLayout definitions.
16
+ *
17
+ * @param schema The active JSON schema subset.
18
+ * @param modelName The bound UI5 model name.
19
+ * @param engine The central orchestrator for delegating plugin generation.
20
+ * @param onSubmit Optional submit hook.
21
+ * @returns {Control} The VBox wrapper containing the generated form.
12
22
  */
13
- static build(properties, modelName = "meta", formTitle, trackPlugin) {
23
+ render(schema, modelName, engine, onSubmit) {
24
+ const container = new VBox({
25
+ renderType: "Bare"
26
+ });
14
27
  const form = new SimpleForm({
15
28
  editable: true,
16
- title: formTitle,
29
+ title: schema.title,
17
30
  layout: "ResponsiveGridLayout",
18
31
  labelSpanXL: 4,
19
32
  labelSpanL: 4,
@@ -29,65 +42,127 @@ sap.ui.define(["sap/ui/layout/form/SimpleForm", "sap/m/Label", "sap/ui/core/Titl
29
42
  columnsM: 1,
30
43
  singleContainerFullSize: false
31
44
  });
32
- const registry = PluginRegistry.getInstance();
33
-
34
- // Group fields by their ui.group directive
35
- const groups = {};
36
- const DEFAULT_GROUP = "__DEFAULT__";
37
- for (const key of Object.keys(properties)) {
38
- const meta = properties[key];
39
- const groupName = meta.ui?.group || DEFAULT_GROUP;
40
- if (!groups[groupName]) groups[groupName] = [];
41
- groups[groupName].push({
42
- key,
43
- meta
44
- });
45
+ if (!schema.uiLayout || !Array.isArray(schema.uiLayout)) {
46
+ Logger.warn("[MetaUI] Missing 'uiLayout' array in schema. Form will not render any fields.");
47
+ container.addItem(form);
48
+ return container;
45
49
  }
50
+ const tableElements = [];
51
+ let hasFormFields = false;
46
52
 
47
- // Render groups
48
- for (const groupName of Object.keys(groups)) {
49
- if (groupName !== DEFAULT_GROUP) {
50
- form.addContent(new Title({
51
- text: groupName
52
- }));
53
- }
54
- groups[groupName].forEach(field => {
55
- try {
56
- const label = new Label({
57
- text: field.meta.ui?.label || field.key,
58
- required: field.meta.required
59
- });
53
+ // Recursively render layout elements
54
+ const renderElement = element => {
55
+ if (element.type === "Group") {
56
+ if (element.label) {
57
+ form.addContent(new Title({
58
+ text: element.label
59
+ }));
60
+ }
61
+ if (element.elements && Array.isArray(element.elements)) {
62
+ element.elements.forEach(renderElement);
63
+ }
64
+ } else if (element.type === "Control") {
65
+ if (!element.scope || !element.scope.startsWith("#/properties/")) {
66
+ Logger.error(`[MetaUI] Invalid scope '${element.scope}' in uiLayout Control.`, "", "FormLayout");
67
+ return;
68
+ }
69
+ const {
70
+ meta,
71
+ bindingPath,
72
+ propKey
73
+ } = SchemaNormalizer.resolveScope(schema, element.scope);
74
+ if (!meta) {
75
+ Logger.error(`[MetaUI] Property '${propKey}' not found in schema definitions.`, "", "FormLayout");
76
+ return;
77
+ }
60
78
 
61
- // Attach visibility condition to label and control container logic
62
- if (field.meta.ui?.visibleOn) {
63
- const expr = `{= ${field.meta.ui.visibleOn.replace(/\$root\./g, `${modelName}>/`).replace(/\./g, '/')} }`;
64
- label.bindProperty("visible", {
65
- parts: [{
66
- path: "meta>/"
67
- }],
68
- formatter: () => false
69
- }); // temporary, condition engine does this usually
70
- }
71
- const plugin = registry.getPlugin(field.meta.type, field.meta.ui?.widget);
72
- if (trackPlugin) trackPlugin(plugin);
73
- const control = plugin.render(field.meta, `/${field.key}`, modelName);
74
- if (field.meta.ui?.fullWidth) {
75
- sap.ui.require(["sap/ui/layout/GridData"], GridData => {
76
- control.setLayoutData(new GridData({
77
- span: "XL12 L12 M12 S12"
78
- }));
79
- });
80
- }
81
- form.addContent(label);
82
- form.addContent(control);
83
- } catch (error) {
84
- sap.ui.require(["sap/base/Log"], Log => {
85
- if (Log) Log.error(`[MetaUI] Failed to render field ${field.key}`, error.message, "FormLayout");
79
+ // Architectural Boundary: Separate Field Controls (Plugins) from Sub-Layouts (LayoutManagers)
80
+ // A property is delegated to a Sub-Layout Manager (Table) ONLY if it represents a collection of complex objects.
81
+ // Collections of primitives, or explicitly assigned widgets (like multiSelect), remain in the Form as Field Plugins.
82
+ const isCollectionOfRecords = meta.items?.type === "object" || meta.items?.properties;
83
+ const hasExplicitWidget = !!meta.ui?.widget;
84
+ const isSubLayout = meta.type === "array" && isCollectionOfRecords && !hasExplicitWidget;
85
+ if (isSubLayout) {
86
+ Logger.debug("[MetaUI FormLayout]", `Routing property '${propKey}' to Table Sub-Layout.`, "FormLayout");
87
+ tableElements.push({
88
+ scope: bindingPath,
89
+ meta,
90
+ label: element.label
86
91
  });
92
+ } else {
93
+ hasFormFields = true;
94
+ Logger.debug("[MetaUI FormLayout]", `Rendering scalar field '${bindingPath}'.`, "FormLayout");
95
+ this._renderScalarField(form, element, bindingPath, meta, modelName, engine);
96
+ }
97
+ } else {
98
+ Logger.warn(`[MetaUI] Unsupported layout element type '${element.type}'.`, "", "FormLayout");
99
+ }
100
+ };
101
+
102
+ // Render everything defined in the layout
103
+ schema.uiLayout.forEach(renderElement);
104
+ if (hasFormFields) {
105
+ container.addItem(form);
106
+ }
107
+
108
+ // Render array/table sub-layouts full width below the form
109
+ tableElements.forEach(field => {
110
+ try {
111
+ const subSchema = {
112
+ type: "array",
113
+ title: field.label || field.meta.ui?.label || field.scope,
114
+ items: field.meta.items || {
115
+ type: "object",
116
+ properties: {}
117
+ },
118
+ uiLayout: field.meta.items?.uiLayout // Pass down sub-layout if available
119
+ };
120
+ const control = engine.generateLayout(subSchema, modelName, `/${field.scope}`);
121
+ if (control) {
122
+ control.addStyleClass("sapUiSmallMarginTop");
123
+ container.addItem(control);
87
124
  }
125
+ } catch (error) {
126
+ const msg = error.message;
127
+ Logger.error(`[MetaUI] Failed to render array field ${field.scope}`, msg, "FormLayout");
128
+ Logger.showErrorPopup(`Failed to render array field '${field.scope}'.\n\nDetails: ${msg}`);
129
+ }
130
+ });
131
+ return container;
132
+ }
133
+ _renderScalarField(form, element, propKey, meta, modelName, engine) {
134
+ try {
135
+ const labelText = element.label || meta.ui?.label || propKey;
136
+ const label = new Label({
137
+ text: labelText,
138
+ required: meta.required
88
139
  });
140
+
141
+ // Override widget if specified in the layout element
142
+ const effectiveMeta = {
143
+ ...meta
144
+ };
145
+ if (element.widget) {
146
+ effectiveMeta.ui = {
147
+ ...meta.ui,
148
+ widget: element.widget
149
+ };
150
+ }
151
+ const control = engine.generateField(effectiveMeta, `/${propKey}`, modelName);
152
+ if (effectiveMeta.ui?.fullWidth) {
153
+ sap.ui.require(["sap/ui/layout/GridData"], GridData => {
154
+ control.setLayoutData(new GridData({
155
+ span: "XL12 L12 M12 S12"
156
+ }));
157
+ });
158
+ }
159
+ form.addContent(label);
160
+ form.addContent(control);
161
+ } catch (error) {
162
+ const msg = error.message;
163
+ Logger.error(`[MetaUI] Failed to render field ${propKey}`, msg, "FormLayout");
164
+ Logger.showErrorPopup(`Failed to render field '${propKey}'.\n\nDetails: ${msg}`);
89
165
  }
90
- return form;
91
166
  }
92
167
  }
93
168
  var __exports = {
@@ -1 +1 @@
1
- {"version":3,"file":"FormLayout-dbg.js","names":["PluginRegistry","___core_PluginRegistry","FormLayout","build","properties","modelName","formTitle","trackPlugin","form","SimpleForm","editable","title","layout","labelSpanXL","labelSpanL","labelSpanM","labelSpanS","adjustLabelSpan","emptySpanXL","emptySpanL","emptySpanM","emptySpanS","columnsXL","columnsL","columnsM","singleContainerFullSize","registry","getInstance","groups","DEFAULT_GROUP","key","Object","keys","meta","groupName","ui","group","push","addContent","Title","text","forEach","field","label","Label","required","visibleOn","expr","replace","bindProperty","parts","path","formatter","plugin","getPlugin","type","widget","control","render","fullWidth","sap","require","GridData","setLayoutData","span","error","Log","message","__exports","__esModule"],"sources":["FormLayout.ts"],"sourcesContent":["/**\n * @file FormLayout.ts\n * @description Generates a fully responsive SAP Fiori Form layout (SimpleForm).\n */\n\nimport SimpleForm from \"sap/ui/layout/form/SimpleForm\";\nimport Label from \"sap/m/Label\";\nimport Title from \"sap/ui/core/Title\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"../core/PluginRegistry\";\nimport { IPlugin } from \"../interfaces/IPlugin\";\n\nexport class FormLayout {\n /**\n * Builds a SimpleForm with ResponsiveGridLayout, injecting the requested plugins.\n * @param properties The dictionary of fields to render.\n * @param modelName The dynamic model name.\n * @param formTitle Optional title for the form block.\n * @param trackPlugin Optional callback to track instantiated plugins.\n */\n public static build(properties: Record<string, IPropertyMetadata>, modelName: string = \"meta\", formTitle?: string, trackPlugin?: (plugin: IPlugin) => void): SimpleForm {\n const form = new SimpleForm({\n editable: true,\n title: formTitle,\n layout: \"ResponsiveGridLayout\",\n labelSpanXL: 4,\n labelSpanL: 4,\n labelSpanM: 4,\n labelSpanS: 12,\n adjustLabelSpan: false,\n emptySpanXL: 0,\n emptySpanL: 0,\n emptySpanM: 0,\n emptySpanS: 0,\n columnsXL: 1,\n columnsL: 1,\n columnsM: 1,\n singleContainerFullSize: false\n });\n\n const registry = PluginRegistry.getInstance();\n \n // Group fields by their ui.group directive\n const groups: Record<string, { key: string; meta: IPropertyMetadata }[]> = {};\n const DEFAULT_GROUP = \"__DEFAULT__\";\n \n for (const key of Object.keys(properties)) {\n const meta = properties[key];\n const groupName = meta.ui?.group || DEFAULT_GROUP;\n if (!groups[groupName]) groups[groupName] = [];\n groups[groupName].push({ key, meta });\n }\n\n // Render groups\n for (const groupName of Object.keys(groups)) {\n if (groupName !== DEFAULT_GROUP) {\n form.addContent(new Title({ text: groupName }));\n }\n \n groups[groupName].forEach((field) => {\n try {\n const label = new Label({\n text: field.meta.ui?.label || field.key,\n required: field.meta.required\n });\n\n // Attach visibility condition to label and control container logic\n if (field.meta.ui?.visibleOn) {\n const expr = `{= ${field.meta.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n label.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false}); // temporary, condition engine does this usually\n }\n\n const plugin = registry.getPlugin(field.meta.type, field.meta.ui?.widget);\n if (trackPlugin) trackPlugin(plugin);\n const control = plugin.render(field.meta, `/${field.key}`, modelName);\n\n if (field.meta.ui?.fullWidth) {\n sap.ui.require([\"sap/ui/layout/GridData\"], (GridData: any) => {\n control.setLayoutData(new GridData({\n span: \"XL12 L12 M12 S12\"\n }));\n });\n }\n\n form.addContent(label);\n form.addContent(control);\n } catch (error) {\n sap.ui.require([\"sap/base/Log\"], (Log: any) => {\n if (Log) Log.error(`[MetaUI] Failed to render field ${field.key}`, (error as Error).message, \"FormLayout\");\n });\n }\n });\n }\n\n return form;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormLayout-dbg.js","names":["SchemaNormalizer","___core_SchemaNormalizer","Logger","___utils_Logger","FormLayout","render","schema","modelName","engine","onSubmit","container","VBox","renderType","form","SimpleForm","editable","title","layout","labelSpanXL","labelSpanL","labelSpanM","labelSpanS","adjustLabelSpan","emptySpanXL","emptySpanL","emptySpanM","emptySpanS","columnsXL","columnsL","columnsM","singleContainerFullSize","uiLayout","Array","isArray","warn","addItem","tableElements","hasFormFields","renderElement","element","type","label","addContent","Title","text","elements","forEach","scope","startsWith","error","meta","bindingPath","propKey","resolveScope","isCollectionOfRecords","items","properties","hasExplicitWidget","ui","widget","isSubLayout","debug","push","_renderScalarField","field","subSchema","control","generateLayout","addStyleClass","msg","message","showErrorPopup","labelText","Label","required","effectiveMeta","generateField","fullWidth","sap","require","GridData","setLayoutData","span","__exports","__esModule"],"sources":["FormLayout.ts"],"sourcesContent":["/**\n * @file FormLayout.ts\n * @description Generates a fully responsive SAP Fiori Form layout (SimpleForm).\n */\n\nimport SimpleForm from \"sap/ui/layout/form/SimpleForm\";\nimport Label from \"sap/m/Label\";\nimport Title from \"sap/ui/core/Title\";\nimport VBox from \"sap/m/VBox\";\nimport { IPropertyMetadata, ISchema, ILayoutElement } from \"../interfaces/ISchema\";\nimport { ILayoutManager } from \"../interfaces/ILayoutManager\";\nimport { Engine } from \"../core/Engine\";\nimport { SchemaNormalizer } from \"../core/SchemaNormalizer\";\nimport { Logger } from \"../utils/Logger\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Layout Manager responsible for generating a fully responsive SAP Fiori SimpleForm.\n * It traverses the `uiLayout` tree defined in the schema to build the form groups and fields,\n * completely separating visual orchestration from data modeling.\n * @namespace nz.co.siliconst.ui5.metaui.layouts\n * @public\n */\nexport class FormLayout implements ILayoutManager {\n /**\n * Renders the JSON Schema properties into a UI5 SimpleForm using the uiLayout definitions.\n * \n * @param schema The active JSON schema subset.\n * @param modelName The bound UI5 model name.\n * @param engine The central orchestrator for delegating plugin generation.\n * @param onSubmit Optional submit hook.\n * @returns {Control} The VBox wrapper containing the generated form.\n */\n public render(schema: ISchema, modelName: string, engine: Engine, onSubmit?: () => void): Control {\n const container = new VBox({ renderType: \"Bare\" });\n const form = new SimpleForm({\n editable: true,\n title: schema.title,\n layout: \"ResponsiveGridLayout\",\n labelSpanXL: 4, labelSpanL: 4, labelSpanM: 4, labelSpanS: 12,\n adjustLabelSpan: false,\n emptySpanXL: 0, emptySpanL: 0, emptySpanM: 0, emptySpanS: 0,\n columnsXL: 1, columnsL: 1, columnsM: 1,\n singleContainerFullSize: false\n });\n\n if (!schema.uiLayout || !Array.isArray(schema.uiLayout)) {\n Logger.warn(\"[MetaUI] Missing 'uiLayout' array in schema. Form will not render any fields.\");\n container.addItem(form);\n return container;\n }\n\n const tableElements: { scope: string, meta: IPropertyMetadata, label?: string }[] = [];\n let hasFormFields = false;\n\n // Recursively render layout elements\n const renderElement = (element: ILayoutElement) => {\n if (element.type === \"Group\") {\n if (element.label) {\n form.addContent(new Title({ text: element.label }));\n }\n \n if (element.elements && Array.isArray(element.elements)) {\n element.elements.forEach(renderElement);\n }\n } else if (element.type === \"Control\") {\n if (!element.scope || !element.scope.startsWith(\"#/properties/\")) {\n Logger.error(`[MetaUI] Invalid scope '${element.scope}' in uiLayout Control.`, \"\", \"FormLayout\");\n return;\n }\n \n const { meta, bindingPath, propKey } = SchemaNormalizer.resolveScope(schema, element.scope);\n \n if (!meta) {\n Logger.error(`[MetaUI] Property '${propKey}' not found in schema definitions.`, \"\", \"FormLayout\");\n return;\n }\n\n // Architectural Boundary: Separate Field Controls (Plugins) from Sub-Layouts (LayoutManagers)\n // A property is delegated to a Sub-Layout Manager (Table) ONLY if it represents a collection of complex objects.\n // Collections of primitives, or explicitly assigned widgets (like multiSelect), remain in the Form as Field Plugins.\n const isCollectionOfRecords = meta.items?.type === \"object\" || meta.items?.properties;\n const hasExplicitWidget = !!meta.ui?.widget;\n const isSubLayout = meta.type === \"array\" && isCollectionOfRecords && !hasExplicitWidget;\n\n if (isSubLayout) {\n Logger.debug(\"[MetaUI FormLayout]\", `Routing property '${propKey}' to Table Sub-Layout.`, \"FormLayout\");\n tableElements.push({ scope: bindingPath, meta, label: element.label });\n } else {\n hasFormFields = true;\n Logger.debug(\"[MetaUI FormLayout]\", `Rendering scalar field '${bindingPath}'.`, \"FormLayout\");\n this._renderScalarField(form, element, bindingPath, meta, modelName, engine);\n }\n } else {\n Logger.warn(`[MetaUI] Unsupported layout element type '${element.type}'.`, \"\", \"FormLayout\");\n }\n };\n\n // Render everything defined in the layout\n schema.uiLayout.forEach(renderElement);\n\n if (hasFormFields) {\n container.addItem(form);\n }\n\n // Render array/table sub-layouts full width below the form\n tableElements.forEach(field => {\n try {\n const subSchema = {\n type: \"array\",\n title: field.label || field.meta.ui?.label || field.scope,\n items: field.meta.items || { type: \"object\", properties: {} },\n uiLayout: field.meta.items?.uiLayout // Pass down sub-layout if available\n };\n \n const control = engine.generateLayout(subSchema as ISchema, modelName, `/${field.scope}`);\n if (control) {\n control.addStyleClass(\"sapUiSmallMarginTop\");\n container.addItem(control);\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] Failed to render array field ${field.scope}`, msg, \"FormLayout\");\n Logger.showErrorPopup(`Failed to render array field '${field.scope}'.\\n\\nDetails: ${msg}`);\n }\n });\n\n return container;\n }\n\n private _renderScalarField(form: SimpleForm, element: ILayoutElement, propKey: string, meta: IPropertyMetadata, modelName: string, engine: Engine): void {\n try {\n const labelText = element.label || meta.ui?.label || propKey;\n const label = new Label({\n text: labelText,\n required: meta.required\n });\n\n // Override widget if specified in the layout element\n const effectiveMeta = { ...meta };\n if (element.widget) {\n effectiveMeta.ui = { ...meta.ui, widget: element.widget };\n }\n\n const control = engine.generateField(effectiveMeta, `/${propKey}`, modelName);\n\n if (effectiveMeta.ui?.fullWidth) {\n sap.ui.require([\"sap/ui/layout/GridData\"], (GridData: any) => {\n control.setLayoutData(new GridData({ span: \"XL12 L12 M12 S12\" }));\n });\n }\n\n form.addContent(label);\n form.addContent(control);\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] Failed to render field ${propKey}`, msg, \"FormLayout\");\n Logger.showErrorPopup(`Failed to render field '${propKey}'.\\n\\nDetails: ${msg}`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,20 +1,27 @@
1
1
  declare module "nz/co/siliconst/ui5/metaui/layouts/FormLayout" {
2
+ import { ISchema } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
3
+ import { ILayoutManager } from "nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager";
4
+ import { Engine } from "nz/co/siliconst/ui5/metaui/core/Engine";
5
+ import Control from "sap/ui/core/Control";
2
6
  /**
3
- * @file FormLayout.ts
4
- * @description Generates a fully responsive SAP Fiori Form layout (SimpleForm).
7
+ * Layout Manager responsible for generating a fully responsive SAP Fiori SimpleForm.
8
+ * It traverses the `uiLayout` tree defined in the schema to build the form groups and fields,
9
+ * completely separating visual orchestration from data modeling.
10
+ * @namespace nz.co.siliconst.ui5.metaui.layouts
11
+ * @public
5
12
  */
6
- import SimpleForm from "sap/ui/layout/form/SimpleForm";
7
- import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
8
- import { IPlugin } from "nz/co/siliconst/ui5/metaui/interfaces/IPlugin";
9
- export class FormLayout {
13
+ export class FormLayout implements ILayoutManager {
10
14
  /**
11
- * Builds a SimpleForm with ResponsiveGridLayout, injecting the requested plugins.
12
- * @param properties The dictionary of fields to render.
13
- * @param modelName The dynamic model name.
14
- * @param formTitle Optional title for the form block.
15
- * @param trackPlugin Optional callback to track instantiated plugins.
15
+ * Renders the JSON Schema properties into a UI5 SimpleForm using the uiLayout definitions.
16
+ *
17
+ * @param schema The active JSON schema subset.
18
+ * @param modelName The bound UI5 model name.
19
+ * @param engine The central orchestrator for delegating plugin generation.
20
+ * @param onSubmit Optional submit hook.
21
+ * @returns {Control} The VBox wrapper containing the generated form.
16
22
  */
17
- static build(properties: Record<string, IPropertyMetadata>, modelName?: string, formTitle?: string, trackPlugin?: (plugin: IPlugin) => void): SimpleForm;
23
+ render(schema: ISchema, modelName: string, engine: Engine, onSubmit?: () => void): Control;
24
+ private _renderScalarField;
18
25
  }
19
26
  }
20
27
  //# sourceMappingURL=FormLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormLayout.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,+CAA+C,CAAC;IAC/D;;;OAGG;IAEH,OAAO,UAAU,MAAM,+BAA+B,CAAC;IAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;IAExE,MAAa,UAAU;QACnB;;;;;;WAMG;eACW,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,SAAS,GAAE,MAAe,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,UAAU;KA4E1K;CAEA"}
1
+ {"version":3,"file":"FormLayout.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,+CAA+C,CAAC;IAU/D,OAAO,EAAqB,OAAO,EAAkB,MAAM,+CAA+C,CAAC;IAC3G,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;IACtF,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;IAGhE,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAE1C;;;;;;OAMG;IACH,MAAa,UAAW,YAAW,cAAc;QAC7C;;;;;;;;WAQG;QACI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO;QAiGjG,OAAO,CAAC,kBAAkB;KA8B7B;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["sap/ui/layout/form/SimpleForm","sap/m/Label","sap/ui/core/Title","../core/PluginRegistry"],function(e,t,a,n){"use strict";const i=n["PluginRegistry"];class s{static build(n,s="meta",o,r){const l=new e({editable:true,title:o,layout:"ResponsiveGridLayout",labelSpanXL:4,labelSpanL:4,labelSpanM:4,labelSpanS:12,adjustLabelSpan:false,emptySpanXL:0,emptySpanL:0,emptySpanM:0,emptySpanS:0,columnsXL:1,columnsL:1,columnsM:1,singleContainerFullSize:false});const u=i.getInstance();const p={};const c="__DEFAULT__";for(const e of Object.keys(n)){const t=n[e];const a=t.ui?.group||c;if(!p[a])p[a]=[];p[a].push({key:e,meta:t})}for(const e of Object.keys(p)){if(e!==c){l.addContent(new a({text:e}))}p[e].forEach(e=>{try{const a=new t({text:e.meta.ui?.label||e.key,required:e.meta.required});if(e.meta.ui?.visibleOn){const t=`{= ${e.meta.ui.visibleOn.replace(/\$root\./g,`${s}>/`).replace(/\./g,"/")} }`;a.bindProperty("visible",{parts:[{path:"meta>/"}],formatter:()=>false})}const n=u.getPlugin(e.meta.type,e.meta.ui?.widget);if(r)r(n);const i=n.render(e.meta,`/${e.key}`,s);if(e.meta.ui?.fullWidth){sap.ui.require(["sap/ui/layout/GridData"],e=>{i.setLayoutData(new e({span:"XL12 L12 M12 S12"}))})}l.addContent(a);l.addContent(i)}catch(t){sap.ui.require(["sap/base/Log"],a=>{if(a)a.error(`[MetaUI] Failed to render field ${e.key}`,t.message,"FormLayout")})}})}return l}}var o={__esModule:true};o.FormLayout=s;return o});
1
+ sap.ui.define(["sap/ui/layout/form/SimpleForm","sap/m/Label","sap/ui/core/Title","sap/m/VBox","../core/SchemaNormalizer","../utils/Logger"],function(e,t,a,r,o,i){"use strict";const n=o["SchemaNormalizer"];const s=i["Logger"];class l{render(t,o,i,l){const u=new r({renderType:"Bare"});const p=new e({editable:true,title:t.title,layout:"ResponsiveGridLayout",labelSpanXL:4,labelSpanL:4,labelSpanM:4,labelSpanS:12,adjustLabelSpan:false,emptySpanXL:0,emptySpanL:0,emptySpanM:0,emptySpanS:0,columnsXL:1,columnsL:1,columnsM:1,singleContainerFullSize:false});if(!t.uiLayout||!Array.isArray(t.uiLayout)){s.warn("[MetaUI] Missing 'uiLayout' array in schema. Form will not render any fields.");u.addItem(p);return u}const d=[];let y=false;const c=e=>{if(e.type==="Group"){if(e.label){p.addContent(new a({text:e.label}))}if(e.elements&&Array.isArray(e.elements)){e.elements.forEach(c)}}else if(e.type==="Control"){if(!e.scope||!e.scope.startsWith("#/properties/")){s.error(`[MetaUI] Invalid scope '${e.scope}' in uiLayout Control.`,"","FormLayout");return}const{meta:a,bindingPath:r,propKey:l}=n.resolveScope(t,e.scope);if(!a){s.error(`[MetaUI] Property '${l}' not found in schema definitions.`,"","FormLayout");return}const u=a.items?.type==="object"||a.items?.properties;const c=!!a.ui?.widget;const m=a.type==="array"&&u&&!c;if(m){s.debug("[MetaUI FormLayout]",`Routing property '${l}' to Table Sub-Layout.`,"FormLayout");d.push({scope:r,meta:a,label:e.label})}else{y=true;s.debug("[MetaUI FormLayout]",`Rendering scalar field '${r}'.`,"FormLayout");this._renderScalarField(p,e,r,a,o,i)}}else{s.warn(`[MetaUI] Unsupported layout element type '${e.type}'.`,"","FormLayout")}};t.uiLayout.forEach(c);if(y){u.addItem(p)}d.forEach(e=>{try{const t={type:"array",title:e.label||e.meta.ui?.label||e.scope,items:e.meta.items||{type:"object",properties:{}},uiLayout:e.meta.items?.uiLayout};const a=i.generateLayout(t,o,`/${e.scope}`);if(a){a.addStyleClass("sapUiSmallMarginTop");u.addItem(a)}}catch(t){const a=t.message;s.error(`[MetaUI] Failed to render array field ${e.scope}`,a,"FormLayout");s.showErrorPopup(`Failed to render array field '${e.scope}'.\n\nDetails: ${a}`)}});return u}_renderScalarField(e,a,r,o,i,n){try{const s=a.label||o.ui?.label||r;const l=new t({text:s,required:o.required});const u={...o};if(a.widget){u.ui={...o.ui,widget:a.widget}}const p=n.generateField(u,`/${r}`,i);if(u.ui?.fullWidth){sap.ui.require(["sap/ui/layout/GridData"],e=>{p.setLayoutData(new e({span:"XL12 L12 M12 S12"}))})}e.addContent(l);e.addContent(p)}catch(e){const t=e.message;s.error(`[MetaUI] Failed to render field ${r}`,t,"FormLayout");s.showErrorPopup(`Failed to render field '${r}'.\n\nDetails: ${t}`)}}}var u={__esModule:true};u.FormLayout=l;return u});
2
2
  //# sourceMappingURL=FormLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormLayout.js","names":["PluginRegistry","___core_PluginRegistry","FormLayout","build","properties","modelName","formTitle","trackPlugin","form","SimpleForm","editable","title","layout","labelSpanXL","labelSpanL","labelSpanM","labelSpanS","adjustLabelSpan","emptySpanXL","emptySpanL","emptySpanM","emptySpanS","columnsXL","columnsL","columnsM","singleContainerFullSize","registry","getInstance","groups","DEFAULT_GROUP","key","Object","keys","meta","groupName","ui","group","push","addContent","Title","text","forEach","field","label","Label","required","visibleOn","expr","replace","bindProperty","parts","path","formatter","plugin","getPlugin","type","widget","control","render","fullWidth","sap","require","GridData","setLayoutData","span","error","Log","message","__exports","__esModule"],"sources":["FormLayout.ts"],"sourcesContent":["/**\n * @file FormLayout.ts\n * @description Generates a fully responsive SAP Fiori Form layout (SimpleForm).\n */\n\nimport SimpleForm from \"sap/ui/layout/form/SimpleForm\";\nimport Label from \"sap/m/Label\";\nimport Title from \"sap/ui/core/Title\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"../core/PluginRegistry\";\nimport { IPlugin } from \"../interfaces/IPlugin\";\n\nexport class FormLayout {\n /**\n * Builds a SimpleForm with ResponsiveGridLayout, injecting the requested plugins.\n * @param properties The dictionary of fields to render.\n * @param modelName The dynamic model name.\n * @param formTitle Optional title for the form block.\n * @param trackPlugin Optional callback to track instantiated plugins.\n */\n public static build(properties: Record<string, IPropertyMetadata>, modelName: string = \"meta\", formTitle?: string, trackPlugin?: (plugin: IPlugin) => void): SimpleForm {\n const form = new SimpleForm({\n editable: true,\n title: formTitle,\n layout: \"ResponsiveGridLayout\",\n labelSpanXL: 4,\n labelSpanL: 4,\n labelSpanM: 4,\n labelSpanS: 12,\n adjustLabelSpan: false,\n emptySpanXL: 0,\n emptySpanL: 0,\n emptySpanM: 0,\n emptySpanS: 0,\n columnsXL: 1,\n columnsL: 1,\n columnsM: 1,\n singleContainerFullSize: false\n });\n\n const registry = PluginRegistry.getInstance();\n \n // Group fields by their ui.group directive\n const groups: Record<string, { key: string; meta: IPropertyMetadata }[]> = {};\n const DEFAULT_GROUP = \"__DEFAULT__\";\n \n for (const key of Object.keys(properties)) {\n const meta = properties[key];\n const groupName = meta.ui?.group || DEFAULT_GROUP;\n if (!groups[groupName]) groups[groupName] = [];\n groups[groupName].push({ key, meta });\n }\n\n // Render groups\n for (const groupName of Object.keys(groups)) {\n if (groupName !== DEFAULT_GROUP) {\n form.addContent(new Title({ text: groupName }));\n }\n \n groups[groupName].forEach((field) => {\n try {\n const label = new Label({\n text: field.meta.ui?.label || field.key,\n required: field.meta.required\n });\n\n // Attach visibility condition to label and control container logic\n if (field.meta.ui?.visibleOn) {\n const expr = `{= ${field.meta.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n label.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false}); // temporary, condition engine does this usually\n }\n\n const plugin = registry.getPlugin(field.meta.type, field.meta.ui?.widget);\n if (trackPlugin) trackPlugin(plugin);\n const control = plugin.render(field.meta, `/${field.key}`, modelName);\n\n if (field.meta.ui?.fullWidth) {\n sap.ui.require([\"sap/ui/layout/GridData\"], (GridData: any) => {\n control.setLayoutData(new GridData({\n span: \"XL12 L12 M12 S12\"\n }));\n });\n }\n\n form.addContent(label);\n form.addContent(control);\n } catch (error) {\n sap.ui.require([\"sap/base/Log\"], (Log: any) => {\n if (Log) Log.error(`[MetaUI] Failed to render field ${field.key}`, (error as Error).message, \"FormLayout\");\n });\n }\n });\n }\n\n return form;\n }\n}\n"],"mappings":"gJASSA,EAAcC,EAAA,kBAGhB,MAAMC,EAQT,YAAcC,CAAMC,EAA+CC,EAAoB,OAAQC,EAAoBC,GAC/G,MAAMC,EAAO,IAAIC,EAAW,CACxBC,SAAU,KACVC,MAAOL,EACPM,OAAQ,uBACRC,YAAa,EACbC,WAAY,EACZC,WAAY,EACZC,WAAY,GACZC,gBAAiB,MACjBC,YAAa,EACbC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,UAAW,EACXC,SAAU,EACVC,SAAU,EACVC,wBAAyB,QAG7B,MAAMC,EAAW1B,EAAe2B,cAGhC,MAAMC,EAAqE,CAAC,EAC5E,MAAMC,EAAgB,cAEtB,IAAK,MAAMC,KAAOC,OAAOC,KAAK5B,GAAa,CACvC,MAAM6B,EAAO7B,EAAW0B,GACxB,MAAMI,EAAYD,EAAKE,IAAIC,OAASP,EACpC,IAAKD,EAAOM,GAAYN,EAAOM,GAAa,GAC5CN,EAAOM,GAAWG,KAAK,CAAEP,MAAKG,QAClC,CAGA,IAAK,MAAMC,KAAaH,OAAOC,KAAKJ,GAAS,CACzC,GAAIM,IAAcL,EAAe,CAC7BrB,EAAK8B,WAAW,IAAIC,EAAM,CAAEC,KAAMN,IACtC,CAEAN,EAAOM,GAAWO,QAASC,IACvB,IACI,MAAMC,EAAQ,IAAIC,EAAM,CACpBJ,KAAME,EAAMT,KAAKE,IAAIQ,OAASD,EAAMZ,IACpCe,SAAUH,EAAMT,KAAKY,WAIzB,GAAIH,EAAMT,KAAKE,IAAIW,UAAW,CAC1B,MAAMC,EAAO,MAAML,EAAMT,KAAKE,GAAGW,UAAUE,QAAQ,YAAa,GAAG3C,OAAe2C,QAAQ,MAAO,SACjGL,EAAMM,aAAa,UAAW,CAAEC,MAAO,CAAC,CAAEC,KAAM,WAAaC,UAAWA,IAAM,OAClF,CAEA,MAAMC,EAAS3B,EAAS4B,UAAUZ,EAAMT,KAAKsB,KAAMb,EAAMT,KAAKE,IAAIqB,QAClE,GAAIjD,EAAaA,EAAY8C,GAC7B,MAAMI,EAAUJ,EAAOK,OAAOhB,EAAMT,KAAM,IAAIS,EAAMZ,MAAOzB,GAE3D,GAAIqC,EAAMT,KAAKE,IAAIwB,UAAW,CAC1BC,IAAIzB,GAAG0B,QAAQ,CAAC,0BAA4BC,IACxCL,EAAQM,cAAc,IAAID,EAAS,CAC/BE,KAAM,uBAGlB,CAEAxD,EAAK8B,WAAWK,GAChBnC,EAAK8B,WAAWmB,EACpB,CAAE,MAAOQ,GACLL,IAAIzB,GAAG0B,QAAQ,CAAC,gBAAkBK,IAC9B,GAAIA,EAAKA,EAAID,MAAM,mCAAmCvB,EAAMZ,MAAQmC,EAAgBE,QAAS,eAErG,GAER,CAEA,OAAO3D,CACX,EACH,IAAA4D,EAAA,CAAAC,WAAA,MAAAD,EAAAlE,aAAA,OAAAkE,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"FormLayout.js","names":["SchemaNormalizer","___core_SchemaNormalizer","Logger","___utils_Logger","FormLayout","render","schema","modelName","engine","onSubmit","container","VBox","renderType","form","SimpleForm","editable","title","layout","labelSpanXL","labelSpanL","labelSpanM","labelSpanS","adjustLabelSpan","emptySpanXL","emptySpanL","emptySpanM","emptySpanS","columnsXL","columnsL","columnsM","singleContainerFullSize","uiLayout","Array","isArray","warn","addItem","tableElements","hasFormFields","renderElement","element","type","label","addContent","Title","text","elements","forEach","scope","startsWith","error","meta","bindingPath","propKey","resolveScope","isCollectionOfRecords","items","properties","hasExplicitWidget","ui","widget","isSubLayout","debug","push","this","_renderScalarField","field","subSchema","control","generateLayout","addStyleClass","msg","message","showErrorPopup","labelText","Label","required","effectiveMeta","generateField","fullWidth","sap","require","GridData","setLayoutData","span","__exports","__esModule"],"sources":["FormLayout.ts"],"sourcesContent":["/**\n * @file FormLayout.ts\n * @description Generates a fully responsive SAP Fiori Form layout (SimpleForm).\n */\n\nimport SimpleForm from \"sap/ui/layout/form/SimpleForm\";\nimport Label from \"sap/m/Label\";\nimport Title from \"sap/ui/core/Title\";\nimport VBox from \"sap/m/VBox\";\nimport { IPropertyMetadata, ISchema, ILayoutElement } from \"../interfaces/ISchema\";\nimport { ILayoutManager } from \"../interfaces/ILayoutManager\";\nimport { Engine } from \"../core/Engine\";\nimport { SchemaNormalizer } from \"../core/SchemaNormalizer\";\nimport { Logger } from \"../utils/Logger\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Layout Manager responsible for generating a fully responsive SAP Fiori SimpleForm.\n * It traverses the `uiLayout` tree defined in the schema to build the form groups and fields,\n * completely separating visual orchestration from data modeling.\n * @namespace nz.co.siliconst.ui5.metaui.layouts\n * @public\n */\nexport class FormLayout implements ILayoutManager {\n /**\n * Renders the JSON Schema properties into a UI5 SimpleForm using the uiLayout definitions.\n * \n * @param schema The active JSON schema subset.\n * @param modelName The bound UI5 model name.\n * @param engine The central orchestrator for delegating plugin generation.\n * @param onSubmit Optional submit hook.\n * @returns {Control} The VBox wrapper containing the generated form.\n */\n public render(schema: ISchema, modelName: string, engine: Engine, onSubmit?: () => void): Control {\n const container = new VBox({ renderType: \"Bare\" });\n const form = new SimpleForm({\n editable: true,\n title: schema.title,\n layout: \"ResponsiveGridLayout\",\n labelSpanXL: 4, labelSpanL: 4, labelSpanM: 4, labelSpanS: 12,\n adjustLabelSpan: false,\n emptySpanXL: 0, emptySpanL: 0, emptySpanM: 0, emptySpanS: 0,\n columnsXL: 1, columnsL: 1, columnsM: 1,\n singleContainerFullSize: false\n });\n\n if (!schema.uiLayout || !Array.isArray(schema.uiLayout)) {\n Logger.warn(\"[MetaUI] Missing 'uiLayout' array in schema. Form will not render any fields.\");\n container.addItem(form);\n return container;\n }\n\n const tableElements: { scope: string, meta: IPropertyMetadata, label?: string }[] = [];\n let hasFormFields = false;\n\n // Recursively render layout elements\n const renderElement = (element: ILayoutElement) => {\n if (element.type === \"Group\") {\n if (element.label) {\n form.addContent(new Title({ text: element.label }));\n }\n \n if (element.elements && Array.isArray(element.elements)) {\n element.elements.forEach(renderElement);\n }\n } else if (element.type === \"Control\") {\n if (!element.scope || !element.scope.startsWith(\"#/properties/\")) {\n Logger.error(`[MetaUI] Invalid scope '${element.scope}' in uiLayout Control.`, \"\", \"FormLayout\");\n return;\n }\n \n const { meta, bindingPath, propKey } = SchemaNormalizer.resolveScope(schema, element.scope);\n \n if (!meta) {\n Logger.error(`[MetaUI] Property '${propKey}' not found in schema definitions.`, \"\", \"FormLayout\");\n return;\n }\n\n // Architectural Boundary: Separate Field Controls (Plugins) from Sub-Layouts (LayoutManagers)\n // A property is delegated to a Sub-Layout Manager (Table) ONLY if it represents a collection of complex objects.\n // Collections of primitives, or explicitly assigned widgets (like multiSelect), remain in the Form as Field Plugins.\n const isCollectionOfRecords = meta.items?.type === \"object\" || meta.items?.properties;\n const hasExplicitWidget = !!meta.ui?.widget;\n const isSubLayout = meta.type === \"array\" && isCollectionOfRecords && !hasExplicitWidget;\n\n if (isSubLayout) {\n Logger.debug(\"[MetaUI FormLayout]\", `Routing property '${propKey}' to Table Sub-Layout.`, \"FormLayout\");\n tableElements.push({ scope: bindingPath, meta, label: element.label });\n } else {\n hasFormFields = true;\n Logger.debug(\"[MetaUI FormLayout]\", `Rendering scalar field '${bindingPath}'.`, \"FormLayout\");\n this._renderScalarField(form, element, bindingPath, meta, modelName, engine);\n }\n } else {\n Logger.warn(`[MetaUI] Unsupported layout element type '${element.type}'.`, \"\", \"FormLayout\");\n }\n };\n\n // Render everything defined in the layout\n schema.uiLayout.forEach(renderElement);\n\n if (hasFormFields) {\n container.addItem(form);\n }\n\n // Render array/table sub-layouts full width below the form\n tableElements.forEach(field => {\n try {\n const subSchema = {\n type: \"array\",\n title: field.label || field.meta.ui?.label || field.scope,\n items: field.meta.items || { type: \"object\", properties: {} },\n uiLayout: field.meta.items?.uiLayout // Pass down sub-layout if available\n };\n \n const control = engine.generateLayout(subSchema as ISchema, modelName, `/${field.scope}`);\n if (control) {\n control.addStyleClass(\"sapUiSmallMarginTop\");\n container.addItem(control);\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] Failed to render array field ${field.scope}`, msg, \"FormLayout\");\n Logger.showErrorPopup(`Failed to render array field '${field.scope}'.\\n\\nDetails: ${msg}`);\n }\n });\n\n return container;\n }\n\n private _renderScalarField(form: SimpleForm, element: ILayoutElement, propKey: string, meta: IPropertyMetadata, modelName: string, engine: Engine): void {\n try {\n const labelText = element.label || meta.ui?.label || propKey;\n const label = new Label({\n text: labelText,\n required: meta.required\n });\n\n // Override widget if specified in the layout element\n const effectiveMeta = { ...meta };\n if (element.widget) {\n effectiveMeta.ui = { ...meta.ui, widget: element.widget };\n }\n\n const control = engine.generateField(effectiveMeta, `/${propKey}`, modelName);\n\n if (effectiveMeta.ui?.fullWidth) {\n sap.ui.require([\"sap/ui/layout/GridData\"], (GridData: any) => {\n control.setLayoutData(new GridData({ span: \"XL12 L12 M12 S12\" }));\n });\n }\n\n form.addContent(label);\n form.addContent(control);\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] Failed to render field ${propKey}`, msg, \"FormLayout\");\n Logger.showErrorPopup(`Failed to render field '${propKey}'.\\n\\nDetails: ${msg}`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,92 +6,156 @@
6
6
  import SimpleForm from "sap/ui/layout/form/SimpleForm";
7
7
  import Label from "sap/m/Label";
8
8
  import Title from "sap/ui/core/Title";
9
- import { IPropertyMetadata } from "../interfaces/ISchema";
10
- import { PluginRegistry } from "../core/PluginRegistry";
11
- import { IPlugin } from "../interfaces/IPlugin";
9
+ import VBox from "sap/m/VBox";
10
+ import { IPropertyMetadata, ISchema, ILayoutElement } from "../interfaces/ISchema";
11
+ import { ILayoutManager } from "../interfaces/ILayoutManager";
12
+ import { Engine } from "../core/Engine";
13
+ import { SchemaNormalizer } from "../core/SchemaNormalizer";
14
+ import { Logger } from "../utils/Logger";
15
+ import Control from "sap/ui/core/Control";
12
16
 
13
- export class FormLayout {
17
+ /**
18
+ * Layout Manager responsible for generating a fully responsive SAP Fiori SimpleForm.
19
+ * It traverses the `uiLayout` tree defined in the schema to build the form groups and fields,
20
+ * completely separating visual orchestration from data modeling.
21
+ * @namespace nz.co.siliconst.ui5.metaui.layouts
22
+ * @public
23
+ */
24
+ export class FormLayout implements ILayoutManager {
14
25
  /**
15
- * Builds a SimpleForm with ResponsiveGridLayout, injecting the requested plugins.
16
- * @param properties The dictionary of fields to render.
17
- * @param modelName The dynamic model name.
18
- * @param formTitle Optional title for the form block.
19
- * @param trackPlugin Optional callback to track instantiated plugins.
26
+ * Renders the JSON Schema properties into a UI5 SimpleForm using the uiLayout definitions.
27
+ *
28
+ * @param schema The active JSON schema subset.
29
+ * @param modelName The bound UI5 model name.
30
+ * @param engine The central orchestrator for delegating plugin generation.
31
+ * @param onSubmit Optional submit hook.
32
+ * @returns {Control} The VBox wrapper containing the generated form.
20
33
  */
21
- public static build(properties: Record<string, IPropertyMetadata>, modelName: string = "meta", formTitle?: string, trackPlugin?: (plugin: IPlugin) => void): SimpleForm {
34
+ public render(schema: ISchema, modelName: string, engine: Engine, onSubmit?: () => void): Control {
35
+ const container = new VBox({ renderType: "Bare" });
22
36
  const form = new SimpleForm({
23
37
  editable: true,
24
- title: formTitle,
38
+ title: schema.title,
25
39
  layout: "ResponsiveGridLayout",
26
- labelSpanXL: 4,
27
- labelSpanL: 4,
28
- labelSpanM: 4,
29
- labelSpanS: 12,
40
+ labelSpanXL: 4, labelSpanL: 4, labelSpanM: 4, labelSpanS: 12,
30
41
  adjustLabelSpan: false,
31
- emptySpanXL: 0,
32
- emptySpanL: 0,
33
- emptySpanM: 0,
34
- emptySpanS: 0,
35
- columnsXL: 1,
36
- columnsL: 1,
37
- columnsM: 1,
42
+ emptySpanXL: 0, emptySpanL: 0, emptySpanM: 0, emptySpanS: 0,
43
+ columnsXL: 1, columnsL: 1, columnsM: 1,
38
44
  singleContainerFullSize: false
39
45
  });
40
46
 
41
- const registry = PluginRegistry.getInstance();
42
-
43
- // Group fields by their ui.group directive
44
- const groups: Record<string, { key: string; meta: IPropertyMetadata }[]> = {};
45
- const DEFAULT_GROUP = "__DEFAULT__";
46
-
47
- for (const key of Object.keys(properties)) {
48
- const meta = properties[key];
49
- const groupName = meta.ui?.group || DEFAULT_GROUP;
50
- if (!groups[groupName]) groups[groupName] = [];
51
- groups[groupName].push({ key, meta });
47
+ if (!schema.uiLayout || !Array.isArray(schema.uiLayout)) {
48
+ Logger.warn("[MetaUI] Missing 'uiLayout' array in schema. Form will not render any fields.");
49
+ container.addItem(form);
50
+ return container;
52
51
  }
53
52
 
54
- // Render groups
55
- for (const groupName of Object.keys(groups)) {
56
- if (groupName !== DEFAULT_GROUP) {
57
- form.addContent(new Title({ text: groupName }));
53
+ const tableElements: { scope: string, meta: IPropertyMetadata, label?: string }[] = [];
54
+ let hasFormFields = false;
55
+
56
+ // Recursively render layout elements
57
+ const renderElement = (element: ILayoutElement) => {
58
+ if (element.type === "Group") {
59
+ if (element.label) {
60
+ form.addContent(new Title({ text: element.label }));
61
+ }
62
+
63
+ if (element.elements && Array.isArray(element.elements)) {
64
+ element.elements.forEach(renderElement);
65
+ }
66
+ } else if (element.type === "Control") {
67
+ if (!element.scope || !element.scope.startsWith("#/properties/")) {
68
+ Logger.error(`[MetaUI] Invalid scope '${element.scope}' in uiLayout Control.`, "", "FormLayout");
69
+ return;
70
+ }
71
+
72
+ const { meta, bindingPath, propKey } = SchemaNormalizer.resolveScope(schema, element.scope);
73
+
74
+ if (!meta) {
75
+ Logger.error(`[MetaUI] Property '${propKey}' not found in schema definitions.`, "", "FormLayout");
76
+ return;
77
+ }
78
+
79
+ // Architectural Boundary: Separate Field Controls (Plugins) from Sub-Layouts (LayoutManagers)
80
+ // A property is delegated to a Sub-Layout Manager (Table) ONLY if it represents a collection of complex objects.
81
+ // Collections of primitives, or explicitly assigned widgets (like multiSelect), remain in the Form as Field Plugins.
82
+ const isCollectionOfRecords = meta.items?.type === "object" || meta.items?.properties;
83
+ const hasExplicitWidget = !!meta.ui?.widget;
84
+ const isSubLayout = meta.type === "array" && isCollectionOfRecords && !hasExplicitWidget;
85
+
86
+ if (isSubLayout) {
87
+ Logger.debug("[MetaUI FormLayout]", `Routing property '${propKey}' to Table Sub-Layout.`, "FormLayout");
88
+ tableElements.push({ scope: bindingPath, meta, label: element.label });
89
+ } else {
90
+ hasFormFields = true;
91
+ Logger.debug("[MetaUI FormLayout]", `Rendering scalar field '${bindingPath}'.`, "FormLayout");
92
+ this._renderScalarField(form, element, bindingPath, meta, modelName, engine);
93
+ }
94
+ } else {
95
+ Logger.warn(`[MetaUI] Unsupported layout element type '${element.type}'.`, "", "FormLayout");
58
96
  }
59
-
60
- groups[groupName].forEach((field) => {
61
- try {
62
- const label = new Label({
63
- text: field.meta.ui?.label || field.key,
64
- required: field.meta.required
65
- });
66
-
67
- // Attach visibility condition to label and control container logic
68
- if (field.meta.ui?.visibleOn) {
69
- const expr = `{= ${field.meta.ui.visibleOn.replace(/\$root\./g, `${modelName}>/`).replace(/\./g, '/')} }`;
70
- label.bindProperty("visible", { parts: [{ path: "meta>/" }], formatter: () => false}); // temporary, condition engine does this usually
71
- }
72
-
73
- const plugin = registry.getPlugin(field.meta.type, field.meta.ui?.widget);
74
- if (trackPlugin) trackPlugin(plugin);
75
- const control = plugin.render(field.meta, `/${field.key}`, modelName);
76
-
77
- if (field.meta.ui?.fullWidth) {
78
- sap.ui.require(["sap/ui/layout/GridData"], (GridData: any) => {
79
- control.setLayoutData(new GridData({
80
- span: "XL12 L12 M12 S12"
81
- }));
82
- });
83
- }
84
-
85
- form.addContent(label);
86
- form.addContent(control);
87
- } catch (error) {
88
- sap.ui.require(["sap/base/Log"], (Log: any) => {
89
- if (Log) Log.error(`[MetaUI] Failed to render field ${field.key}`, (error as Error).message, "FormLayout");
90
- });
97
+ };
98
+
99
+ // Render everything defined in the layout
100
+ schema.uiLayout.forEach(renderElement);
101
+
102
+ if (hasFormFields) {
103
+ container.addItem(form);
104
+ }
105
+
106
+ // Render array/table sub-layouts full width below the form
107
+ tableElements.forEach(field => {
108
+ try {
109
+ const subSchema = {
110
+ type: "array",
111
+ title: field.label || field.meta.ui?.label || field.scope,
112
+ items: field.meta.items || { type: "object", properties: {} },
113
+ uiLayout: field.meta.items?.uiLayout // Pass down sub-layout if available
114
+ };
115
+
116
+ const control = engine.generateLayout(subSchema as ISchema, modelName, `/${field.scope}`);
117
+ if (control) {
118
+ control.addStyleClass("sapUiSmallMarginTop");
119
+ container.addItem(control);
91
120
  }
121
+ } catch (error) {
122
+ const msg = (error as Error).message;
123
+ Logger.error(`[MetaUI] Failed to render array field ${field.scope}`, msg, "FormLayout");
124
+ Logger.showErrorPopup(`Failed to render array field '${field.scope}'.\n\nDetails: ${msg}`);
125
+ }
126
+ });
127
+
128
+ return container;
129
+ }
130
+
131
+ private _renderScalarField(form: SimpleForm, element: ILayoutElement, propKey: string, meta: IPropertyMetadata, modelName: string, engine: Engine): void {
132
+ try {
133
+ const labelText = element.label || meta.ui?.label || propKey;
134
+ const label = new Label({
135
+ text: labelText,
136
+ required: meta.required
92
137
  });
93
- }
94
138
 
95
- return form;
139
+ // Override widget if specified in the layout element
140
+ const effectiveMeta = { ...meta };
141
+ if (element.widget) {
142
+ effectiveMeta.ui = { ...meta.ui, widget: element.widget };
143
+ }
144
+
145
+ const control = engine.generateField(effectiveMeta, `/${propKey}`, modelName);
146
+
147
+ if (effectiveMeta.ui?.fullWidth) {
148
+ sap.ui.require(["sap/ui/layout/GridData"], (GridData: any) => {
149
+ control.setLayoutData(new GridData({ span: "XL12 L12 M12 S12" }));
150
+ });
151
+ }
152
+
153
+ form.addContent(label);
154
+ form.addContent(control);
155
+ } catch (error) {
156
+ const msg = (error as Error).message;
157
+ Logger.error(`[MetaUI] Failed to render field ${propKey}`, msg, "FormLayout");
158
+ Logger.showErrorPopup(`Failed to render field '${propKey}'.\n\nDetails: ${msg}`);
159
+ }
96
160
  }
97
161
  }