@siliconst/metaui 1.4.6 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/package.json +1 -1
  2. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +13 -0
  3. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
  4. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts +10 -0
  5. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.d.ts.map +1 -1
  6. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +10 -0
  8. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +47 -4
  9. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +47 -4
  11. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +48 -4
  14. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +32 -1
  15. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +7 -0
  17. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +11 -1
  21. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +20 -0
  22. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +12 -0
  24. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +21 -0
  28. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +9 -0
  29. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +7 -0
  31. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +7 -0
  34. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +13 -0
  35. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +10 -0
  37. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +10 -0
  40. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +41 -5
  41. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  42. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +16 -4
  43. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +44 -4
  47. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +5 -0
  48. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  49. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +4 -0
  50. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +4 -0
  53. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +4 -0
  54. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +4 -0
  56. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  58. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +4 -0
  59. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +4 -0
  60. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +4 -0
  62. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  63. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +4 -0
  65. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +45 -12
  66. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts +6 -0
  68. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +25 -12
  72. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +25 -12
  73. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +5 -5
  75. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +34 -27
  79. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +17 -3
  80. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts +4 -0
  82. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  84. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +13 -3
  86. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +158 -106
  87. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +25 -26
  89. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  91. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  92. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +176 -113
  93. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +26 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +22 -0
  96. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +22 -0
  99. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +6 -0
  100. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  101. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +5 -0
  102. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +5 -0
  105. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js +10 -0
  106. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout-dbg.js.map +1 -1
  107. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts +9 -0
  108. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.d.ts.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.js.map +1 -1
  110. package/src/nz/co/siliconst/ui5/metaui/layouts/CompactLayout.ts +9 -0
  111. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +10 -0
  112. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts +9 -0
  114. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +9 -0
  117. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js +9 -0
  118. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout-dbg.js.map +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts +8 -0
  120. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.d.ts.map +1 -1
  121. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.js.map +1 -1
  122. package/src/nz/co/siliconst/ui5/metaui/layouts/WizardLayout.ts +8 -0
  123. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +2 -32
  124. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +9 -10
  126. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/library.d.ts +0 -6
  128. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  130. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/library.ts +0 -33
  132. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +18 -0
  133. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +16 -0
  135. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  136. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +16 -0
  138. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +19 -0
  139. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +17 -0
  141. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  142. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +17 -0
  144. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +1 -0
  145. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +2 -0
  150. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +19 -0
  151. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +17 -0
  153. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +17 -0
  156. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +29 -0
  157. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +25 -0
  159. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  160. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +25 -0
  162. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +19 -0
  163. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  164. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +17 -0
  165. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +17 -0
  168. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +19 -0
  169. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  170. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +17 -0
  171. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +17 -0
  174. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +2 -0
  175. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  176. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +2 -0
  177. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  179. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +2 -0
  180. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +19 -0
  181. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +17 -0
  183. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  184. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +17 -0
  186. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +19 -0
  187. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +17 -0
  189. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +17 -0
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +18 -0
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +16 -0
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +16 -0
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +19 -0
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +17 -0
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +17 -0
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +19 -0
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +17 -0
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +17 -0
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +23 -0
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +20 -0
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +20 -0
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +19 -0
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +17 -0
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +17 -0
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +19 -0
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +17 -0
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +17 -0
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +19 -0
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +17 -0
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +17 -0
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +19 -0
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +17 -0
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +17 -0
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -0
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +2 -0
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +2 -0
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +19 -0
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +17 -0
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +17 -0
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +19 -0
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +17 -0
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +17 -0
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +19 -0
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +17 -0
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +17 -0
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +19 -0
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +17 -0
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +17 -0
  270. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js +0 -32
  271. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry-dbg.js.map +0 -1
  272. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts +0 -16
  273. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.d.ts.map +0 -1
  274. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js +0 -2
  275. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.js.map +0 -1
  276. package/src/nz/co/siliconst/ui5/metaui/core/LayoutRegistry.ts +0 -26
@@ -18,7 +18,9 @@ import { TextCaseFormatterPlugin } from "../plugins/formatters/TextCaseFormatter
18
18
  import { Logger } from "../utils/Logger";
19
19
 
20
20
  // --- Built-in Default Validators ---
21
+ /** Internal rule for required fields. */
21
22
  class RequiredValidator implements IValidator {
23
+ /** Validates that the value is not null, undefined, or empty string. */
22
24
  validate(parsedValue: unknown, args?: unknown): IValidationResult {
23
25
  if (parsedValue === null || parsedValue === undefined || parsedValue === "") {
24
26
  return { isValid: false, errorMessage: "This field is required." };
@@ -27,7 +29,9 @@ class RequiredValidator implements IValidator {
27
29
  }
28
30
  }
29
31
 
32
+ /** Internal rule for string maximum length. */
30
33
  class MaxLengthValidator implements IValidator {
34
+ /** Validates that a string does not exceed the provided argument length. */
31
35
  validate(parsedValue: unknown, args?: unknown): IValidationResult {
32
36
  if (typeof parsedValue === "string" && args && typeof args === "number") {
33
37
  if (parsedValue.length > args) {
@@ -87,9 +91,15 @@ export class PipelineManager {
87
91
  const validator = this.validators.get(rule);
88
92
  if (validator) {
89
93
  const args = argsMap ? argsMap[rule] : undefined;
90
- const result = validator.validate(parsedValue, args);
91
- if (!result.isValid) {
92
- return result; // Fast fail on first error
94
+ try {
95
+ const result = validator.validate(parsedValue, args);
96
+ if (!result.isValid) {
97
+ return result; // Fast fail on first error
98
+ }
99
+ } catch (error) {
100
+ const msg = (error as Error).message;
101
+ Logger.error(`[MetaUI] PipelineManager: Validator '${rule}' crashed during execution.`, msg);
102
+ return { isValid: false, errorMessage: `System validation error: ${msg}` };
93
103
  }
94
104
  } else {
95
105
  Logger.warn(`[MetaUI] PipelineManager: Requested validator '${rule}' not found in registry.`);
@@ -1,146 +1,198 @@
1
- sap.ui.define(["./Registry", "../utils/Logger", "../plugins/controls/StringPlugin", "../plugins/controls/NumberPlugin", "../plugins/controls/DatePlugin", "../plugins/controls/TimePlugin", "../plugins/controls/DateTimePlugin", "../plugins/controls/BooleanPlugin", "../plugins/controls/SwitchPlugin", "../plugins/controls/ArrayPlugin", "../plugins/controls/ObjectPlugin", "../plugins/controls/DropdownPlugin", "../plugins/controls/TextAreaPlugin", "../plugins/controls/CodeEditorPlugin", "../plugins/controls/FileUploaderPlugin", "../plugins/controls/MultiSelectPlugin", "../plugins/controls/SliderPlugin", "../plugins/controls/RatingIndicatorPlugin", "../plugins/controls/MessageStripPlugin", "../plugins/controls/CameraPlugin", "../plugins/controls/SignaturePlugin", "../plugins/controls/GeolocationPlugin", "../plugins/controls/BarcodeScannerPlugin", "../plugins/controls/VoiceInputPlugin", "../plugins/controls/RichTextPlugin", "../plugins/actions/UrlNavigationActionPlugin", "../plugins/actions/SubmitFormActionPlugin", "../plugins/datasources/ODataListBindingPlugin", "../plugins/datasources/RemoteDropdownPlugin"], function (___Registry, ___utils_Logger, ___plugins_controls_StringPlugin, ___plugins_controls_NumberPlugin, ___plugins_controls_DatePlugin, ___plugins_controls_TimePlugin, ___plugins_controls_DateTimePlugin, ___plugins_controls_BooleanPlugin, ___plugins_controls_SwitchPlugin, ___plugins_controls_ArrayPlugin, ___plugins_controls_ObjectPlugin, ___plugins_controls_DropdownPlugin, ___plugins_controls_TextAreaPlugin, ___plugins_controls_CodeEditorPlugin, ___plugins_controls_FileUploaderPlugin, ___plugins_controls_MultiSelectPlugin, ___plugins_controls_SliderPlugin, ___plugins_controls_RatingIndicatorPlugin, ___plugins_controls_MessageStripPlugin, ___plugins_controls_CameraPlugin, ___plugins_controls_SignaturePlugin, ___plugins_controls_GeolocationPlugin, ___plugins_controls_BarcodeScannerPlugin, ___plugins_controls_VoiceInputPlugin, ___plugins_controls_RichTextPlugin, ___plugins_actions_UrlNavigationActionPlugin, ___plugins_actions_SubmitFormActionPlugin, ___plugins_datasources_ODataListBindingPlugin, ___plugins_datasources_RemoteDropdownPlugin) {
1
+ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
2
2
  "use strict";
3
3
 
4
4
  /**
5
5
  * @file PluginRegistry.ts
6
6
  * @description Centralized hub for mapping UI5 controls to SAP schema data types.
7
7
  * Enforces the Registry Pattern to decouple the core engine from specific UI5 control implementations.
8
+ * NOW WITH UNIVERSAL LAZY LOADING.
8
9
  */
9
- const Registry = ___Registry["Registry"];
10
10
  const Logger = ___utils_Logger["Logger"];
11
- const StringPlugin = ___plugins_controls_StringPlugin["StringPlugin"];
12
- const NumberPlugin = ___plugins_controls_NumberPlugin["NumberPlugin"];
13
- const DatePlugin = ___plugins_controls_DatePlugin["DatePlugin"];
14
- const TimePlugin = ___plugins_controls_TimePlugin["TimePlugin"];
15
- const DateTimePlugin = ___plugins_controls_DateTimePlugin["DateTimePlugin"];
16
- const BooleanPlugin = ___plugins_controls_BooleanPlugin["BooleanPlugin"];
17
- const SwitchPlugin = ___plugins_controls_SwitchPlugin["SwitchPlugin"];
18
- const ArrayPlugin = ___plugins_controls_ArrayPlugin["ArrayPlugin"];
19
- const ObjectPlugin = ___plugins_controls_ObjectPlugin["ObjectPlugin"];
20
- const DropdownPlugin = ___plugins_controls_DropdownPlugin["DropdownPlugin"];
21
- const TextAreaPlugin = ___plugins_controls_TextAreaPlugin["TextAreaPlugin"];
22
- const CodeEditorPlugin = ___plugins_controls_CodeEditorPlugin["CodeEditorPlugin"]; // New Phase 1 Controls
23
- const FileUploaderPlugin = ___plugins_controls_FileUploaderPlugin["FileUploaderPlugin"];
24
- const MultiSelectPlugin = ___plugins_controls_MultiSelectPlugin["MultiSelectPlugin"];
25
- const SliderPlugin = ___plugins_controls_SliderPlugin["SliderPlugin"];
26
- const RatingIndicatorPlugin = ___plugins_controls_RatingIndicatorPlugin["RatingIndicatorPlugin"];
27
- const MessageStripPlugin = ___plugins_controls_MessageStripPlugin["MessageStripPlugin"]; // New Phase 5 Hardware / Base64 Plugins
28
- const CameraPlugin = ___plugins_controls_CameraPlugin["CameraPlugin"];
29
- const SignaturePlugin = ___plugins_controls_SignaturePlugin["SignaturePlugin"];
30
- const GeolocationPlugin = ___plugins_controls_GeolocationPlugin["GeolocationPlugin"];
31
- const BarcodeScannerPlugin = ___plugins_controls_BarcodeScannerPlugin["BarcodeScannerPlugin"];
32
- const VoiceInputPlugin = ___plugins_controls_VoiceInputPlugin["VoiceInputPlugin"];
33
- const RichTextPlugin = ___plugins_controls_RichTextPlugin["RichTextPlugin"]; // New Phase 4 Actions & Datasources
34
- const UrlNavigationActionPlugin = ___plugins_actions_UrlNavigationActionPlugin["UrlNavigationActionPlugin"];
35
- const SubmitFormActionPlugin = ___plugins_actions_SubmitFormActionPlugin["SubmitFormActionPlugin"];
36
- const ODataListBindingPlugin = ___plugins_datasources_ODataListBindingPlugin["ODataListBindingPlugin"];
37
- const RemoteDropdownPlugin = ___plugins_datasources_RemoteDropdownPlugin["RemoteDropdownPlugin"];
38
- /**
39
- * Singleton orchestrator responsible for maintaining the registry of all available UI control plugins.
40
- * Resolves standard JSON schema types to their respective UI5 native controls.
41
- *
42
- * @namespace nz.co.siliconst.ui5.metaui.core
43
- * @public
44
- */
45
11
  class PluginRegistry {
46
- /** The single instance of the PluginRegistry. */
47
-
48
- /** Internal strongly typed registry holding plugin constructors. */
49
- registry = new Registry("Controls");
12
+ fieldIndex = {};
13
+ actionIndex = {};
14
+ layoutIndex = {};
15
+ activePromises = {};
50
16
  constructor() {
51
- // Built-in Default Mappings
52
- this.register("string", StringPlugin);
53
- this.register("number", NumberPlugin);
54
- this.register("integer", NumberPlugin);
55
- this.register("date", DatePlugin);
56
- this.register("boolean", BooleanPlugin);
57
- this.register("array", ArrayPlugin);
58
- this.register("object", ObjectPlugin);
17
+ // Core Mappings
18
+ this.registerPluginPath("string", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin");
19
+ this.registerPluginPath("number", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin");
20
+ this.registerPluginPath("integer", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin");
21
+ this.registerPluginPath("date", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin");
22
+ this.registerPluginPath("boolean", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin");
23
+ this.registerPluginPath("array", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin");
24
+ this.registerPluginPath("object", undefined, "nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin");
59
25
 
60
26
  // Widget Overrides
61
- this.register("string", TimePlugin, "time");
62
- this.register("string", DateTimePlugin, "datetime");
63
- this.register("boolean", SwitchPlugin, "switch");
64
- this.register("string", DropdownPlugin, "select");
65
- this.register("string", TextAreaPlugin, "textArea");
66
- this.register("string", CodeEditorPlugin, "codeEditor");
27
+ this.registerPluginPath("string", "time", "nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin");
28
+ this.registerPluginPath("string", "datetime", "nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin");
29
+ this.registerPluginPath("boolean", "switch", "nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin");
30
+ this.registerPluginPath("string", "select", "nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin");
31
+ this.registerPluginPath("string", "textArea", "nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin");
32
+ this.registerPluginPath("string", "codeEditor", "nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin");
67
33
 
68
34
  // Phase 1 Mappings
69
- this.register("string", FileUploaderPlugin, "fileUploader");
70
- this.register("array", MultiSelectPlugin, "multiSelect");
71
- this.register("number", SliderPlugin, "slider");
72
- this.register("number", RatingIndicatorPlugin, "rating");
73
- this.register("string", MessageStripPlugin, "messageStrip");
35
+ this.registerPluginPath("string", "fileUploader", "nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin");
36
+ this.registerPluginPath("array", "multiSelect", "nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin");
37
+ this.registerPluginPath("number", "slider", "nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin");
38
+ this.registerPluginPath("number", "rating", "nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin");
39
+ this.registerPluginPath("string", "messageStrip", "nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin");
74
40
 
75
41
  // Phase 5 Mappings (Hardware)
76
- this.register("string", CameraPlugin, "camera");
77
- this.register("string", SignaturePlugin, "signature");
78
- this.register("object", GeolocationPlugin, "location");
79
- this.register("string", BarcodeScannerPlugin, "scanner");
80
- this.register("string", VoiceInputPlugin, "voiceInput");
81
- this.register("string", RichTextPlugin, "richText");
42
+ this.registerPluginPath("string", "camera", "nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin");
43
+ this.registerPluginPath("string", "signature", "nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin");
44
+ this.registerPluginPath("object", "location", "nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin");
45
+ this.registerPluginPath("string", "scanner", "nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin");
46
+ this.registerPluginPath("string", "voiceInput", "nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin");
47
+ this.registerPluginPath("string", "richText", "nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin");
82
48
 
83
- // Phase 4 Mappings
84
- this.register("string", UrlNavigationActionPlugin, "urlButton");
85
- this.register("string", SubmitFormActionPlugin, "submitButton");
86
- this.register("string", ODataListBindingPlugin, "odataSelect");
87
- this.register("string", RemoteDropdownPlugin, "remoteDropdown");
88
- }
49
+ // Actions & Datasources
50
+ this.registerPluginPath("string", "urlButton", "nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin");
51
+ this.registerPluginPath("string", "submitButton", "nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin");
52
+ this.registerPluginPath("string", "odataSelect", "nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin");
53
+ this.registerPluginPath("string", "remoteDropdown", "nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin");
54
+ this.registerPluginPath("string", "liveSearch", "nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin");
55
+ this.registerPluginPath("string", "remoteValueHelp", "nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin");
89
56
 
90
- /**
91
- * Retrieves the singular instance of the PluginRegistry.
92
- * @returns {PluginRegistry} The active instance.
93
- */
57
+ // Layouts
58
+ this.registerLayoutPath("form", "nz/co/siliconst/ui5/metaui/layouts/FormLayout");
59
+ this.registerLayoutPath("table", "nz/co/siliconst/ui5/metaui/layouts/TableLayout");
60
+ this.registerLayoutPath("wizard", "nz/co/siliconst/ui5/metaui/layouts/WizardLayout");
61
+ this.registerLayoutPath("compact", "nz/co/siliconst/ui5/metaui/layouts/CompactLayout");
62
+ }
94
63
  static getInstance() {
95
64
  if (!PluginRegistry.instance) {
96
65
  PluginRegistry.instance = new PluginRegistry();
97
66
  }
98
67
  return PluginRegistry.instance;
99
68
  }
69
+ registerPluginPath(type, widgetName, path) {
70
+ const key = widgetName ? `${type}:${widgetName}` : type;
71
+ this.fieldIndex[key] = path;
72
+ }
73
+ registerActionPath(actionName, path) {
74
+ this.actionIndex[actionName] = path;
75
+ }
76
+ registerLayoutPath(strategy, path) {
77
+ this.layoutIndex[strategy] = path;
78
+ }
79
+ getFieldPath(type, widgetName) {
80
+ let path;
81
+ if (widgetName) {
82
+ path = this.fieldIndex[`${type}:${widgetName}`];
83
+ }
84
+ if (!path) {
85
+ path = this.fieldIndex[type];
86
+ }
87
+ if (!path) {
88
+ throw new Error(`No plugin path mapped for FieldType: ${type} (widget: ${widgetName})`);
89
+ }
90
+ return path;
91
+ }
92
+ getLayoutPath(strategy) {
93
+ const path = this.layoutIndex[strategy];
94
+ if (!path) {
95
+ throw new Error(`No layout path mapped for strategy: ${strategy}`);
96
+ }
97
+ return path;
98
+ }
100
99
 
101
100
  /**
102
- * Registers a new control plugin to be utilized by the Layout Managers.
101
+ * Statically traverses the schema structure to identify all required plugins
102
+ * and layouts without actually instantiating them.
103
103
  *
104
- * @param type The JSON Schema primitive type (e.g., 'string', 'number').
105
- * @param pluginConstructor The class constructor for the plugin implementation.
106
- * @param widgetName Optional UI hint to override the default type handler (e.g., 'textArea' for a 'string').
104
+ * @param {ISchema} schema The root JSON schema payload to traverse
105
+ * @returns {Set<string>} A distinct set of UI5 module paths required to render the schema
107
106
  */
108
- register(type, pluginConstructor, widgetName) {
109
- const key = widgetName ? `${type}:${widgetName}` : type;
110
- this.registry.register(key, pluginConstructor);
107
+ getPathsToLoad(schema) {
108
+ const pathsToLoad = new Set();
109
+
110
+ // 1. Gather layout strategy
111
+ const strategy = schema.layoutStrategy || (schema.type === "array" ? "table" : "form");
112
+ pathsToLoad.add(this.getLayoutPath(strategy));
113
+
114
+ // 2. Recursively gather field plugins
115
+ const scanProperties = props => {
116
+ for (const key in props) {
117
+ const prop = props[key];
118
+ try {
119
+ pathsToLoad.add(this.getFieldPath(prop.type || "string", prop.ui?.widget));
120
+ } catch (e) {
121
+ Logger.warn(`[MetaUI LazyLoad] Could not find mapped plugin for field ${key}`);
122
+ }
123
+ if (prop.properties) scanProperties(prop.properties);
124
+ if (prop.items && prop.items.properties) scanProperties(prop.items.properties);
125
+ if (prop.items && prop.items.type) {
126
+ try {
127
+ pathsToLoad.add(this.getFieldPath(prop.items.type, prop.items.ui?.widget));
128
+ } catch (e) {}
129
+ }
130
+ }
131
+ };
132
+ if (schema.properties) {
133
+ scanProperties(schema.properties);
134
+ } else if (schema.items && schema.items.properties) {
135
+ scanProperties(schema.items.properties);
136
+ }
137
+ return pathsToLoad;
111
138
  }
112
139
 
113
140
  /**
114
- * Resolves and instantiates the correct control plugin based on the field type and widget hint.
115
- * Falls back to the primitive type handler if the specific widget is not registered.
141
+ * Defers the generation of the UI until all required UI5 modules have been
142
+ * downloaded asynchronously. Maintains a cache of active promises to prevent
143
+ * redundant network requests for the same module.
116
144
  *
117
- * @param type The JSON Schema primitive type.
118
- * @param widgetName The specific UI widget hint (if provided in schema.ui.widget).
119
- * @returns {IPlugin} A new instance of the resolved plugin.
120
- * @throws {Error} If no handler is registered for the specified type.
145
+ * @param {ISchema} schema The root JSON schema payload to parse
146
+ * @returns {Promise<void>} Resolves when all dependencies are securely in the UI5 require cache
121
147
  */
122
- getPlugin(type, widgetName) {
123
- let PluginClass;
124
- if (widgetName) {
125
- PluginClass = this.registry.get(`${type}:${widgetName}`);
126
- }
127
- if (!PluginClass) {
128
- PluginClass = this.registry.get(type);
148
+ async preloadDependencies(schema) {
149
+ const pathsToLoad = this.getPathsToLoad(schema);
150
+
151
+ // 3. Batch execute sap.ui.require via Promises
152
+ const promises = Array.from(pathsToLoad).map(path => {
153
+ if (!this.activePromises[path]) {
154
+ this.activePromises[path] = new Promise((resolve, reject) => {
155
+ sap.ui.require([path], Module => resolve(Module), err => {
156
+ Logger.error(`Failed to lazy load module: ${path}`);
157
+ reject(err);
158
+ });
159
+ });
160
+ }
161
+ return this.activePromises[path];
162
+ });
163
+ await Promise.all(promises);
164
+ }
165
+ extractConstructor(Module) {
166
+ if (!Module) return null;
167
+ if (typeof Module === "function") return Module;
168
+ if (Module.default && typeof Module.default === "function") return Module.default;
169
+
170
+ // Handle namespace exports (e.g. { FormLayout: class... })
171
+ const keys = Object.keys(Module);
172
+ for (const key of keys) {
173
+ if (typeof Module[key] === "function") {
174
+ return Module[key];
175
+ }
129
176
  }
177
+ return null;
178
+ }
179
+ getPlugin(type, widgetName) {
180
+ const path = this.getFieldPath(type, widgetName);
181
+ const Module = sap.ui.require(path);
182
+ const PluginClass = this.extractConstructor(Module);
130
183
  if (!PluginClass) {
131
- const msg = `No control plugin registered for FieldType: ${type}${widgetName ? ` (widget: ${widgetName})` : ''}`;
132
- Logger.error("[MetaUI PluginRegistry]", msg);
133
- Logger.showErrorPopup(`Plugin Registry Error.\n\nDetails: ${msg}`);
134
- throw new Error(`[MetaUI] ${msg}`);
184
+ throw new Error(`[MetaUI Plugin Instantiation] Plugin ${path} was not preloaded or has no constructor!`);
135
185
  }
136
- try {
137
- return new PluginClass();
138
- } catch (error) {
139
- const msg = error.message;
140
- Logger.error(`[MetaUI PluginRegistry] Failed to instantiate plugin for ${type}`, msg);
141
- Logger.showErrorPopup(`Failed to instantiate plugin for '${type}'.\n\nDetails: ${msg}`);
142
- throw new Error(`[MetaUI Plugin Instantiation] ${msg}`);
186
+ return new PluginClass();
187
+ }
188
+ getLayout(strategy) {
189
+ const path = this.getLayoutPath(strategy);
190
+ const Module = sap.ui.require(path);
191
+ const LayoutClass = this.extractConstructor(Module);
192
+ if (!LayoutClass) {
193
+ throw new Error(`[MetaUI Layout Instantiation] Layout ${path} was not preloaded or has no constructor!`);
143
194
  }
195
+ return new LayoutClass();
144
196
  }
145
197
  }
146
198
  var __exports = {
@@ -1 +1 @@
1
- {"version":3,"file":"PluginRegistry-dbg.js","names":["Registry","___Registry","Logger","___utils_Logger","StringPlugin","___plugins_controls_StringPlugin","NumberPlugin","___plugins_controls_NumberPlugin","DatePlugin","___plugins_controls_DatePlugin","TimePlugin","___plugins_controls_TimePlugin","DateTimePlugin","___plugins_controls_DateTimePlugin","BooleanPlugin","___plugins_controls_BooleanPlugin","SwitchPlugin","___plugins_controls_SwitchPlugin","ArrayPlugin","___plugins_controls_ArrayPlugin","ObjectPlugin","___plugins_controls_ObjectPlugin","DropdownPlugin","___plugins_controls_DropdownPlugin","TextAreaPlugin","___plugins_controls_TextAreaPlugin","CodeEditorPlugin","___plugins_controls_CodeEditorPlugin","FileUploaderPlugin","___plugins_controls_FileUploaderPlugin","MultiSelectPlugin","___plugins_controls_MultiSelectPlugin","SliderPlugin","___plugins_controls_SliderPlugin","RatingIndicatorPlugin","___plugins_controls_RatingIndicatorPlugin","MessageStripPlugin","___plugins_controls_MessageStripPlugin","CameraPlugin","___plugins_controls_CameraPlugin","SignaturePlugin","___plugins_controls_SignaturePlugin","GeolocationPlugin","___plugins_controls_GeolocationPlugin","BarcodeScannerPlugin","___plugins_controls_BarcodeScannerPlugin","VoiceInputPlugin","___plugins_controls_VoiceInputPlugin","RichTextPlugin","___plugins_controls_RichTextPlugin","UrlNavigationActionPlugin","___plugins_actions_UrlNavigationActionPlugin","SubmitFormActionPlugin","___plugins_actions_SubmitFormActionPlugin","ODataListBindingPlugin","___plugins_datasources_ODataListBindingPlugin","RemoteDropdownPlugin","___plugins_datasources_RemoteDropdownPlugin","PluginRegistry","registry","constructor","register","getInstance","instance","type","pluginConstructor","widgetName","key","getPlugin","PluginClass","get","msg","error","showErrorPopup","Error","message","__exports","__esModule"],"sources":["PluginRegistry.ts"],"sourcesContent":["/**\n * @file PluginRegistry.ts\n * @description Centralized hub for mapping UI5 controls to SAP schema data types.\n * Enforces the Registry Pattern to decouple the core engine from specific UI5 control implementations.\n */\n\nimport { IPlugin } from \"../interfaces/IPlugin\";\nimport { FieldType } from \"../interfaces/ISchema\";\n\nimport { Registry } from \"./Registry\";\nimport { Logger } from \"../utils/Logger\";\n\nimport { StringPlugin } from \"../plugins/controls/StringPlugin\";\nimport { NumberPlugin } from \"../plugins/controls/NumberPlugin\";\nimport { DatePlugin } from \"../plugins/controls/DatePlugin\";\nimport { TimePlugin } from \"../plugins/controls/TimePlugin\";\nimport { DateTimePlugin } from \"../plugins/controls/DateTimePlugin\";\nimport { BooleanPlugin } from \"../plugins/controls/BooleanPlugin\";\nimport { SwitchPlugin } from \"../plugins/controls/SwitchPlugin\";\nimport { ArrayPlugin } from \"../plugins/controls/ArrayPlugin\";\nimport { ObjectPlugin } from \"../plugins/controls/ObjectPlugin\";\nimport { DropdownPlugin } from \"../plugins/controls/DropdownPlugin\";\nimport { TextAreaPlugin } from \"../plugins/controls/TextAreaPlugin\";\nimport { CodeEditorPlugin } from \"../plugins/controls/CodeEditorPlugin\";\n\n// New Phase 1 Controls\nimport { FileUploaderPlugin } from \"../plugins/controls/FileUploaderPlugin\";\nimport { MultiSelectPlugin } from \"../plugins/controls/MultiSelectPlugin\";\nimport { SliderPlugin } from \"../plugins/controls/SliderPlugin\";\nimport { RatingIndicatorPlugin } from \"../plugins/controls/RatingIndicatorPlugin\";\nimport { MessageStripPlugin } from \"../plugins/controls/MessageStripPlugin\";\n\n// New Phase 5 Hardware / Base64 Plugins\nimport { CameraPlugin } from \"../plugins/controls/CameraPlugin\";\nimport { SignaturePlugin } from \"../plugins/controls/SignaturePlugin\";\nimport { GeolocationPlugin } from \"../plugins/controls/GeolocationPlugin\";\nimport { BarcodeScannerPlugin } from \"../plugins/controls/BarcodeScannerPlugin\";\nimport { VoiceInputPlugin } from \"../plugins/controls/VoiceInputPlugin\";\nimport { RichTextPlugin } from \"../plugins/controls/RichTextPlugin\";\n\n// New Phase 4 Actions & Datasources\nimport { UrlNavigationActionPlugin } from \"../plugins/actions/UrlNavigationActionPlugin\";\nimport { SubmitFormActionPlugin } from \"../plugins/actions/SubmitFormActionPlugin\";\nimport { ODataListBindingPlugin } from \"../plugins/datasources/ODataListBindingPlugin\";\nimport { RemoteDropdownPlugin } from \"../plugins/datasources/RemoteDropdownPlugin\";\n\n/**\n * Singleton orchestrator responsible for maintaining the registry of all available UI control plugins.\n * Resolves standard JSON schema types to their respective UI5 native controls.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class PluginRegistry {\n /** The single instance of the PluginRegistry. */\n private static instance: PluginRegistry;\n \n /** Internal strongly typed registry holding plugin constructors. */\n private readonly registry: Registry<new () => IPlugin> = new Registry<new () => IPlugin>(\"Controls\");\n\n private constructor() {\n // Built-in Default Mappings\n this.register(\"string\", StringPlugin);\n this.register(\"number\", NumberPlugin);\n this.register(\"integer\", NumberPlugin);\n this.register(\"date\", DatePlugin);\n this.register(\"boolean\", BooleanPlugin);\n this.register(\"array\", ArrayPlugin);\n this.register(\"object\", ObjectPlugin);\n\n // Widget Overrides\n this.register(\"string\", TimePlugin, \"time\");\n this.register(\"string\", DateTimePlugin, \"datetime\");\n this.register(\"boolean\", SwitchPlugin, \"switch\");\n this.register(\"string\", DropdownPlugin, \"select\");\n this.register(\"string\", TextAreaPlugin, \"textArea\");\n this.register(\"string\", CodeEditorPlugin, \"codeEditor\");\n \n // Phase 1 Mappings\n this.register(\"string\", FileUploaderPlugin, \"fileUploader\");\n this.register(\"array\", MultiSelectPlugin, \"multiSelect\");\n this.register(\"number\", SliderPlugin, \"slider\");\n this.register(\"number\", RatingIndicatorPlugin, \"rating\");\n this.register(\"string\", MessageStripPlugin, \"messageStrip\");\n\n // Phase 5 Mappings (Hardware)\n this.register(\"string\", CameraPlugin, \"camera\");\n this.register(\"string\", SignaturePlugin, \"signature\");\n this.register(\"object\", GeolocationPlugin, \"location\");\n this.register(\"string\", BarcodeScannerPlugin, \"scanner\");\n this.register(\"string\", VoiceInputPlugin, \"voiceInput\");\n this.register(\"string\", RichTextPlugin, \"richText\");\n\n // Phase 4 Mappings\n this.register(\"string\", UrlNavigationActionPlugin, \"urlButton\");\n this.register(\"string\", SubmitFormActionPlugin, \"submitButton\");\n this.register(\"string\", ODataListBindingPlugin, \"odataSelect\");\n this.register(\"string\", RemoteDropdownPlugin, \"remoteDropdown\");\n }\n\n /**\n * Retrieves the singular instance of the PluginRegistry.\n * @returns {PluginRegistry} The active instance.\n */\n public static getInstance(): PluginRegistry {\n if (!PluginRegistry.instance) {\n PluginRegistry.instance = new PluginRegistry();\n }\n return PluginRegistry.instance;\n }\n\n /**\n * Registers a new control plugin to be utilized by the Layout Managers.\n * \n * @param type The JSON Schema primitive type (e.g., 'string', 'number').\n * @param pluginConstructor The class constructor for the plugin implementation.\n * @param widgetName Optional UI hint to override the default type handler (e.g., 'textArea' for a 'string').\n */\n public register(type: FieldType, pluginConstructor: new () => IPlugin, widgetName?: string): void {\n const key = widgetName ? `${type}:${widgetName}` : type;\n this.registry.register(key, pluginConstructor);\n }\n\n /**\n * Resolves and instantiates the correct control plugin based on the field type and widget hint.\n * Falls back to the primitive type handler if the specific widget is not registered.\n * \n * @param type The JSON Schema primitive type.\n * @param widgetName The specific UI widget hint (if provided in schema.ui.widget).\n * @returns {IPlugin} A new instance of the resolved plugin.\n * @throws {Error} If no handler is registered for the specified type.\n */\n public getPlugin(type: FieldType, widgetName?: string): IPlugin {\n let PluginClass;\n \n if (widgetName) {\n PluginClass = this.registry.get(`${type}:${widgetName}`);\n }\n \n if (!PluginClass) {\n PluginClass = this.registry.get(type);\n }\n\n if (!PluginClass) {\n const msg = `No control plugin registered for FieldType: ${type}${widgetName ? ` (widget: ${widgetName})` : ''}`;\n Logger.error(\"[MetaUI PluginRegistry]\", msg);\n Logger.showErrorPopup(`Plugin Registry Error.\\n\\nDetails: ${msg}`);\n throw new Error(`[MetaUI] ${msg}`);\n }\n \n try {\n return new PluginClass();\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI PluginRegistry] Failed to instantiate plugin for ${type}`, msg);\n Logger.showErrorPopup(`Failed to instantiate plugin for '${type}'.\\n\\nDetails: ${msg}`);\n throw new Error(`[MetaUI Plugin Instantiation] ${msg}`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PluginRegistry-dbg.js","names":["Logger","___utils_Logger","PluginRegistry","fieldIndex","actionIndex","layoutIndex","activePromises","constructor","registerPluginPath","undefined","registerLayoutPath","getInstance","instance","type","widgetName","path","key","registerActionPath","actionName","strategy","getFieldPath","Error","getLayoutPath","getPathsToLoad","schema","pathsToLoad","Set","layoutStrategy","add","scanProperties","props","prop","ui","widget","e","warn","properties","items","preloadDependencies","promises","Array","from","map","Promise","resolve","reject","sap","require","Module","err","error","all","extractConstructor","default","keys","Object","getPlugin","PluginClass","getLayout","LayoutClass","__exports","__esModule"],"sources":["PluginRegistry.ts"],"sourcesContent":["/**\n * @file PluginRegistry.ts\n * @description Centralized hub for mapping UI5 controls to SAP schema data types.\n * Enforces the Registry Pattern to decouple the core engine from specific UI5 control implementations.\n * NOW WITH UNIVERSAL LAZY LOADING.\n */\n\nimport { IPlugin } from \"../interfaces/IPlugin\";\nimport { FieldType, ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { ILayoutManager } from \"../interfaces/ILayoutManager\";\nimport { Logger } from \"../utils/Logger\";\nimport { DefaultLayoutGenerator } from \"./DefaultLayoutGenerator\";\n\nexport class PluginRegistry {\n private static instance: PluginRegistry;\n \n private fieldIndex: Record<string, string> = {};\n private actionIndex: Record<string, string> = {};\n private layoutIndex: Record<string, string> = {};\n \n private activePromises: Record<string, Promise<any>> = {};\n\n private constructor() {\n // Core Mappings\n this.registerPluginPath(\"string\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin\");\n this.registerPluginPath(\"number\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin\");\n this.registerPluginPath(\"integer\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin\");\n this.registerPluginPath(\"date\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin\");\n this.registerPluginPath(\"boolean\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin\");\n this.registerPluginPath(\"array\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin\");\n this.registerPluginPath(\"object\", undefined, \"nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin\");\n\n // Widget Overrides\n this.registerPluginPath(\"string\", \"time\", \"nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin\");\n this.registerPluginPath(\"string\", \"datetime\", \"nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin\");\n this.registerPluginPath(\"boolean\", \"switch\", \"nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin\");\n this.registerPluginPath(\"string\", \"select\", \"nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin\");\n this.registerPluginPath(\"string\", \"textArea\", \"nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin\");\n this.registerPluginPath(\"string\", \"codeEditor\", \"nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin\");\n \n // Phase 1 Mappings\n this.registerPluginPath(\"string\", \"fileUploader\", \"nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin\");\n this.registerPluginPath(\"array\", \"multiSelect\", \"nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin\");\n this.registerPluginPath(\"number\", \"slider\", \"nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin\");\n this.registerPluginPath(\"number\", \"rating\", \"nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin\");\n this.registerPluginPath(\"string\", \"messageStrip\", \"nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin\");\n\n // Phase 5 Mappings (Hardware)\n this.registerPluginPath(\"string\", \"camera\", \"nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin\");\n this.registerPluginPath(\"string\", \"signature\", \"nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin\");\n this.registerPluginPath(\"object\", \"location\", \"nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin\");\n this.registerPluginPath(\"string\", \"scanner\", \"nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin\");\n this.registerPluginPath(\"string\", \"voiceInput\", \"nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin\");\n this.registerPluginPath(\"string\", \"richText\", \"nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin\");\n\n // Actions & Datasources\n this.registerPluginPath(\"string\", \"urlButton\", \"nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin\");\n this.registerPluginPath(\"string\", \"submitButton\", \"nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin\");\n this.registerPluginPath(\"string\", \"odataSelect\", \"nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin\");\n this.registerPluginPath(\"string\", \"remoteDropdown\", \"nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin\");\n this.registerPluginPath(\"string\", \"liveSearch\", \"nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin\");\n this.registerPluginPath(\"string\", \"remoteValueHelp\", \"nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin\");\n\n // Layouts\n this.registerLayoutPath(\"form\", \"nz/co/siliconst/ui5/metaui/layouts/FormLayout\");\n this.registerLayoutPath(\"table\", \"nz/co/siliconst/ui5/metaui/layouts/TableLayout\");\n this.registerLayoutPath(\"wizard\", \"nz/co/siliconst/ui5/metaui/layouts/WizardLayout\");\n this.registerLayoutPath(\"compact\", \"nz/co/siliconst/ui5/metaui/layouts/CompactLayout\");\n }\n\n public static getInstance(): PluginRegistry {\n if (!PluginRegistry.instance) {\n PluginRegistry.instance = new PluginRegistry();\n }\n return PluginRegistry.instance;\n }\n\n public registerPluginPath(type: FieldType, widgetName: string | undefined, path: string): void {\n const key = widgetName ? `${type}:${widgetName}` : type;\n this.fieldIndex[key] = path;\n }\n\n public registerActionPath(actionName: string, path: string): void {\n this.actionIndex[actionName] = path;\n }\n\n public registerLayoutPath(strategy: string, path: string): void {\n this.layoutIndex[strategy] = path;\n }\n\n private getFieldPath(type: FieldType, widgetName?: string): string {\n let path;\n if (widgetName) {\n path = this.fieldIndex[`${type}:${widgetName}`];\n }\n if (!path) {\n path = this.fieldIndex[type];\n }\n if (!path) {\n throw new Error(`No plugin path mapped for FieldType: ${type} (widget: ${widgetName})`);\n }\n return path;\n }\n\n private getLayoutPath(strategy: string): string {\n const path = this.layoutIndex[strategy];\n if (!path) {\n throw new Error(`No layout path mapped for strategy: ${strategy}`);\n }\n return path;\n }\n\n /**\n * Statically traverses the schema structure to identify all required plugins\n * and layouts without actually instantiating them.\n * \n * @param {ISchema} schema The root JSON schema payload to traverse\n * @returns {Set<string>} A distinct set of UI5 module paths required to render the schema\n */\n public getPathsToLoad(schema: ISchema): Set<string> {\n const pathsToLoad = new Set<string>();\n \n // 1. Gather layout strategy\n const strategy = schema.layoutStrategy || (schema.type === \"array\" ? \"table\" : \"form\");\n pathsToLoad.add(this.getLayoutPath(strategy));\n\n // 2. Recursively gather field plugins\n const scanProperties = (props: Record<string, IPropertyMetadata>) => {\n for (const key in props) {\n const prop = props[key];\n try {\n pathsToLoad.add(this.getFieldPath(prop.type || \"string\", prop.ui?.widget));\n } catch (e) {\n Logger.warn(`[MetaUI LazyLoad] Could not find mapped plugin for field ${key}`);\n }\n if (prop.properties) scanProperties(prop.properties);\n if (prop.items && prop.items.properties) scanProperties(prop.items.properties);\n if (prop.items && prop.items.type) {\n try {\n pathsToLoad.add(this.getFieldPath(prop.items.type, prop.items.ui?.widget));\n } catch (e) {}\n }\n }\n };\n\n if (schema.properties) {\n scanProperties(schema.properties);\n } else if (schema.items && schema.items.properties) {\n scanProperties(schema.items.properties);\n }\n\n return pathsToLoad;\n }\n\n /**\n * Defers the generation of the UI until all required UI5 modules have been\n * downloaded asynchronously. Maintains a cache of active promises to prevent\n * redundant network requests for the same module.\n * \n * @param {ISchema} schema The root JSON schema payload to parse\n * @returns {Promise<void>} Resolves when all dependencies are securely in the UI5 require cache\n */\n public async preloadDependencies(schema: ISchema): Promise<void> {\n const pathsToLoad = this.getPathsToLoad(schema);\n\n // 3. Batch execute sap.ui.require via Promises\n const promises = Array.from(pathsToLoad).map(path => {\n if (!this.activePromises[path]) {\n this.activePromises[path] = new Promise((resolve, reject) => {\n sap.ui.require([path], \n (Module: any) => resolve(Module), \n (err: any) => {\n Logger.error(`Failed to lazy load module: ${path}`);\n reject(err);\n }\n );\n });\n }\n return this.activePromises[path];\n });\n\n await Promise.all(promises);\n }\n\n private extractConstructor(Module: any): any {\n if (!Module) return null;\n if (typeof Module === \"function\") return Module;\n if (Module.default && typeof Module.default === \"function\") return Module.default;\n \n // Handle namespace exports (e.g. { FormLayout: class... })\n const keys = Object.keys(Module);\n for (const key of keys) {\n if (typeof Module[key] === \"function\") {\n return Module[key];\n }\n }\n return null;\n }\n\n public getPlugin(type: FieldType, widgetName?: string): IPlugin {\n const path = this.getFieldPath(type, widgetName);\n const Module = sap.ui.require(path);\n const PluginClass = this.extractConstructor(Module);\n \n if (!PluginClass) {\n throw new Error(`[MetaUI Plugin Instantiation] Plugin ${path} was not preloaded or has no constructor!`);\n }\n \n return new PluginClass();\n }\n\n public getLayout(strategy: string): ILayoutManager {\n const path = this.getLayoutPath(strategy);\n const Module = sap.ui.require(path);\n const LayoutClass = this.extractConstructor(Module);\n \n if (!LayoutClass) {\n throw new Error(`[MetaUI Layout Instantiation] Layout ${path} was not preloaded or has no constructor!`);\n }\n \n return new LayoutClass();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,45 +3,44 @@ declare module "nz/co/siliconst/ui5/metaui/core/PluginRegistry" {
3
3
  * @file PluginRegistry.ts
4
4
  * @description Centralized hub for mapping UI5 controls to SAP schema data types.
5
5
  * Enforces the Registry Pattern to decouple the core engine from specific UI5 control implementations.
6
+ * NOW WITH UNIVERSAL LAZY LOADING.
6
7
  */
7
8
  import { IPlugin } from "nz/co/siliconst/ui5/metaui/interfaces/IPlugin";
8
- import { FieldType } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
9
- /**
10
- * Singleton orchestrator responsible for maintaining the registry of all available UI control plugins.
11
- * Resolves standard JSON schema types to their respective UI5 native controls.
12
- *
13
- * @namespace nz.co.siliconst.ui5.metaui.core
14
- * @public
15
- */
9
+ import { FieldType, ISchema } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
10
+ import { ILayoutManager } from "nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager";
16
11
  export class PluginRegistry {
17
- /** The single instance of the PluginRegistry. */
18
12
  private static instance;
19
- /** Internal strongly typed registry holding plugin constructors. */
20
- private readonly registry;
13
+ private fieldIndex;
14
+ private actionIndex;
15
+ private layoutIndex;
16
+ private activePromises;
21
17
  private constructor();
22
- /**
23
- * Retrieves the singular instance of the PluginRegistry.
24
- * @returns {PluginRegistry} The active instance.
25
- */
26
18
  static getInstance(): PluginRegistry;
19
+ registerPluginPath(type: FieldType, widgetName: string | undefined, path: string): void;
20
+ registerActionPath(actionName: string, path: string): void;
21
+ registerLayoutPath(strategy: string, path: string): void;
22
+ private getFieldPath;
23
+ private getLayoutPath;
27
24
  /**
28
- * Registers a new control plugin to be utilized by the Layout Managers.
25
+ * Statically traverses the schema structure to identify all required plugins
26
+ * and layouts without actually instantiating them.
29
27
  *
30
- * @param type The JSON Schema primitive type (e.g., 'string', 'number').
31
- * @param pluginConstructor The class constructor for the plugin implementation.
32
- * @param widgetName Optional UI hint to override the default type handler (e.g., 'textArea' for a 'string').
28
+ * @param {ISchema} schema The root JSON schema payload to traverse
29
+ * @returns {Set<string>} A distinct set of UI5 module paths required to render the schema
33
30
  */
34
- register(type: FieldType, pluginConstructor: new () => IPlugin, widgetName?: string): void;
31
+ getPathsToLoad(schema: ISchema): Set<string>;
35
32
  /**
36
- * Resolves and instantiates the correct control plugin based on the field type and widget hint.
37
- * Falls back to the primitive type handler if the specific widget is not registered.
33
+ * Defers the generation of the UI until all required UI5 modules have been
34
+ * downloaded asynchronously. Maintains a cache of active promises to prevent
35
+ * redundant network requests for the same module.
38
36
  *
39
- * @param type The JSON Schema primitive type.
40
- * @param widgetName The specific UI widget hint (if provided in schema.ui.widget).
41
- * @returns {IPlugin} A new instance of the resolved plugin.
42
- * @throws {Error} If no handler is registered for the specified type.
37
+ * @param {ISchema} schema The root JSON schema payload to parse
38
+ * @returns {Promise<void>} Resolves when all dependencies are securely in the UI5 require cache
43
39
  */
40
+ preloadDependencies(schema: ISchema): Promise<void>;
41
+ private extractConstructor;
44
42
  getPlugin(type: FieldType, widgetName?: string): IPlugin;
43
+ getLayout(strategy: string): ILayoutManager;
45
44
  }
46
45
  }
47
46
  //# sourceMappingURL=PluginRegistry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginRegistry.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,gDAAgD,CAAC;IAChE;;;;OAIG;IAEH,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;IACxE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;IAuC1E;;;;;;OAMG;IACH,MAAa,cAAc;QACvB,iDAAiD;QACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;QAExC,oEAAoE;QACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4E;QAErG,OAAO;QAwCP;;;WAGG;eACW,WAAW,IAAI,cAAc;QAO3C;;;;;;WAMG;QACI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;QAKjG;;;;;;;;WAQG;QACI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;KA2BlE;CAEA"}
1
+ {"version":3,"file":"PluginRegistry.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,gDAAgD,CAAC;IAChE;;;;;OAKG;IAEH,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;IACxE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAqB,MAAM,+CAA+C,CAAC;IACtG,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;IAItF,MAAa,cAAc;QACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;QAExC,OAAO,CAAC,UAAU,CAA8B;QAChD,OAAO,CAAC,WAAW,CAA8B;QACjD,OAAO,CAAC,WAAW,CAA8B;QAEjD,OAAO,CAAC,cAAc,CAAoC;QAE1D,OAAO;eAgDO,WAAW,IAAI,cAAc;QAOpC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;QAKvF,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;QAI1D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;QAI/D,OAAO,CAAC,YAAY;QAcpB,OAAO,CAAC,aAAa;QAQrB;;;;;;WAMG;QACI,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;QAmCnD;;;;;;;WAOG;QACU,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAsBhE,OAAO,CAAC,kBAAkB;QAenB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;QAYxD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;KAWrD;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./Registry","../utils/Logger","../plugins/controls/StringPlugin","../plugins/controls/NumberPlugin","../plugins/controls/DatePlugin","../plugins/controls/TimePlugin","../plugins/controls/DateTimePlugin","../plugins/controls/BooleanPlugin","../plugins/controls/SwitchPlugin","../plugins/controls/ArrayPlugin","../plugins/controls/ObjectPlugin","../plugins/controls/DropdownPlugin","../plugins/controls/TextAreaPlugin","../plugins/controls/CodeEditorPlugin","../plugins/controls/FileUploaderPlugin","../plugins/controls/MultiSelectPlugin","../plugins/controls/SliderPlugin","../plugins/controls/RatingIndicatorPlugin","../plugins/controls/MessageStripPlugin","../plugins/controls/CameraPlugin","../plugins/controls/SignaturePlugin","../plugins/controls/GeolocationPlugin","../plugins/controls/BarcodeScannerPlugin","../plugins/controls/VoiceInputPlugin","../plugins/controls/RichTextPlugin","../plugins/actions/UrlNavigationActionPlugin","../plugins/actions/SubmitFormActionPlugin","../plugins/datasources/ODataListBindingPlugin","../plugins/datasources/RemoteDropdownPlugin"],function(i,t,n,r,s,e,g,o,l,u,c,a,P,p,h,d,m,S,w,y,b,D,$,R,I,f,T,A,M){"use strict";const U=i["Registry"];const B=t["Logger"];const E=n["StringPlugin"];const F=r["NumberPlugin"];const x=s["DatePlugin"];const C=e["TimePlugin"];const N=g["DateTimePlugin"];const j=o["BooleanPlugin"];const v=l["SwitchPlugin"];const L=u["ArrayPlugin"];const O=c["ObjectPlugin"];const G=a["DropdownPlugin"];const V=P["TextAreaPlugin"];const _=p["CodeEditorPlugin"];const k=h["FileUploaderPlugin"];const q=d["MultiSelectPlugin"];const z=m["SliderPlugin"];const H=S["RatingIndicatorPlugin"];const J=w["MessageStripPlugin"];const K=y["CameraPlugin"];const Q=b["SignaturePlugin"];const W=D["GeolocationPlugin"];const X=$["BarcodeScannerPlugin"];const Y=R["VoiceInputPlugin"];const Z=I["RichTextPlugin"];const ii=f["UrlNavigationActionPlugin"];const ti=T["SubmitFormActionPlugin"];const ni=A["ODataListBindingPlugin"];const ri=M["RemoteDropdownPlugin"];class si{registry=new U("Controls");constructor(){this.register("string",E);this.register("number",F);this.register("integer",F);this.register("date",x);this.register("boolean",j);this.register("array",L);this.register("object",O);this.register("string",C,"time");this.register("string",N,"datetime");this.register("boolean",v,"switch");this.register("string",G,"select");this.register("string",V,"textArea");this.register("string",_,"codeEditor");this.register("string",k,"fileUploader");this.register("array",q,"multiSelect");this.register("number",z,"slider");this.register("number",H,"rating");this.register("string",J,"messageStrip");this.register("string",K,"camera");this.register("string",Q,"signature");this.register("object",W,"location");this.register("string",X,"scanner");this.register("string",Y,"voiceInput");this.register("string",Z,"richText");this.register("string",ii,"urlButton");this.register("string",ti,"submitButton");this.register("string",ni,"odataSelect");this.register("string",ri,"remoteDropdown")}static getInstance(){if(!si.instance){si.instance=new si}return si.instance}register(i,t,n){const r=n?`${i}:${n}`:i;this.registry.register(r,t)}getPlugin(i,t){let n;if(t){n=this.registry.get(`${i}:${t}`)}if(!n){n=this.registry.get(i)}if(!n){const n=`No control plugin registered for FieldType: ${i}${t?` (widget: ${t})`:""}`;B.error("[MetaUI PluginRegistry]",n);B.showErrorPopup(`Plugin Registry Error.\n\nDetails: ${n}`);throw new Error(`[MetaUI] ${n}`)}try{return new n}catch(t){const n=t.message;B.error(`[MetaUI PluginRegistry] Failed to instantiate plugin for ${i}`,n);B.showErrorPopup(`Failed to instantiate plugin for '${i}'.\n\nDetails: ${n}`);throw new Error(`[MetaUI Plugin Instantiation] ${n}`)}}}var ei={__esModule:true};ei.PluginRegistry=si;return ei});
1
+ sap.ui.define(["../utils/Logger"],function(i){"use strict";const t=i["Logger"];class e{fieldIndex={};actionIndex={};layoutIndex={};activePromises={};constructor(){this.registerPluginPath("string",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin");this.registerPluginPath("number",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin");this.registerPluginPath("integer",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin");this.registerPluginPath("date",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin");this.registerPluginPath("boolean",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin");this.registerPluginPath("array",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin");this.registerPluginPath("object",undefined,"nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin");this.registerPluginPath("string","time","nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin");this.registerPluginPath("string","datetime","nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin");this.registerPluginPath("boolean","switch","nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin");this.registerPluginPath("string","select","nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin");this.registerPluginPath("string","textArea","nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin");this.registerPluginPath("string","codeEditor","nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin");this.registerPluginPath("string","fileUploader","nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin");this.registerPluginPath("array","multiSelect","nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin");this.registerPluginPath("number","slider","nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin");this.registerPluginPath("number","rating","nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin");this.registerPluginPath("string","messageStrip","nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin");this.registerPluginPath("string","camera","nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin");this.registerPluginPath("string","signature","nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin");this.registerPluginPath("object","location","nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin");this.registerPluginPath("string","scanner","nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin");this.registerPluginPath("string","voiceInput","nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin");this.registerPluginPath("string","richText","nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin");this.registerPluginPath("string","urlButton","nz/co/siliconst/ui5/metaui/plugins/actions/UrlNavigationActionPlugin");this.registerPluginPath("string","submitButton","nz/co/siliconst/ui5/metaui/plugins/actions/SubmitFormActionPlugin");this.registerPluginPath("string","odataSelect","nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin");this.registerPluginPath("string","remoteDropdown","nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin");this.registerPluginPath("string","liveSearch","nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin");this.registerPluginPath("string","remoteValueHelp","nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin");this.registerLayoutPath("form","nz/co/siliconst/ui5/metaui/layouts/FormLayout");this.registerLayoutPath("table","nz/co/siliconst/ui5/metaui/layouts/TableLayout");this.registerLayoutPath("wizard","nz/co/siliconst/ui5/metaui/layouts/WizardLayout");this.registerLayoutPath("compact","nz/co/siliconst/ui5/metaui/layouts/CompactLayout")}static getInstance(){if(!e.instance){e.instance=new e}return e.instance}registerPluginPath(i,t,e){const n=t?`${i}:${t}`:i;this.fieldIndex[n]=e}registerActionPath(i,t){this.actionIndex[i]=t}registerLayoutPath(i,t){this.layoutIndex[i]=t}getFieldPath(i,t){let e;if(t){e=this.fieldIndex[`${i}:${t}`]}if(!e){e=this.fieldIndex[i]}if(!e){throw new Error(`No plugin path mapped for FieldType: ${i} (widget: ${t})`)}return e}getLayoutPath(i){const t=this.layoutIndex[i];if(!t){throw new Error(`No layout path mapped for strategy: ${i}`)}return t}getPathsToLoad(i){const e=new Set;const n=i.layoutStrategy||(i.type==="array"?"table":"form");e.add(this.getLayoutPath(n));const s=i=>{for(const n in i){const o=i[n];try{e.add(this.getFieldPath(o.type||"string",o.ui?.widget))}catch(i){t.warn(`[MetaUI LazyLoad] Could not find mapped plugin for field ${n}`)}if(o.properties)s(o.properties);if(o.items&&o.items.properties)s(o.items.properties);if(o.items&&o.items.type){try{e.add(this.getFieldPath(o.items.type,o.items.ui?.widget))}catch(i){}}}};if(i.properties){s(i.properties)}else if(i.items&&i.items.properties){s(i.items.properties)}return e}async preloadDependencies(i){const e=this.getPathsToLoad(i);const n=Array.from(e).map(i=>{if(!this.activePromises[i]){this.activePromises[i]=new Promise((e,n)=>{sap.ui.require([i],i=>e(i),e=>{t.error(`Failed to lazy load module: ${i}`);n(e)})})}return this.activePromises[i]});await Promise.all(n)}extractConstructor(i){if(!i)return null;if(typeof i==="function")return i;if(i.default&&typeof i.default==="function")return i.default;const t=Object.keys(i);for(const e of t){if(typeof i[e]==="function"){return i[e]}}return null}getPlugin(i,t){const e=this.getFieldPath(i,t);const n=sap.ui.require(e);const s=this.extractConstructor(n);if(!s){throw new Error(`[MetaUI Plugin Instantiation] Plugin ${e} was not preloaded or has no constructor!`)}return new s}getLayout(i){const t=this.getLayoutPath(i);const e=sap.ui.require(t);const n=this.extractConstructor(e);if(!n){throw new Error(`[MetaUI Layout Instantiation] Layout ${t} was not preloaded or has no constructor!`)}return new n}}var n={__esModule:true};n.PluginRegistry=e;return n});
2
2
  //# sourceMappingURL=PluginRegistry.js.map